From 8cb9c7daf0443ff4f62e60fe2404d6085a000c5f Mon Sep 17 00:00:00 2001 From: Jiayi Yin Date: Tue, 5 Sep 2023 11:17:54 +0800 Subject: [PATCH] First commit for open source --- .github/workflows/build-push-image.yaml | 163 +++ .github/workflows/build-test.yaml | 95 ++ .gitignore | 53 + .license.tpl | 212 ++++ .licenserc.yaml | 61 ++ .mvn/wrapper/.gitignore | 15 + .mvn/wrapper/MavenWrapperDownloader.java | 114 +++ .mvn/wrapper/maven-wrapper.properties | 17 + CHANGELOG.md | 93 ++ Dockerfile | 57 ++ Dockerfile.jvm | 107 ++ LICENSE | 204 ++++ NOTICE | 19 + README.md | 102 ++ README_cn.md | 100 ++ VERSION | 1 + licenses/license-antlr-antlr.txt | 1 + licenses/license-com.belerweb-pinyin4j.txt | 1 + licenses/license-com.beust-jcommander.txt | 1 + licenses/license-com.cronutils-cron-utils.txt | 1 + licenses/license-com.fasterxml-classmate.txt | 1 + ...erxml.jackson.core-jackson-annotations.txt | 202 ++++ ...om.fasterxml.jackson.core-jackson-core.txt | 202 ++++ ...asterxml.jackson.core-jackson-databind.txt | 202 ++++ ...son.dataformat-jackson-dataformat-yaml.txt | 0 ...jackson.datatype-jackson-datatype-jdk8.txt | 1 + ...ckson.datatype-jackson-datatype-jsr310.txt | 0 ...erxml.jackson.jaxrs-jackson-jaxrs-base.txt | 0 ...kson.jaxrs-jackson-jaxrs-json-provider.txt | 0 ...module-jackson-module-jaxb-annotations.txt | 0 ....module-jackson-module-parameter-names.txt | 1 + ...com.github.ben-manes.caffeine-caffeine.txt | 202 ++++ ...om.github.jai-imageio-jai-imageio-core.txt | 39 + ...license-com.github.java-json-tools-btf.txt | 2 + ...thub.java-json-tools-jackson-coreutils.txt | 2 + ...-com.github.java-json-tools-json-patch.txt | 2 + ...-com.github.java-json-tools-msg-simple.txt | 2 + ...icense-com.google.code.findbugs-jsr305.txt | 1 + .../license-com.google.code.gson-gson.txt | 0 ...gle.errorprone-error-prone-annotations.txt | 1 + ...license-com.google.guava-failureaccess.txt | 1 + licenses/license-com.google.guava-guava.txt | 1 + ...ense-com.google.guava-listenablefuture.txt | 0 ...e-com.google.j2objc-j2objc-annotations.txt | 1 + licenses/license-com.google.zxing-core.txt | 1 + licenses/license-com.google.zxing-javase.txt | 15 + licenses/license-com.ibm.async-asyncutil.txt | 1 + ...cense-com.mchange-mchange-commons-java.txt | 2 + .../license-com.squareup.okhttp3-okhttp.txt | 0 licenses/license-com.squareup.okio-okio.txt | 0 ...-com.sun.activation-jakarta.activation.txt | 29 + ...-com.sun.istack-istack-commons-runtime.txt | 29 + .../license-com.sun.mail-jakarta.mail.txt | 637 ++++++++++++ .../license-commons-codec-commons-codec.txt | 202 ++++ licenses/license-commons-io-commons-io.txt | 203 ++++ licenses/license-dev.samstevens.totp-totp.txt | 0 licenses/license-io.agroal-agroal-api.txt | 1 + .../license-io.agroal-agroal-narayana.txt | 1 + licenses/license-io.agroal-agroal-pool.txt | 1 + licenses/license-io.netty-netty-buffer.txt | 1 + licenses/license-io.netty-netty-codec-dns.txt | 1 + .../license-io.netty-netty-codec-haproxy.txt | 1 + .../license-io.netty-netty-codec-http.txt | 1 + .../license-io.netty-netty-codec-http2.txt | 1 + .../license-io.netty-netty-codec-socks.txt | 1 + licenses/license-io.netty-netty-codec.txt | 1 + licenses/license-io.netty-netty-common.txt | 1 + .../license-io.netty-netty-handler-proxy.txt | 1 + licenses/license-io.netty-netty-handler.txt | 1 + .../license-io.netty-netty-resolver-dns.txt | 1 + licenses/license-io.netty-netty-resolver.txt | 1 + licenses/license-io.netty-netty-transport.txt | 1 + .../license-io.quarkus-quarkus-agroal.txt | 0 ...e-io.quarkus-quarkus-apache-httpclient.txt | 0 licenses/license-io.quarkus-quarkus-arc.txt | 0 ...se-io.quarkus-quarkus-bootstrap-runner.txt | 0 .../license-io.quarkus-quarkus-caffeine.txt | 0 ...license-io.quarkus-quarkus-config-yaml.txt | 0 licenses/license-io.quarkus-quarkus-core.txt | 0 ...license-io.quarkus-quarkus-credentials.txt | 0 ...e-io.quarkus-quarkus-datasource-common.txt | 0 .../license-io.quarkus-quarkus-datasource.txt | 0 ...o.quarkus-quarkus-development-mode-spi.txt | 0 .../license-io.quarkus-quarkus-flyway.txt | 0 ...s-quarkus-hibernate-orm-panache-common.txt | 0 ....quarkus-quarkus-hibernate-orm-panache.txt | 0 ...cense-io.quarkus-quarkus-hibernate-orm.txt | 0 ...io.quarkus-quarkus-hibernate-validator.txt | 0 ...icense-io.quarkus-quarkus-ide-launcher.txt | 0 .../license-io.quarkus-quarkus-jackson.txt | 0 licenses/license-io.quarkus-quarkus-jaxb.txt | 0 licenses/license-io.quarkus-quarkus-jaxp.txt | 0 ...nse-io.quarkus-quarkus-jdbc-postgresql.txt | 0 licenses/license-io.quarkus-quarkus-jsonp.txt | 0 ...ense-io.quarkus-quarkus-logging-sentry.txt | 0 .../license-io.quarkus-quarkus-mutiny.txt | 0 ...icense-io.quarkus-quarkus-narayana-jta.txt | 0 licenses/license-io.quarkus-quarkus-netty.txt | 0 ...ense-io.quarkus-quarkus-panache-common.txt | 0 ...arkus-quarkus-panache-hibernate-common.txt | 0 .../license-io.quarkus-quarkus-quartz.txt | 0 ...nse-io.quarkus-quarkus-reactive-routes.txt | 0 ...icense-io.quarkus-quarkus-redis-client.txt | 0 ...io.quarkus-quarkus-rest-client-jackson.txt | 0 ...license-io.quarkus-quarkus-rest-client.txt | 0 ...nse-io.quarkus-quarkus-resteasy-common.txt | 0 ...se-io.quarkus-quarkus-resteasy-jackson.txt | 0 ...cense-io.quarkus-quarkus-resteasy-jaxb.txt | 0 ...-io.quarkus-quarkus-resteasy-multipart.txt | 0 ...quarkus-quarkus-resteasy-mutiny-common.txt | 0 ...nse-io.quarkus-quarkus-resteasy-mutiny.txt | 0 ...quarkus-quarkus-resteasy-server-common.txt | 0 .../license-io.quarkus-quarkus-resteasy.txt | 0 .../license-io.quarkus-quarkus-scheduler.txt | 0 ...o.quarkus-quarkus-security-runtime-spi.txt | 0 .../license-io.quarkus-quarkus-security.txt | 0 ...s-quarkus-smallrye-context-propagation.txt | 0 ...-io.quarkus-quarkus-smallrye-jwt-build.txt | 0 ...icense-io.quarkus-quarkus-smallrye-jwt.txt | 0 ...se-io.quarkus-quarkus-smallrye-openapi.txt | 0 .../license-io.quarkus-quarkus-swagger-ui.txt | 0 ...kus-vertx-http-dev-console-runtime-spi.txt | 0 .../license-io.quarkus-quarkus-vertx-http.txt | 0 licenses/license-io.quarkus-quarkus-vertx.txt | 0 licenses/license-io.quarkus.arc-arc.txt | 0 ...e-io.quarkus.security-quarkus-security.txt | 1 + licenses/license-io.sentry-sentry-jul.txt | 1 + licenses/license-io.sentry-sentry.txt | 1 + ...llrye-smallrye-context-propagation-api.txt | 0 ...llrye-smallrye-context-propagation-jta.txt | 0 ...e-smallrye-context-propagation-storage.txt | 0 ....smallrye-smallrye-context-propagation.txt | 0 ...mallrye-smallrye-fault-tolerance-vertx.txt | 15 + ...license-io.smallrye-smallrye-jwt-build.txt | 15 + ...icense-io.smallrye-smallrye-jwt-common.txt | 15 + licenses/license-io.smallrye-smallrye-jwt.txt | 15 + ...nse-io.smallrye-smallrye-open-api-core.txt | 0 ...lrye.common-smallrye-common-annotation.txt | 0 ...rye.common-smallrye-common-classloader.txt | 0 ...lrye.common-smallrye-common-constraint.txt | 0 ...lrye.common-smallrye-common-expression.txt | 0 ...allrye.common-smallrye-common-function.txt | 0 ...-io.smallrye.common-smallrye-common-io.txt | 0 ...smallrye.config-smallrye-config-common.txt | 0 ...o.smallrye.config-smallrye-config-core.txt | 15 + ...rye.config-smallrye-config-source-yaml.txt | 0 ...llrye.config-smallrye-config-validator.txt | 15 + ...nse-io.smallrye.config-smallrye-config.txt | 15 + ...ve-mutiny-smallrye-context-propagation.txt | 0 .../license-io.smallrye.reactive-mutiny.txt | 0 ...tive-smallrye-mutiny-vertx-auth-common.txt | 0 ...ve-smallrye-mutiny-vertx-bridge-common.txt | 0 ...ye.reactive-smallrye-mutiny-vertx-core.txt | 0 ...ive-smallrye-mutiny-vertx-redis-client.txt | 0 ...reactive-smallrye-mutiny-vertx-runtime.txt | 0 ...ctive-smallrye-mutiny-vertx-web-common.txt | 0 ...rye.reactive-smallrye-mutiny-vertx-web.txt | 0 ...active-smallrye-reactive-converter-api.txt | 0 ...ive-smallrye-reactive-converter-mutiny.txt | 0 ...allrye.reactive-vertx-mutiny-generator.txt | 0 .../license-io.vertx-vertx-auth-common.txt | 0 .../license-io.vertx-vertx-bridge-common.txt | 0 licenses/license-io.vertx-vertx-codegen.txt | 0 licenses/license-io.vertx-vertx-core.txt | 2 + .../license-io.vertx-vertx-redis-client.txt | 0 .../license-io.vertx-vertx-web-common.txt | 0 licenses/license-io.vertx-vertx-web.txt | 2 + ...arta.annotation-jakarta.annotation-api.txt | 637 ++++++++++++ .../license-jakarta.el-jakarta.el-api.txt | 637 ++++++++++++ ....enterprise-jakarta.enterprise.cdi-api.txt | 1 + ...ense-jakarta.inject-jakarta.inject-api.txt | 1 + ...ta.interceptor-jakarta.interceptor-api.txt | 637 ++++++++++++ ...ta.persistence-jakarta.persistence-api.txt | 1 + ...ta.transaction-jakarta.transaction-api.txt | 1 + ...arta.validation-jakarta.validation-api.txt | 1 + ...icense-javax.servlet-javax.servlet-api.txt | 263 +++++ licenses/license-net.bytebuddy-byte-buddy.txt | 0 ...cense-org.apache.commons-commons-lang3.txt | 202 ++++ ....apache.httpcomponents-httpasyncclient.txt | 202 ++++ ...e-org.apache.httpcomponents-httpclient.txt | 202 ++++ ...org.apache.httpcomponents-httpcore-nio.txt | 202 ++++ ...nse-org.apache.httpcomponents-httpcore.txt | 202 ++++ ...se-org.apache.james-apache-mime4j-core.txt | 202 ++++ ...nse-org.apache.james-apache-mime4j-dom.txt | 202 ++++ ...org.apache.james-apache-mime4j-storage.txt | 202 ++++ licenses/license-org.bitbucket.b-c-jose4j.txt | 1 + ...ense-org.checkerframework-checker-qual.txt | 1 + ...profile.config-microprofile-config-api.txt | 201 ++++ ...n-microprofile-context-propagation-api.txt | 201 ++++ ...oprofile.jwt-microprofile-jwt-auth-api.txt | 13 + ...ofile.openapi-microprofile-openapi-api.txt | 13 + ...st.client-microprofile-rest-client-api.txt | 201 ++++ licenses/license-org.flywaydb-flyway-core.txt | 16 + licenses/license-org.glassfish-jakarta.el.txt | 637 ++++++++++++ .../license-org.glassfish-jakarta.json.txt | 637 ++++++++++++ ...icense-org.glassfish.jaxb-jaxb-runtime.txt | 28 + licenses/license-org.glassfish.jaxb-txw2.txt | 28 + .../license-org.graalvm.sdk-graal-sdk.txt | 1 + .../license-org.hibernate-hibernate-core.txt | 1 + ...icense-org.hibernate-hibernate-graalvm.txt | 1 + ...ense-org.hibernate-quarkus-local-cache.txt | 1 + ...e.common-hibernate-commons-annotations.txt | 1 + ...ibernate.validator-hibernate-validator.txt | 1 + licenses/license-org.jboss-jandex.txt | 1 + ...icense-org.jboss-jboss-transaction-spi.txt | 0 ....logging-commons-logging-jboss-logging.txt | 1 + ...boss.logging-jboss-logging-annotations.txt | 202 ++++ ...icense-org.jboss.logging-jboss-logging.txt | 202 ++++ ...s.logmanager-jboss-logmanager-embedded.txt | 1 + ...se-org.jboss.narayana.jta-narayana-jta.txt | 0 ....narayana.jts-narayana-jts-integration.txt | 0 ...icense-org.jboss.resteasy-resteasy-cdi.txt | 0 ...org.jboss.resteasy-resteasy-client-api.txt | 0 ...easy-resteasy-client-microprofile-base.txt | 0 ....resteasy-resteasy-client-microprofile.txt | 0 ...nse-org.jboss.resteasy-resteasy-client.txt | 0 ...e-org.jboss.resteasy-resteasy-core-spi.txt | 0 ...cense-org.jboss.resteasy-resteasy-core.txt | 0 ...ss.resteasy-resteasy-jackson2-provider.txt | 0 ....jboss.resteasy-resteasy-jaxb-provider.txt | 0 ...s.resteasy-resteasy-multipart-provider.txt | 0 ...org.jboss.slf4j-slf4j-jboss-logmanager.txt | 1 + ....resource-jboss-connector-api-1.7-spec.txt | 347 +++++++ ...c.javax.ws.rs-jboss-jaxrs-api-2.1-spec.txt | 637 ++++++++++++ ...javax.xml.bind-jboss-jaxb-api-2.3-spec.txt | 29 + ...icense-org.jboss.threads-jboss-threads.txt | 177 ++++ licenses/license-org.lionsoul-ip2region.txt | 1 + .../license-org.postgresql-postgresql.txt | 33 + .../license-org.quartz-scheduler-quartz.txt | 1 + ...e-org.reactivestreams-reactive-streams.txt | 1 + licenses/license-org.slf4j-slf4j-api.txt | 0 ...ense-org.wildfly.common-wildfly-common.txt | 1 + licenses/license-org.yaml-snakeyaml.txt | 1 + mvnw | 308 ++++++ mvnw.cmd | 219 ++++ pom.xml | 262 +++++ .../space/ao/services/GreetingResource.java | 92 ++ .../space/ao/services/StatusResource.java | 47 + .../dto/AuthorizedTerminalInfo.java | 35 + .../entity/AuthorizedTerminalEntity.java | 84 ++ .../entity/AuthorizedTerminalResult.java | 28 + .../entity/TerminalType.java | 21 + .../AuthorizedTerminalRepository.java | 155 +++ .../rest/AuthorizedTerminalResource.java | 207 ++++ .../service/AuthorizedTerminalService.java | 194 ++++ .../rest/BackupAndRestoreResource.java | 58 ++ .../deviceinfo/dto/AdminRevokeInfo.java | 33 + .../deviceinfo/dto/AdminRevokeResult.java | 29 + .../deviceinfo/dto/DeviceInfoResult.java | 41 + .../deviceinfo/dto/DeviceStorageInfo.java | 35 + .../deviceinfo/dto/HardwareInfoRsp.java | 26 + .../dto/MemberUsedStorageResult.java | 35 + .../deviceinfo/dto/NetworkChannelInfo.java | 61 ++ .../account/deviceinfo/dto/SettingInfo.java | 76 ++ .../deviceinfo/dto/UserStorageInfo.java | 54 + .../deviceinfo/dto/WanChannelSettingInfo.java | 35 + .../deviceinfo/rest/DeviceInfoResource.java | 147 +++ .../deviceinfo/service/DeviceInfoService.java | 119 +++ .../service/DeviceStorageService.java | 35 + .../service/FileOperatorService.java | 53 + .../account/member/AdminCallOnly.java | 44 + .../member/AdminCallOnlyInterceptor.java | 49 + .../account/member/dto/AdminBindInfo.java | 52 + .../account/member/dto/AdminBindResult.java | 32 + .../account/member/dto/AdminPasswdInfo.java | 31 + .../member/dto/ClientPairStatusEnum.java | 43 + .../ao/services/account/member/dto/Const.java | 30 + .../account/member/dto/DevOptionsSwitch.java | 36 + .../account/member/dto/MemberCreateInfo.java | 45 + .../member/dto/MemberCreateResult.java | 41 + .../member/dto/MemberDeleteResult.java | 32 + .../member/dto/MemberNameUpdateInfo.java | 35 + .../account/member/dto/PasswdTryInfo.java | 41 + .../account/member/dto/PlatformInfo.java | 39 + .../member/dto/SpaceBootstrapTypeEnum.java | 52 + .../dto/migration/BoxMigrationInfo.java | 34 + .../dto/migration/ClientMigrationInfo.java | 33 + .../dto/migration/UserMigrationInfo.java | 38 + .../account/member/entity/BoxInfoEntity.java | 55 + .../member/respository/BoxInfoRepository.java | 94 ++ .../member/rest/AdminUserResource.java | 274 +++++ .../member/rest/MemberManageResource.java | 131 +++ .../member/rest/MigrationResource.java | 60 ++ .../account/member/rest/SpaceResource.java | 85 ++ .../member/service/AdminUserService.java | 160 +++ .../member/service/DevOptionsService.java | 53 + .../member/service/MemberManageService.java | 396 ++++++++ .../member/service/MigrationService.java | 86 ++ .../service/PlatformRegistryService.java | 208 ++++ .../personalinfo/dto/AccountInfoResult.java | 67 ++ .../personalinfo/dto/MultiPersonalInfo.java | 42 + .../personalinfo/dto/PersonalCallResult.java | 30 + .../personalinfo/dto/PersonalInfo.java | 55 + .../personalinfo/dto/PersonalInfoResult.java | 34 + .../dto/SubdomainUpdateResult.java | 40 + .../personalinfo/entity/UserEntity.java | 109 ++ .../repository/UserInfoRepository.java | 151 +++ .../rest/PersonalInfoResource.java | 333 ++++++ .../service/PersonalInfoService.java | 79 ++ .../security/dto/ApplyInfoNewDeviceReq.java | 37 + .../account/security/dto/ApplyInfoReq.java | 32 + .../dto/ApplyPushNotificationRsp.java | 51 + .../security/dto/SecurityEmailCheckReq.java | 48 + .../security/dto/SecurityEmailModifyReq.java | 50 + .../SecurityEmailSetOrModifyInLocalReq.java | 51 + .../security/dto/SecurityEmailSetReq.java | 50 + .../security/dto/SecurityEmailSettingRsp.java | 40 + .../security/dto/SecurityMessagePollReq.java | 29 + .../security/dto/SecurityMessageRsp.java | 63 ++ .../security/dto/SecurityMessageStore.java | 38 + .../security/dto/SecurityPasswdCheckReq.java | 29 + .../dto/SecurityPasswdModifyAutherReq.java | 45 + .../SecurityPasswdModifyBinderAcceptReq.java | 40 + .../dto/SecurityPasswdModifyByBinderReq.java | 34 + .../SecurityPasswdResetAutherInLocalReq.java | 45 + .../dto/SecurityPasswdResetAutherReq.java | 46 + .../SecurityPasswdResetBinderAcceptReq.java | 39 + ...SecurityPasswdResetByBinderInLocalReq.java | 35 + .../dto/SecurityPasswdResetByBinderReq.java | 35 + .../dto/SecurityPasswdResetNewDeviceReq.java | 51 + .../security/dto/SecurityTokenRes.java | 42 + .../dto/SuccPushNotitificationRsp.java | 33 + .../security/rest/SecurityMessagePoll.java | 86 ++ .../rest/SecurityPasswordResource.java | 360 +++++++ .../service/SecurityMessageService.java | 116 +++ .../SecurityPasswordAuthorService.java | 236 +++++ .../SecurityPasswordBinderService.java | 113 ++ .../SecurityPasswordCommonService.java | 166 +++ .../service/SecurityPasswordModifyJob.java | 66 ++ .../SecurityPasswordNewDeviceService.java | 73 ++ .../account/security/utils/PushUtils.java | 167 +++ .../security/utils/SecurityPasswordUtils.java | 102 ++ .../account/security/utils/SignUtil.java | 51 + .../account/security/utils/UserRoleUtil.java | 63 ++ .../security/utils/token/SecurityToken.java | 34 + .../utils/token/SecurityTokenType.java | 34 + .../utils/token/SecurityTokenUtils.java | 163 +++ .../support/response/ResponseBaseEnum.java | 55 + .../support/service/AdminInfoFileDTO.java | 56 + .../support/service/MemberBasicAttribute.java | 40 + .../support/service/ServiceDefaultVar.java | 49 + .../account/support/service/ServiceError.java | 124 +++ .../service/ServiceOperationException.java | 72 ++ .../applet/dto/AppletPermissionResponse.java | 27 + .../entity/AppletDefaultPermissionEnum.java | 49 + .../applet/entity/AppletPermissionEntity.java | 48 + .../AppletPermissionRepository.java | 47 + .../ao/services/auth/entity/TotpEntity.java | 67 ++ .../ao/services/auth/info/TotpSecretInfo.java | 54 + .../auth/repository/TotpRepository.java | 55 + .../services/auth/rest/AuthTokenResource.java | 81 ++ .../services/auth/rest/AuthTotpResource.java | 130 +++ .../ao/services/auth/service/TotpService.java | 231 +++++ .../config/ApplicationProperties.java | 275 +++++ .../ao/services/gateway/CallRequest.java | 22 + .../space/ao/services/gateway/FileResult.java | 29 + .../services/gateway/GatewayBeansFactory.java | 84 ++ .../ao/services/gateway/GatewayMessage.java | 105 ++ .../gateway/GatewayMessageService.java | 79 ++ .../ao/services/gateway/GatewayResource.java | 266 +++++ .../ao/services/gateway/GatewayService.java | 432 ++++++++ .../ao/services/gateway/MultipartRequest.java | 35 + .../ao/services/gateway/RealCallRequest.java | 79 ++ .../ao/services/gateway/RealCallResult.java | 41 + .../space/ao/services/gateway/Routers.java | 75 ++ .../ao/services/gateway/UploadEntity.java | 40 + .../gateway/auth/AuthTokenResource.java | 226 ++++ .../gateway/auth/CreateTokenInfo.java | 43 + .../gateway/auth/CreateTokenResult.java | 76 ++ .../gateway/auth/RefreshTokenInfo.java | 38 + .../gateway/auth/RevokeClientInfo.java | 48 + .../gateway/auth/RevokeClientResult.java | 43 + .../gateway/auth/VerifyTokenResult.java | 31 + .../member/client/ResponseCodeConstant.java | 29 + .../AuthorizedTerminalLoginConfirmInfo.java | 41 + .../dto/AuthorizedTerminalLoginInfo.java | 36 + .../gateway/auth/qrcode/dto/BoxLanInfo.java | 40 + .../auth/qrcode/dto/CreateAuthCodeDTO.java | 85 ++ .../auth/qrcode/dto/CreateAuthCodeInfo.java | 51 + .../auth/qrcode/dto/CreateAuthCodeResult.java | 23 + .../auth/qrcode/dto/CreateBkeyInfo.java | 31 + .../auth/qrcode/dto/EncryptAuthDTO.java | 51 + .../auth/qrcode/dto/EncryptAuthInfo.java | 82 ++ .../auth/qrcode/dto/EncryptAuthResult.java | 23 + .../qrcode/dto/EncryptedAuthUserInfo.java | 29 + .../auth/qrcode/dto/TerminalClient.java | 27 + .../gateway/auth/qrcode/dto/TotpAuthCode.java | 34 + .../gateway/auth/qrcode/dto/TotpAuthInfo.java | 27 + .../gateway/auth/qrcode/dto/v2/BkeyInfo.java | 32 + .../auth/qrcode/dto/v2/CreateAuthCodeDTO.java | 35 + .../qrcode/dto/v2/CreateAuthCodeResult.java | 30 + .../dto/v2/EncryptedAuthUserResult.java | 27 + .../auth/qrcode/rest/BoxKeyResource.java | 265 +++++ .../auth/qrcode/rest/TotpGatewayResource.java | 257 +++++ .../auth/qrcode/service/BoxKeyService.java | 344 +++++++ .../auth/qrcode/service/CacheService.java | 68 ++ .../ao/services/gateway/package-info.java | 17 + .../gateway/version/CompatibleCheckRes.java | 37 + .../gateway/version/PackageCheckRes.java | 43 + .../services/gateway/version/PackageRes.java | 66 ++ .../gateway/version/VersionResource.java | 131 +++ .../version/dto/PkgVersionTypeEnum.java | 49 + .../ao/services/push/dto/AfterOpenAction.java | 36 + .../services/push/dto/ChannelProperties.java | 32 + .../ao/services/push/dto/DisplayTypeEnum.java | 34 + .../ao/services/push/dto/GoActivityEnum.java | 32 + .../ao/services/push/dto/MemberJoinInfo.java | 25 + .../space/ao/services/push/dto/Message.java | 23 + .../ao/services/push/dto/MessageIdInfo.java | 25 + .../ao/services/push/dto/MessageTypeEnum.java | 34 + .../services/push/dto/NotificationEnum.java | 188 ++++ .../push/dto/NotificationPageInfo.java | 28 + .../push/dto/NotificationPageQueryInfo.java | 42 + .../services/push/dto/PushMessageExtra.java | 32 + .../push/dto/PushNotificationResult.java | 55 + .../services/push/dto/RedisArgsConstant.java | 29 + .../ao/services/push/dto/TerminalInfo.java | 25 + .../services/push/dto/file/FilePopData.java | 36 + .../push/entity/NotificationEntity.java | 83 ++ .../ao/services/push/entity/RedisKey.java | 27 + .../repository/NotificationRepository.java | 71 ++ .../push/rest/NotificationResource.java | 139 +++ .../push/rest/PollNotificationResource.java | 98 ++ .../push/services/NotificationService.java | 174 ++++ .../services/push/services/RedisService.java | 241 +++++ .../space/ao/services/support/ClassUtils.java | 77 ++ .../space/ao/services/support/FileUtils.java | 186 ++++ .../support/MyObjectMapperCustomizer.java | 37 + .../ao/services/support/OperationUtils.java | 447 ++++++++ .../ao/services/support/ResourceUtils.java | 402 ++++++++ .../services/support/RestConfiguration.java | 285 ++++++ .../ao/services/support/StringUtils.java | 96 ++ .../space/ao/services/support/TokenUtils.java | 396 ++++++++ .../services/support/agent/AgentService.java | 66 ++ .../support/agent/AgentServiceRestClient.java | 64 ++ .../support/agent/info/DeviceInfo.java | 74 ++ .../services/support/agent/info/DidDoc.java | 40 + .../support/agent/info/DidDocResult.java | 36 + .../support/agent/info/IpAddressInfo.java | 47 + .../support/file/FileServiceRestClient.java | 82 ++ .../services/support/file/info/FileInfos.java | 26 + .../support/file/info/FileResult.java | 48 + .../support/file/info/LinkNameResult.java | 33 + .../services/support/file/info/UUIDInfo.java | 24 + .../ao/services/support/jwt/JwtUtils.java | 88 ++ .../ao/services/support/limit/LimitReq.java | 63 ++ .../support/limit/LimitReqInterceptor.java | 146 +++ .../limit/LimitReqInterceptorUtils.java | 32 + .../support/log/LogFileManagerUtils.java | 85 ++ .../space/ao/services/support/log/Logged.java | 54 + .../support/log/LoggingInterceptor.java | 94 ++ .../services/support/model/AccessToken.java | 48 + .../support/model/AlgorithmConfig.java | 48 + .../support/model/OfficialPlatform.java | 80 ++ .../ao/services/support/model/PageInfo.java | 29 + .../support/model/PageListResult.java | 31 + .../ao/services/support/model/PublicKey.java | 28 + .../services/support/model/RefreshToken.java | 36 + .../services/support/model/StatusResult.java | 39 + .../support/model/Transportation.java | 30 + ...formOpstageBoxRegKeyServiceRestClient.java | 42 + .../PlatformOpstageServiceRestClient.java | 96 ++ .../PlatformRegistryServiceRestClient.java | 106 ++ .../platform/PlatformStatusResult.java | 23 + .../support/platform/PlatformUtils.java | 208 ++++ .../platform/check/CheckApiStatus.java | 55 + .../check/CheckApiStatusInterceptor.java | 95 ++ .../platform/check/CheckPlatformStatus.java | 60 ++ .../check/CheckPlatformStatusInterceptor.java | 118 +++ .../platform/check/PlatformTypeEnum.java | 41 + .../support/platform/info/ServiceEnum.java | 36 + .../support/platform/info/TrailUserRes.java | 70 ++ .../info/ability/PlatformApiResults.java | 33 + .../info/ability/PlatformApiTypeEnum.java | 40 + .../platform/info/ability/PlatformApis.java | 51 + .../platform/info/invites/ActivityReq.java | 80 ++ .../info/invites/ActivityTypeEnum.java | 59 ++ .../info/invites/TrailInviteAcceptRes.java | 47 + .../platform/info/invites/TrailInviteReq.java | 54 + .../platform/info/invites/TrailInviteRes.java | 75 ++ .../platform/info/push/ChannelProperties.java | 32 + .../platform/info/push/DisplayTypeEnum.java | 34 + .../platform/info/push/MessagePayload.java | 37 + .../info/push/MessagePayloadBody.java | 56 + .../platform/info/push/MessagePolicy.java | 31 + .../platform/info/push/MessageTypeEnum.java | 34 + .../platform/info/push/PushMessage.java | 57 ++ .../info/push/UserIdAndClientUUID.java | 34 + .../info/registry/ClientRegistryInfo.java | 31 + .../info/registry/ClientRegistryResult.java | 24 + .../info/registry/RegistryTypeEnum.java | 40 + .../info/registry/SubdomainGenInfo.java | 27 + .../info/registry/SubdomainGenResult.java | 28 + .../info/registry/SubdomainUpdateInfo.java | 29 + .../info/registry/SubdomainUpdateResult.java | 32 + .../info/registry/UserRegistryInfo.java | 32 + .../info/registry/UserRegistryResult.java | 29 + .../info/token/TokenCreateResults.java | 27 + .../platform/info/token/TokenInfo.java | 30 + .../platform/info/token/TokenResult.java | 28 + .../info/token/TokenVerifySignInfo.java | 25 + .../platform/temp/RequestTypeEnum.java | 56 + .../platform/temp/TempInfoHandleService.java | 114 +++ .../platform/temp/TempRegistryInfoEntity.java | 65 ++ .../temp/TempRegistryInfoRepository.java | 44 + .../redis/RedisCommonStringService.java | 79 ++ .../support/redis/RedisTokenService.java | 77 ++ .../redis/SecurityMessageRedisService.java | 70 ++ .../support/redis/message/ReceiveMessage.java | 36 + .../redis/message/RedisArgsConstant.java | 52 + .../redis/message/RedisMessageService.java | 111 ++ .../support/redis/message/SendMessage.java | 36 + .../support/response/ResponseBase.java | 194 ++++ .../support/response/ResponseBaseEnum.java | 46 + .../security/SecurityProviderFactory.java | 69 ++ .../support/security/SecurityTotpUtils.java | 60 ++ .../support/security/SecurityUtils.java | 175 ++++ .../impl/SecurityProviderByLocalImpl.java | 163 +++ .../security/inf/SecurityProvider.java | 31 + .../support/service/ServiceError.java | 113 ++ .../service/ServiceOperationException.java | 72 ++ .../support/task/ScheduledService.java | 80 ++ .../services/support/task/TaskBaseEntity.java | 84 ++ .../support/validator/ValueOfEnum.java | 66 ++ .../validator/ValueOfEnumValidator.java | 70 ++ .../space/ao/services/vod/VodResource.java | 74 ++ .../space/ao/services/vod/VodService.java | 127 +++ .../ao/services/vod/VodServiceRestClient.java | 33 + .../resources/_assets/xinshouzhinan.png | Bin 0 -> 1240996 bytes .../META-INF/resources/box/publicKey.pem | 9 + .../META-INF/resources/client/privateKey.pem | 28 + src/main/resources/application.yml | 336 ++++++ src/main/resources/box/privateKey.pem | 28 + src/main/resources/client/publicKey.pem | 9 + .../db/migration/V1.0.0__Initial_Setup.sql | 114 +++ src/main/resources/gateway/emails_conf.json | 112 ++ .../resources/gateway/internet_service.json | 3 + src/main/resources/gateway/ip2region.db | Bin 0 -> 8733094 bytes src/main/resources/gateway/metadata.json | 14 + src/main/resources/gateway/routes.json | 961 ++++++++++++++++++ src/main/resources/gateway/shared_info.json | 4 + src/main/resources/image/avatar@3x.png | Bin 0 -> 16094 bytes src/main/resources/image/s.png | Bin 0 -> 7100 bytes src/main/resources/smime/apple.pem | 58 ++ src/main/resources/smime/root.p12 | Bin 0 -> 2389 bytes .../ao/services/GreetingResourceTest.java | 59 ++ .../account/mock/MockFileOperatorService.java | 46 + .../account/mock/MockSystemAgentService.java | 35 + .../account/rest/AdminUserResourceTest.java | 86 ++ .../AuthorizedTerminalInfoResourceTest.java | 279 +++++ .../rest/BackupAndRestoreResourceTest.java | 66 ++ .../account/rest/MigrationResourceTest.java | 83 ++ .../rest/PersonalInfoResourceTest.java | 199 ++++ .../SecurityPasswordResourceTest.java | 58 ++ .../account/security/SecurityTokenTest.java | 108 ++ .../services/auth/AuthTokenResourceTest.java | 64 ++ .../auth/QrAuthTokenResourceTest.java | 234 +++++ .../config/ApplicationPropertiesTest.java | 64 ++ .../services/gateway/GatewayResourceTest.java | 281 +++++ .../services/gateway/VersionResourceTest.java | 68 ++ .../gateway/auth/AuthTokenResourceTest.java | 206 ++++ .../auth/qrcode/BoxKeyResourceTest.java | 608 +++++++++++ .../MockSystemAgentServiceRestClient.java | 57 ++ .../file/MockFileServiceRestClient.java | 69 ++ ...formOpstageBoxRegKeyServiceRestClient.java | 54 + .../MockPlatformOpstageServiceRestClient.java | 93 ++ ...MockPlatformRegistryServiceRestClient.java | 128 +++ ...PlatformRegistryServiceRestClientTest.java | 41 + .../redis/RedisMessageServiceTest.java | 53 + .../support/redis/RedisTokenServiceTest.java | 151 +++ .../security/SecurityTotpUtilsTest.java | 56 + .../ao/services/support/test/TestUtils.java | 258 +++++ .../vod/MockVodServiceRestClient.java | 51 + .../ao/services/vod/VodResourceTest.java | 83 ++ .../space/ao/services/vod/VodServiceTest.java | 50 + src/test/resources/api/servicesapi.json | 470 +++++++++ src/test/resources/client/privateKey.pem | 28 + .../migration/V9.9.9__Initial_Test_Data.sql | 15 + src/test/resources/gateway/1b/2a/1b2a3d.mp4 | Bin 0 -> 9840497 bytes src/test/resources/gateway/hello.mp3 | Bin 0 -> 3415189 bytes src/test/resources/gateway/index-h265.m3u8 | 13 + src/test/resources/gateway/index.m3u8 | 10 + src/test/resources/gateway/routes.json | 102 ++ .../resources/platform/api/servicesapi.json | 470 +++++++++ 584 files changed, 40395 insertions(+) create mode 100644 .github/workflows/build-push-image.yaml create mode 100644 .github/workflows/build-test.yaml create mode 100644 .gitignore create mode 100644 .license.tpl create mode 100644 .licenserc.yaml create mode 100644 .mvn/wrapper/.gitignore create mode 100644 .mvn/wrapper/MavenWrapperDownloader.java create mode 100644 .mvn/wrapper/maven-wrapper.properties create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 Dockerfile.jvm create mode 100644 LICENSE create mode 100644 NOTICE create mode 100644 README.md create mode 100644 README_cn.md create mode 100644 VERSION create mode 100644 licenses/license-antlr-antlr.txt create mode 100644 licenses/license-com.belerweb-pinyin4j.txt create mode 100644 licenses/license-com.beust-jcommander.txt create mode 100644 licenses/license-com.cronutils-cron-utils.txt create mode 100644 licenses/license-com.fasterxml-classmate.txt create mode 100644 licenses/license-com.fasterxml.jackson.core-jackson-annotations.txt create mode 100644 licenses/license-com.fasterxml.jackson.core-jackson-core.txt create mode 100644 licenses/license-com.fasterxml.jackson.core-jackson-databind.txt create mode 100644 licenses/license-com.fasterxml.jackson.dataformat-jackson-dataformat-yaml.txt create mode 100644 licenses/license-com.fasterxml.jackson.datatype-jackson-datatype-jdk8.txt create mode 100644 licenses/license-com.fasterxml.jackson.datatype-jackson-datatype-jsr310.txt create mode 100644 licenses/license-com.fasterxml.jackson.jaxrs-jackson-jaxrs-base.txt create mode 100644 licenses/license-com.fasterxml.jackson.jaxrs-jackson-jaxrs-json-provider.txt create mode 100644 licenses/license-com.fasterxml.jackson.module-jackson-module-jaxb-annotations.txt create mode 100644 licenses/license-com.fasterxml.jackson.module-jackson-module-parameter-names.txt create mode 100644 licenses/license-com.github.ben-manes.caffeine-caffeine.txt create mode 100644 licenses/license-com.github.jai-imageio-jai-imageio-core.txt create mode 100644 licenses/license-com.github.java-json-tools-btf.txt create mode 100644 licenses/license-com.github.java-json-tools-jackson-coreutils.txt create mode 100644 licenses/license-com.github.java-json-tools-json-patch.txt create mode 100644 licenses/license-com.github.java-json-tools-msg-simple.txt create mode 100644 licenses/license-com.google.code.findbugs-jsr305.txt create mode 100644 licenses/license-com.google.code.gson-gson.txt create mode 100644 licenses/license-com.google.errorprone-error-prone-annotations.txt create mode 100644 licenses/license-com.google.guava-failureaccess.txt create mode 100644 licenses/license-com.google.guava-guava.txt create mode 100644 licenses/license-com.google.guava-listenablefuture.txt create mode 100644 licenses/license-com.google.j2objc-j2objc-annotations.txt create mode 100644 licenses/license-com.google.zxing-core.txt create mode 100644 licenses/license-com.google.zxing-javase.txt create mode 100644 licenses/license-com.ibm.async-asyncutil.txt create mode 100644 licenses/license-com.mchange-mchange-commons-java.txt create mode 100644 licenses/license-com.squareup.okhttp3-okhttp.txt create mode 100644 licenses/license-com.squareup.okio-okio.txt create mode 100644 licenses/license-com.sun.activation-jakarta.activation.txt create mode 100644 licenses/license-com.sun.istack-istack-commons-runtime.txt create mode 100644 licenses/license-com.sun.mail-jakarta.mail.txt create mode 100644 licenses/license-commons-codec-commons-codec.txt create mode 100644 licenses/license-commons-io-commons-io.txt create mode 100644 licenses/license-dev.samstevens.totp-totp.txt create mode 100644 licenses/license-io.agroal-agroal-api.txt create mode 100644 licenses/license-io.agroal-agroal-narayana.txt create mode 100644 licenses/license-io.agroal-agroal-pool.txt create mode 100644 licenses/license-io.netty-netty-buffer.txt create mode 100644 licenses/license-io.netty-netty-codec-dns.txt create mode 100644 licenses/license-io.netty-netty-codec-haproxy.txt create mode 100644 licenses/license-io.netty-netty-codec-http.txt create mode 100644 licenses/license-io.netty-netty-codec-http2.txt create mode 100644 licenses/license-io.netty-netty-codec-socks.txt create mode 100644 licenses/license-io.netty-netty-codec.txt create mode 100644 licenses/license-io.netty-netty-common.txt create mode 100644 licenses/license-io.netty-netty-handler-proxy.txt create mode 100644 licenses/license-io.netty-netty-handler.txt create mode 100644 licenses/license-io.netty-netty-resolver-dns.txt create mode 100644 licenses/license-io.netty-netty-resolver.txt create mode 100644 licenses/license-io.netty-netty-transport.txt create mode 100644 licenses/license-io.quarkus-quarkus-agroal.txt create mode 100644 licenses/license-io.quarkus-quarkus-apache-httpclient.txt create mode 100644 licenses/license-io.quarkus-quarkus-arc.txt create mode 100644 licenses/license-io.quarkus-quarkus-bootstrap-runner.txt create mode 100644 licenses/license-io.quarkus-quarkus-caffeine.txt create mode 100644 licenses/license-io.quarkus-quarkus-config-yaml.txt create mode 100644 licenses/license-io.quarkus-quarkus-core.txt create mode 100644 licenses/license-io.quarkus-quarkus-credentials.txt create mode 100644 licenses/license-io.quarkus-quarkus-datasource-common.txt create mode 100644 licenses/license-io.quarkus-quarkus-datasource.txt create mode 100644 licenses/license-io.quarkus-quarkus-development-mode-spi.txt create mode 100644 licenses/license-io.quarkus-quarkus-flyway.txt create mode 100644 licenses/license-io.quarkus-quarkus-hibernate-orm-panache-common.txt create mode 100644 licenses/license-io.quarkus-quarkus-hibernate-orm-panache.txt create mode 100644 licenses/license-io.quarkus-quarkus-hibernate-orm.txt create mode 100644 licenses/license-io.quarkus-quarkus-hibernate-validator.txt create mode 100644 licenses/license-io.quarkus-quarkus-ide-launcher.txt create mode 100644 licenses/license-io.quarkus-quarkus-jackson.txt create mode 100644 licenses/license-io.quarkus-quarkus-jaxb.txt create mode 100644 licenses/license-io.quarkus-quarkus-jaxp.txt create mode 100644 licenses/license-io.quarkus-quarkus-jdbc-postgresql.txt create mode 100644 licenses/license-io.quarkus-quarkus-jsonp.txt create mode 100644 licenses/license-io.quarkus-quarkus-logging-sentry.txt create mode 100644 licenses/license-io.quarkus-quarkus-mutiny.txt create mode 100644 licenses/license-io.quarkus-quarkus-narayana-jta.txt create mode 100644 licenses/license-io.quarkus-quarkus-netty.txt create mode 100644 licenses/license-io.quarkus-quarkus-panache-common.txt create mode 100644 licenses/license-io.quarkus-quarkus-panache-hibernate-common.txt create mode 100644 licenses/license-io.quarkus-quarkus-quartz.txt create mode 100644 licenses/license-io.quarkus-quarkus-reactive-routes.txt create mode 100644 licenses/license-io.quarkus-quarkus-redis-client.txt create mode 100644 licenses/license-io.quarkus-quarkus-rest-client-jackson.txt create mode 100644 licenses/license-io.quarkus-quarkus-rest-client.txt create mode 100644 licenses/license-io.quarkus-quarkus-resteasy-common.txt create mode 100644 licenses/license-io.quarkus-quarkus-resteasy-jackson.txt create mode 100644 licenses/license-io.quarkus-quarkus-resteasy-jaxb.txt create mode 100644 licenses/license-io.quarkus-quarkus-resteasy-multipart.txt create mode 100644 licenses/license-io.quarkus-quarkus-resteasy-mutiny-common.txt create mode 100644 licenses/license-io.quarkus-quarkus-resteasy-mutiny.txt create mode 100644 licenses/license-io.quarkus-quarkus-resteasy-server-common.txt create mode 100644 licenses/license-io.quarkus-quarkus-resteasy.txt create mode 100644 licenses/license-io.quarkus-quarkus-scheduler.txt create mode 100644 licenses/license-io.quarkus-quarkus-security-runtime-spi.txt create mode 100644 licenses/license-io.quarkus-quarkus-security.txt create mode 100644 licenses/license-io.quarkus-quarkus-smallrye-context-propagation.txt create mode 100644 licenses/license-io.quarkus-quarkus-smallrye-jwt-build.txt create mode 100644 licenses/license-io.quarkus-quarkus-smallrye-jwt.txt create mode 100644 licenses/license-io.quarkus-quarkus-smallrye-openapi.txt create mode 100644 licenses/license-io.quarkus-quarkus-swagger-ui.txt create mode 100644 licenses/license-io.quarkus-quarkus-vertx-http-dev-console-runtime-spi.txt create mode 100644 licenses/license-io.quarkus-quarkus-vertx-http.txt create mode 100644 licenses/license-io.quarkus-quarkus-vertx.txt create mode 100644 licenses/license-io.quarkus.arc-arc.txt create mode 100644 licenses/license-io.quarkus.security-quarkus-security.txt create mode 100644 licenses/license-io.sentry-sentry-jul.txt create mode 100644 licenses/license-io.sentry-sentry.txt create mode 100644 licenses/license-io.smallrye-smallrye-context-propagation-api.txt create mode 100644 licenses/license-io.smallrye-smallrye-context-propagation-jta.txt create mode 100644 licenses/license-io.smallrye-smallrye-context-propagation-storage.txt create mode 100644 licenses/license-io.smallrye-smallrye-context-propagation.txt create mode 100644 licenses/license-io.smallrye-smallrye-fault-tolerance-vertx.txt create mode 100644 licenses/license-io.smallrye-smallrye-jwt-build.txt create mode 100644 licenses/license-io.smallrye-smallrye-jwt-common.txt create mode 100644 licenses/license-io.smallrye-smallrye-jwt.txt create mode 100644 licenses/license-io.smallrye-smallrye-open-api-core.txt create mode 100644 licenses/license-io.smallrye.common-smallrye-common-annotation.txt create mode 100644 licenses/license-io.smallrye.common-smallrye-common-classloader.txt create mode 100644 licenses/license-io.smallrye.common-smallrye-common-constraint.txt create mode 100644 licenses/license-io.smallrye.common-smallrye-common-expression.txt create mode 100644 licenses/license-io.smallrye.common-smallrye-common-function.txt create mode 100644 licenses/license-io.smallrye.common-smallrye-common-io.txt create mode 100644 licenses/license-io.smallrye.config-smallrye-config-common.txt create mode 100644 licenses/license-io.smallrye.config-smallrye-config-core.txt create mode 100644 licenses/license-io.smallrye.config-smallrye-config-source-yaml.txt create mode 100644 licenses/license-io.smallrye.config-smallrye-config-validator.txt create mode 100644 licenses/license-io.smallrye.config-smallrye-config.txt create mode 100644 licenses/license-io.smallrye.reactive-mutiny-smallrye-context-propagation.txt create mode 100644 licenses/license-io.smallrye.reactive-mutiny.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-auth-common.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-bridge-common.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-core.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-redis-client.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-runtime.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-web-common.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-web.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-reactive-converter-api.txt create mode 100644 licenses/license-io.smallrye.reactive-smallrye-reactive-converter-mutiny.txt create mode 100644 licenses/license-io.smallrye.reactive-vertx-mutiny-generator.txt create mode 100644 licenses/license-io.vertx-vertx-auth-common.txt create mode 100644 licenses/license-io.vertx-vertx-bridge-common.txt create mode 100644 licenses/license-io.vertx-vertx-codegen.txt create mode 100644 licenses/license-io.vertx-vertx-core.txt create mode 100644 licenses/license-io.vertx-vertx-redis-client.txt create mode 100644 licenses/license-io.vertx-vertx-web-common.txt create mode 100644 licenses/license-io.vertx-vertx-web.txt create mode 100644 licenses/license-jakarta.annotation-jakarta.annotation-api.txt create mode 100644 licenses/license-jakarta.el-jakarta.el-api.txt create mode 100644 licenses/license-jakarta.enterprise-jakarta.enterprise.cdi-api.txt create mode 100644 licenses/license-jakarta.inject-jakarta.inject-api.txt create mode 100644 licenses/license-jakarta.interceptor-jakarta.interceptor-api.txt create mode 100644 licenses/license-jakarta.persistence-jakarta.persistence-api.txt create mode 100644 licenses/license-jakarta.transaction-jakarta.transaction-api.txt create mode 100644 licenses/license-jakarta.validation-jakarta.validation-api.txt create mode 100644 licenses/license-javax.servlet-javax.servlet-api.txt create mode 100644 licenses/license-net.bytebuddy-byte-buddy.txt create mode 100644 licenses/license-org.apache.commons-commons-lang3.txt create mode 100644 licenses/license-org.apache.httpcomponents-httpasyncclient.txt create mode 100644 licenses/license-org.apache.httpcomponents-httpclient.txt create mode 100644 licenses/license-org.apache.httpcomponents-httpcore-nio.txt create mode 100644 licenses/license-org.apache.httpcomponents-httpcore.txt create mode 100644 licenses/license-org.apache.james-apache-mime4j-core.txt create mode 100644 licenses/license-org.apache.james-apache-mime4j-dom.txt create mode 100644 licenses/license-org.apache.james-apache-mime4j-storage.txt create mode 100644 licenses/license-org.bitbucket.b-c-jose4j.txt create mode 100644 licenses/license-org.checkerframework-checker-qual.txt create mode 100644 licenses/license-org.eclipse.microprofile.config-microprofile-config-api.txt create mode 100644 licenses/license-org.eclipse.microprofile.context-propagation-microprofile-context-propagation-api.txt create mode 100644 licenses/license-org.eclipse.microprofile.jwt-microprofile-jwt-auth-api.txt create mode 100644 licenses/license-org.eclipse.microprofile.openapi-microprofile-openapi-api.txt create mode 100644 licenses/license-org.eclipse.microprofile.rest.client-microprofile-rest-client-api.txt create mode 100644 licenses/license-org.flywaydb-flyway-core.txt create mode 100644 licenses/license-org.glassfish-jakarta.el.txt create mode 100644 licenses/license-org.glassfish-jakarta.json.txt create mode 100644 licenses/license-org.glassfish.jaxb-jaxb-runtime.txt create mode 100644 licenses/license-org.glassfish.jaxb-txw2.txt create mode 100644 licenses/license-org.graalvm.sdk-graal-sdk.txt create mode 100644 licenses/license-org.hibernate-hibernate-core.txt create mode 100644 licenses/license-org.hibernate-hibernate-graalvm.txt create mode 100644 licenses/license-org.hibernate-quarkus-local-cache.txt create mode 100644 licenses/license-org.hibernate.common-hibernate-commons-annotations.txt create mode 100644 licenses/license-org.hibernate.validator-hibernate-validator.txt create mode 100644 licenses/license-org.jboss-jandex.txt create mode 100644 licenses/license-org.jboss-jboss-transaction-spi.txt create mode 100644 licenses/license-org.jboss.logging-commons-logging-jboss-logging.txt create mode 100644 licenses/license-org.jboss.logging-jboss-logging-annotations.txt create mode 100644 licenses/license-org.jboss.logging-jboss-logging.txt create mode 100644 licenses/license-org.jboss.logmanager-jboss-logmanager-embedded.txt create mode 100644 licenses/license-org.jboss.narayana.jta-narayana-jta.txt create mode 100644 licenses/license-org.jboss.narayana.jts-narayana-jts-integration.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-cdi.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-client-api.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-client-microprofile-base.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-client-microprofile.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-client.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-core-spi.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-core.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-jackson2-provider.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-jaxb-provider.txt create mode 100644 licenses/license-org.jboss.resteasy-resteasy-multipart-provider.txt create mode 100644 licenses/license-org.jboss.slf4j-slf4j-jboss-logmanager.txt create mode 100644 licenses/license-org.jboss.spec.javax.resource-jboss-connector-api-1.7-spec.txt create mode 100644 licenses/license-org.jboss.spec.javax.ws.rs-jboss-jaxrs-api-2.1-spec.txt create mode 100644 licenses/license-org.jboss.spec.javax.xml.bind-jboss-jaxb-api-2.3-spec.txt create mode 100644 licenses/license-org.jboss.threads-jboss-threads.txt create mode 100644 licenses/license-org.lionsoul-ip2region.txt create mode 100644 licenses/license-org.postgresql-postgresql.txt create mode 100644 licenses/license-org.quartz-scheduler-quartz.txt create mode 100644 licenses/license-org.reactivestreams-reactive-streams.txt create mode 100644 licenses/license-org.slf4j-slf4j-api.txt create mode 100644 licenses/license-org.wildfly.common-wildfly-common.txt create mode 100644 licenses/license-org.yaml-snakeyaml.txt create mode 100755 mvnw create mode 100644 mvnw.cmd create mode 100644 pom.xml create mode 100644 src/main/java/space/ao/services/GreetingResource.java create mode 100644 src/main/java/space/ao/services/StatusResource.java create mode 100644 src/main/java/space/ao/services/account/authorizedterminalinfo/dto/AuthorizedTerminalInfo.java create mode 100644 src/main/java/space/ao/services/account/authorizedterminalinfo/entity/AuthorizedTerminalEntity.java create mode 100644 src/main/java/space/ao/services/account/authorizedterminalinfo/entity/AuthorizedTerminalResult.java create mode 100644 src/main/java/space/ao/services/account/authorizedterminalinfo/entity/TerminalType.java create mode 100644 src/main/java/space/ao/services/account/authorizedterminalinfo/repository/AuthorizedTerminalRepository.java create mode 100644 src/main/java/space/ao/services/account/authorizedterminalinfo/rest/AuthorizedTerminalResource.java create mode 100644 src/main/java/space/ao/services/account/authorizedterminalinfo/service/AuthorizedTerminalService.java create mode 100644 src/main/java/space/ao/services/account/backupandrestore/rest/BackupAndRestoreResource.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/AdminRevokeInfo.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/AdminRevokeResult.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/DeviceInfoResult.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/DeviceStorageInfo.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/HardwareInfoRsp.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/MemberUsedStorageResult.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/NetworkChannelInfo.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/SettingInfo.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/UserStorageInfo.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/dto/WanChannelSettingInfo.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/service/DeviceStorageService.java create mode 100644 src/main/java/space/ao/services/account/deviceinfo/service/FileOperatorService.java create mode 100644 src/main/java/space/ao/services/account/member/AdminCallOnly.java create mode 100644 src/main/java/space/ao/services/account/member/AdminCallOnlyInterceptor.java create mode 100644 src/main/java/space/ao/services/account/member/dto/AdminBindInfo.java create mode 100644 src/main/java/space/ao/services/account/member/dto/AdminBindResult.java create mode 100644 src/main/java/space/ao/services/account/member/dto/AdminPasswdInfo.java create mode 100644 src/main/java/space/ao/services/account/member/dto/ClientPairStatusEnum.java create mode 100644 src/main/java/space/ao/services/account/member/dto/Const.java create mode 100644 src/main/java/space/ao/services/account/member/dto/DevOptionsSwitch.java create mode 100644 src/main/java/space/ao/services/account/member/dto/MemberCreateInfo.java create mode 100644 src/main/java/space/ao/services/account/member/dto/MemberCreateResult.java create mode 100644 src/main/java/space/ao/services/account/member/dto/MemberDeleteResult.java create mode 100644 src/main/java/space/ao/services/account/member/dto/MemberNameUpdateInfo.java create mode 100644 src/main/java/space/ao/services/account/member/dto/PasswdTryInfo.java create mode 100644 src/main/java/space/ao/services/account/member/dto/PlatformInfo.java create mode 100644 src/main/java/space/ao/services/account/member/dto/SpaceBootstrapTypeEnum.java create mode 100644 src/main/java/space/ao/services/account/member/dto/migration/BoxMigrationInfo.java create mode 100644 src/main/java/space/ao/services/account/member/dto/migration/ClientMigrationInfo.java create mode 100644 src/main/java/space/ao/services/account/member/dto/migration/UserMigrationInfo.java create mode 100644 src/main/java/space/ao/services/account/member/entity/BoxInfoEntity.java create mode 100644 src/main/java/space/ao/services/account/member/respository/BoxInfoRepository.java create mode 100644 src/main/java/space/ao/services/account/member/rest/AdminUserResource.java create mode 100644 src/main/java/space/ao/services/account/member/rest/MemberManageResource.java create mode 100644 src/main/java/space/ao/services/account/member/rest/MigrationResource.java create mode 100644 src/main/java/space/ao/services/account/member/rest/SpaceResource.java create mode 100644 src/main/java/space/ao/services/account/member/service/AdminUserService.java create mode 100644 src/main/java/space/ao/services/account/member/service/DevOptionsService.java create mode 100644 src/main/java/space/ao/services/account/member/service/MemberManageService.java create mode 100644 src/main/java/space/ao/services/account/member/service/MigrationService.java create mode 100644 src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/dto/AccountInfoResult.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/dto/MultiPersonalInfo.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/dto/PersonalCallResult.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/dto/PersonalInfo.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/dto/PersonalInfoResult.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/dto/SubdomainUpdateResult.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/entity/UserEntity.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/repository/UserInfoRepository.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/rest/PersonalInfoResource.java create mode 100644 src/main/java/space/ao/services/account/personalinfo/service/PersonalInfoService.java create mode 100644 src/main/java/space/ao/services/account/security/dto/ApplyInfoNewDeviceReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/ApplyInfoReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/ApplyPushNotificationRsp.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityEmailCheckReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityEmailModifyReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityEmailSetOrModifyInLocalReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityEmailSetReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityEmailSettingRsp.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityMessagePollReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityMessageRsp.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityMessageStore.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdCheckReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyAutherReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyBinderAcceptReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyByBinderReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetAutherInLocalReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetAutherReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetBinderAcceptReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetByBinderInLocalReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetByBinderReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetNewDeviceReq.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SecurityTokenRes.java create mode 100644 src/main/java/space/ao/services/account/security/dto/SuccPushNotitificationRsp.java create mode 100644 src/main/java/space/ao/services/account/security/rest/SecurityMessagePoll.java create mode 100644 src/main/java/space/ao/services/account/security/rest/SecurityPasswordResource.java create mode 100644 src/main/java/space/ao/services/account/security/service/SecurityMessageService.java create mode 100644 src/main/java/space/ao/services/account/security/service/SecurityPasswordAuthorService.java create mode 100644 src/main/java/space/ao/services/account/security/service/SecurityPasswordBinderService.java create mode 100644 src/main/java/space/ao/services/account/security/service/SecurityPasswordCommonService.java create mode 100644 src/main/java/space/ao/services/account/security/service/SecurityPasswordModifyJob.java create mode 100644 src/main/java/space/ao/services/account/security/service/SecurityPasswordNewDeviceService.java create mode 100644 src/main/java/space/ao/services/account/security/utils/PushUtils.java create mode 100644 src/main/java/space/ao/services/account/security/utils/SecurityPasswordUtils.java create mode 100644 src/main/java/space/ao/services/account/security/utils/SignUtil.java create mode 100644 src/main/java/space/ao/services/account/security/utils/UserRoleUtil.java create mode 100644 src/main/java/space/ao/services/account/security/utils/token/SecurityToken.java create mode 100644 src/main/java/space/ao/services/account/security/utils/token/SecurityTokenType.java create mode 100644 src/main/java/space/ao/services/account/security/utils/token/SecurityTokenUtils.java create mode 100644 src/main/java/space/ao/services/account/support/response/ResponseBaseEnum.java create mode 100644 src/main/java/space/ao/services/account/support/service/AdminInfoFileDTO.java create mode 100644 src/main/java/space/ao/services/account/support/service/MemberBasicAttribute.java create mode 100644 src/main/java/space/ao/services/account/support/service/ServiceDefaultVar.java create mode 100644 src/main/java/space/ao/services/account/support/service/ServiceError.java create mode 100644 src/main/java/space/ao/services/account/support/service/ServiceOperationException.java create mode 100644 src/main/java/space/ao/services/applet/dto/AppletPermissionResponse.java create mode 100644 src/main/java/space/ao/services/applet/entity/AppletDefaultPermissionEnum.java create mode 100644 src/main/java/space/ao/services/applet/entity/AppletPermissionEntity.java create mode 100644 src/main/java/space/ao/services/applet/repository/AppletPermissionRepository.java create mode 100644 src/main/java/space/ao/services/auth/entity/TotpEntity.java create mode 100644 src/main/java/space/ao/services/auth/info/TotpSecretInfo.java create mode 100644 src/main/java/space/ao/services/auth/repository/TotpRepository.java create mode 100644 src/main/java/space/ao/services/auth/rest/AuthTokenResource.java create mode 100644 src/main/java/space/ao/services/auth/rest/AuthTotpResource.java create mode 100644 src/main/java/space/ao/services/auth/service/TotpService.java create mode 100644 src/main/java/space/ao/services/config/ApplicationProperties.java create mode 100644 src/main/java/space/ao/services/gateway/CallRequest.java create mode 100644 src/main/java/space/ao/services/gateway/FileResult.java create mode 100644 src/main/java/space/ao/services/gateway/GatewayBeansFactory.java create mode 100644 src/main/java/space/ao/services/gateway/GatewayMessage.java create mode 100644 src/main/java/space/ao/services/gateway/GatewayMessageService.java create mode 100644 src/main/java/space/ao/services/gateway/GatewayResource.java create mode 100644 src/main/java/space/ao/services/gateway/GatewayService.java create mode 100644 src/main/java/space/ao/services/gateway/MultipartRequest.java create mode 100644 src/main/java/space/ao/services/gateway/RealCallRequest.java create mode 100644 src/main/java/space/ao/services/gateway/RealCallResult.java create mode 100644 src/main/java/space/ao/services/gateway/Routers.java create mode 100644 src/main/java/space/ao/services/gateway/UploadEntity.java create mode 100644 src/main/java/space/ao/services/gateway/auth/AuthTokenResource.java create mode 100644 src/main/java/space/ao/services/gateway/auth/CreateTokenInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/CreateTokenResult.java create mode 100644 src/main/java/space/ao/services/gateway/auth/RefreshTokenInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/RevokeClientInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/RevokeClientResult.java create mode 100644 src/main/java/space/ao/services/gateway/auth/VerifyTokenResult.java create mode 100644 src/main/java/space/ao/services/gateway/auth/member/client/ResponseCodeConstant.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/AuthorizedTerminalLoginConfirmInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/AuthorizedTerminalLoginInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/BoxLanInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeDTO.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeResult.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateBkeyInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthDTO.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthResult.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptedAuthUserInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/TerminalClient.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/TotpAuthCode.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/TotpAuthInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/BkeyInfo.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/CreateAuthCodeDTO.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/CreateAuthCodeResult.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/EncryptedAuthUserResult.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/rest/BoxKeyResource.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/rest/TotpGatewayResource.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/service/BoxKeyService.java create mode 100644 src/main/java/space/ao/services/gateway/auth/qrcode/service/CacheService.java create mode 100644 src/main/java/space/ao/services/gateway/package-info.java create mode 100644 src/main/java/space/ao/services/gateway/version/CompatibleCheckRes.java create mode 100644 src/main/java/space/ao/services/gateway/version/PackageCheckRes.java create mode 100644 src/main/java/space/ao/services/gateway/version/PackageRes.java create mode 100644 src/main/java/space/ao/services/gateway/version/VersionResource.java create mode 100644 src/main/java/space/ao/services/gateway/version/dto/PkgVersionTypeEnum.java create mode 100644 src/main/java/space/ao/services/push/dto/AfterOpenAction.java create mode 100644 src/main/java/space/ao/services/push/dto/ChannelProperties.java create mode 100644 src/main/java/space/ao/services/push/dto/DisplayTypeEnum.java create mode 100644 src/main/java/space/ao/services/push/dto/GoActivityEnum.java create mode 100644 src/main/java/space/ao/services/push/dto/MemberJoinInfo.java create mode 100644 src/main/java/space/ao/services/push/dto/Message.java create mode 100644 src/main/java/space/ao/services/push/dto/MessageIdInfo.java create mode 100644 src/main/java/space/ao/services/push/dto/MessageTypeEnum.java create mode 100644 src/main/java/space/ao/services/push/dto/NotificationEnum.java create mode 100644 src/main/java/space/ao/services/push/dto/NotificationPageInfo.java create mode 100644 src/main/java/space/ao/services/push/dto/NotificationPageQueryInfo.java create mode 100644 src/main/java/space/ao/services/push/dto/PushMessageExtra.java create mode 100644 src/main/java/space/ao/services/push/dto/PushNotificationResult.java create mode 100644 src/main/java/space/ao/services/push/dto/RedisArgsConstant.java create mode 100644 src/main/java/space/ao/services/push/dto/TerminalInfo.java create mode 100644 src/main/java/space/ao/services/push/dto/file/FilePopData.java create mode 100644 src/main/java/space/ao/services/push/entity/NotificationEntity.java create mode 100644 src/main/java/space/ao/services/push/entity/RedisKey.java create mode 100644 src/main/java/space/ao/services/push/repository/NotificationRepository.java create mode 100644 src/main/java/space/ao/services/push/rest/NotificationResource.java create mode 100644 src/main/java/space/ao/services/push/rest/PollNotificationResource.java create mode 100644 src/main/java/space/ao/services/push/services/NotificationService.java create mode 100644 src/main/java/space/ao/services/push/services/RedisService.java create mode 100644 src/main/java/space/ao/services/support/ClassUtils.java create mode 100644 src/main/java/space/ao/services/support/FileUtils.java create mode 100644 src/main/java/space/ao/services/support/MyObjectMapperCustomizer.java create mode 100644 src/main/java/space/ao/services/support/OperationUtils.java create mode 100644 src/main/java/space/ao/services/support/ResourceUtils.java create mode 100644 src/main/java/space/ao/services/support/RestConfiguration.java create mode 100644 src/main/java/space/ao/services/support/StringUtils.java create mode 100644 src/main/java/space/ao/services/support/TokenUtils.java create mode 100644 src/main/java/space/ao/services/support/agent/AgentService.java create mode 100644 src/main/java/space/ao/services/support/agent/AgentServiceRestClient.java create mode 100644 src/main/java/space/ao/services/support/agent/info/DeviceInfo.java create mode 100644 src/main/java/space/ao/services/support/agent/info/DidDoc.java create mode 100644 src/main/java/space/ao/services/support/agent/info/DidDocResult.java create mode 100644 src/main/java/space/ao/services/support/agent/info/IpAddressInfo.java create mode 100644 src/main/java/space/ao/services/support/file/FileServiceRestClient.java create mode 100644 src/main/java/space/ao/services/support/file/info/FileInfos.java create mode 100644 src/main/java/space/ao/services/support/file/info/FileResult.java create mode 100644 src/main/java/space/ao/services/support/file/info/LinkNameResult.java create mode 100644 src/main/java/space/ao/services/support/file/info/UUIDInfo.java create mode 100644 src/main/java/space/ao/services/support/jwt/JwtUtils.java create mode 100644 src/main/java/space/ao/services/support/limit/LimitReq.java create mode 100644 src/main/java/space/ao/services/support/limit/LimitReqInterceptor.java create mode 100644 src/main/java/space/ao/services/support/limit/LimitReqInterceptorUtils.java create mode 100644 src/main/java/space/ao/services/support/log/LogFileManagerUtils.java create mode 100644 src/main/java/space/ao/services/support/log/Logged.java create mode 100644 src/main/java/space/ao/services/support/log/LoggingInterceptor.java create mode 100644 src/main/java/space/ao/services/support/model/AccessToken.java create mode 100644 src/main/java/space/ao/services/support/model/AlgorithmConfig.java create mode 100644 src/main/java/space/ao/services/support/model/OfficialPlatform.java create mode 100644 src/main/java/space/ao/services/support/model/PageInfo.java create mode 100644 src/main/java/space/ao/services/support/model/PageListResult.java create mode 100644 src/main/java/space/ao/services/support/model/PublicKey.java create mode 100644 src/main/java/space/ao/services/support/model/RefreshToken.java create mode 100644 src/main/java/space/ao/services/support/model/StatusResult.java create mode 100644 src/main/java/space/ao/services/support/model/Transportation.java create mode 100644 src/main/java/space/ao/services/support/platform/PlatformOpstageBoxRegKeyServiceRestClient.java create mode 100644 src/main/java/space/ao/services/support/platform/PlatformOpstageServiceRestClient.java create mode 100644 src/main/java/space/ao/services/support/platform/PlatformRegistryServiceRestClient.java create mode 100644 src/main/java/space/ao/services/support/platform/PlatformStatusResult.java create mode 100644 src/main/java/space/ao/services/support/platform/PlatformUtils.java create mode 100644 src/main/java/space/ao/services/support/platform/check/CheckApiStatus.java create mode 100644 src/main/java/space/ao/services/support/platform/check/CheckApiStatusInterceptor.java create mode 100644 src/main/java/space/ao/services/support/platform/check/CheckPlatformStatus.java create mode 100644 src/main/java/space/ao/services/support/platform/check/CheckPlatformStatusInterceptor.java create mode 100644 src/main/java/space/ao/services/support/platform/check/PlatformTypeEnum.java create mode 100644 src/main/java/space/ao/services/support/platform/info/ServiceEnum.java create mode 100644 src/main/java/space/ao/services/support/platform/info/TrailUserRes.java create mode 100644 src/main/java/space/ao/services/support/platform/info/ability/PlatformApiResults.java create mode 100644 src/main/java/space/ao/services/support/platform/info/ability/PlatformApiTypeEnum.java create mode 100644 src/main/java/space/ao/services/support/platform/info/ability/PlatformApis.java create mode 100644 src/main/java/space/ao/services/support/platform/info/invites/ActivityReq.java create mode 100644 src/main/java/space/ao/services/support/platform/info/invites/ActivityTypeEnum.java create mode 100644 src/main/java/space/ao/services/support/platform/info/invites/TrailInviteAcceptRes.java create mode 100644 src/main/java/space/ao/services/support/platform/info/invites/TrailInviteReq.java create mode 100644 src/main/java/space/ao/services/support/platform/info/invites/TrailInviteRes.java create mode 100644 src/main/java/space/ao/services/support/platform/info/push/ChannelProperties.java create mode 100644 src/main/java/space/ao/services/support/platform/info/push/DisplayTypeEnum.java create mode 100644 src/main/java/space/ao/services/support/platform/info/push/MessagePayload.java create mode 100644 src/main/java/space/ao/services/support/platform/info/push/MessagePayloadBody.java create mode 100644 src/main/java/space/ao/services/support/platform/info/push/MessagePolicy.java create mode 100644 src/main/java/space/ao/services/support/platform/info/push/MessageTypeEnum.java create mode 100644 src/main/java/space/ao/services/support/platform/info/push/PushMessage.java create mode 100644 src/main/java/space/ao/services/support/platform/info/push/UserIdAndClientUUID.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/ClientRegistryInfo.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/ClientRegistryResult.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/RegistryTypeEnum.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/SubdomainGenInfo.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/SubdomainGenResult.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/SubdomainUpdateInfo.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/SubdomainUpdateResult.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/UserRegistryInfo.java create mode 100644 src/main/java/space/ao/services/support/platform/info/registry/UserRegistryResult.java create mode 100644 src/main/java/space/ao/services/support/platform/info/token/TokenCreateResults.java create mode 100644 src/main/java/space/ao/services/support/platform/info/token/TokenInfo.java create mode 100644 src/main/java/space/ao/services/support/platform/info/token/TokenResult.java create mode 100644 src/main/java/space/ao/services/support/platform/info/token/TokenVerifySignInfo.java create mode 100644 src/main/java/space/ao/services/support/platform/temp/RequestTypeEnum.java create mode 100644 src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java create mode 100644 src/main/java/space/ao/services/support/platform/temp/TempRegistryInfoEntity.java create mode 100644 src/main/java/space/ao/services/support/platform/temp/TempRegistryInfoRepository.java create mode 100644 src/main/java/space/ao/services/support/redis/RedisCommonStringService.java create mode 100644 src/main/java/space/ao/services/support/redis/RedisTokenService.java create mode 100644 src/main/java/space/ao/services/support/redis/SecurityMessageRedisService.java create mode 100644 src/main/java/space/ao/services/support/redis/message/ReceiveMessage.java create mode 100644 src/main/java/space/ao/services/support/redis/message/RedisArgsConstant.java create mode 100644 src/main/java/space/ao/services/support/redis/message/RedisMessageService.java create mode 100644 src/main/java/space/ao/services/support/redis/message/SendMessage.java create mode 100644 src/main/java/space/ao/services/support/response/ResponseBase.java create mode 100644 src/main/java/space/ao/services/support/response/ResponseBaseEnum.java create mode 100644 src/main/java/space/ao/services/support/security/SecurityProviderFactory.java create mode 100644 src/main/java/space/ao/services/support/security/SecurityTotpUtils.java create mode 100644 src/main/java/space/ao/services/support/security/SecurityUtils.java create mode 100644 src/main/java/space/ao/services/support/security/impl/SecurityProviderByLocalImpl.java create mode 100644 src/main/java/space/ao/services/support/security/inf/SecurityProvider.java create mode 100644 src/main/java/space/ao/services/support/service/ServiceError.java create mode 100644 src/main/java/space/ao/services/support/service/ServiceOperationException.java create mode 100644 src/main/java/space/ao/services/support/task/ScheduledService.java create mode 100644 src/main/java/space/ao/services/support/task/TaskBaseEntity.java create mode 100644 src/main/java/space/ao/services/support/validator/ValueOfEnum.java create mode 100644 src/main/java/space/ao/services/support/validator/ValueOfEnumValidator.java create mode 100644 src/main/java/space/ao/services/vod/VodResource.java create mode 100644 src/main/java/space/ao/services/vod/VodService.java create mode 100644 src/main/java/space/ao/services/vod/VodServiceRestClient.java create mode 100644 src/main/resources/META-INF/resources/_assets/xinshouzhinan.png create mode 100644 src/main/resources/META-INF/resources/box/publicKey.pem create mode 100644 src/main/resources/META-INF/resources/client/privateKey.pem create mode 100644 src/main/resources/application.yml create mode 100644 src/main/resources/box/privateKey.pem create mode 100644 src/main/resources/client/publicKey.pem create mode 100644 src/main/resources/db/migration/V1.0.0__Initial_Setup.sql create mode 100644 src/main/resources/gateway/emails_conf.json create mode 100644 src/main/resources/gateway/internet_service.json create mode 100644 src/main/resources/gateway/ip2region.db create mode 100644 src/main/resources/gateway/metadata.json create mode 100644 src/main/resources/gateway/routes.json create mode 100644 src/main/resources/gateway/shared_info.json create mode 100644 src/main/resources/image/avatar@3x.png create mode 100644 src/main/resources/image/s.png create mode 100644 src/main/resources/smime/apple.pem create mode 100644 src/main/resources/smime/root.p12 create mode 100644 src/test/java/space/ao/services/GreetingResourceTest.java create mode 100644 src/test/java/space/ao/services/account/mock/MockFileOperatorService.java create mode 100644 src/test/java/space/ao/services/account/mock/MockSystemAgentService.java create mode 100644 src/test/java/space/ao/services/account/rest/AdminUserResourceTest.java create mode 100644 src/test/java/space/ao/services/account/rest/AuthorizedTerminalInfoResourceTest.java create mode 100644 src/test/java/space/ao/services/account/rest/BackupAndRestoreResourceTest.java create mode 100644 src/test/java/space/ao/services/account/rest/MigrationResourceTest.java create mode 100644 src/test/java/space/ao/services/account/rest/PersonalInfoResourceTest.java create mode 100644 src/test/java/space/ao/services/account/security/SecurityPasswordResourceTest.java create mode 100644 src/test/java/space/ao/services/account/security/SecurityTokenTest.java create mode 100644 src/test/java/space/ao/services/auth/AuthTokenResourceTest.java create mode 100644 src/test/java/space/ao/services/auth/QrAuthTokenResourceTest.java create mode 100644 src/test/java/space/ao/services/config/ApplicationPropertiesTest.java create mode 100644 src/test/java/space/ao/services/gateway/GatewayResourceTest.java create mode 100644 src/test/java/space/ao/services/gateway/VersionResourceTest.java create mode 100644 src/test/java/space/ao/services/gateway/auth/AuthTokenResourceTest.java create mode 100644 src/test/java/space/ao/services/gateway/auth/qrcode/BoxKeyResourceTest.java create mode 100644 src/test/java/space/ao/services/support/agent/MockSystemAgentServiceRestClient.java create mode 100644 src/test/java/space/ao/services/support/file/MockFileServiceRestClient.java create mode 100644 src/test/java/space/ao/services/support/platform/MockPlatformOpstageBoxRegKeyServiceRestClient.java create mode 100644 src/test/java/space/ao/services/support/platform/MockPlatformOpstageServiceRestClient.java create mode 100644 src/test/java/space/ao/services/support/platform/MockPlatformRegistryServiceRestClient.java create mode 100644 src/test/java/space/ao/services/support/platform/PlatformRegistryServiceRestClientTest.java create mode 100644 src/test/java/space/ao/services/support/redis/RedisMessageServiceTest.java create mode 100644 src/test/java/space/ao/services/support/redis/RedisTokenServiceTest.java create mode 100644 src/test/java/space/ao/services/support/security/SecurityTotpUtilsTest.java create mode 100644 src/test/java/space/ao/services/support/test/TestUtils.java create mode 100644 src/test/java/space/ao/services/vod/MockVodServiceRestClient.java create mode 100644 src/test/java/space/ao/services/vod/VodResourceTest.java create mode 100644 src/test/java/space/ao/services/vod/VodServiceTest.java create mode 100644 src/test/resources/api/servicesapi.json create mode 100644 src/test/resources/client/privateKey.pem create mode 100644 src/test/resources/db/migration/V9.9.9__Initial_Test_Data.sql create mode 100644 src/test/resources/gateway/1b/2a/1b2a3d.mp4 create mode 100644 src/test/resources/gateway/hello.mp3 create mode 100644 src/test/resources/gateway/index-h265.m3u8 create mode 100644 src/test/resources/gateway/index.m3u8 create mode 100644 src/test/resources/gateway/routes.json create mode 100644 src/test/resources/platform/api/servicesapi.json diff --git a/.github/workflows/build-push-image.yaml b/.github/workflows/build-push-image.yaml new file mode 100644 index 0000000..e33373a --- /dev/null +++ b/.github/workflows/build-push-image.yaml @@ -0,0 +1,163 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name: build and push container images + +env: + REGISTRY: ghcr.io + EULIX_REGISTRY: ${{ secrets.EULIX_REGISTRY }} + IMAGE_NAME: ${{ github.repository }} + JAVA_VERSION: '17' + +on: + push: + branches: [ "*" ] + tags: [ '*.*.*' ] + pull_request: + branches: [ "*" ] + +jobs: + build-jvm-images: + runs-on: [self-hosted, linux, x64] + permissions: + contents: read + packages: write + id-token: write + steps: + - uses: actions/checkout@v3 + + - name: Setup JDK ${{ env.JAVA_VERSION }} + uses: actions/setup-java@v3 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: temurin + cache: maven + + - name: Build Package for JVM + run: | + ./mvnw -B clean package -DskipTests=true \ + -Dquarkus.http.host=0.0.0.0 \ + -Dmaven.compiler.release=${{ env.JAVA_VERSION }} + + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v2 + + - name: Inspect builder + run: | + echo "Name: ${{ steps.buildx.outputs.name }}" + echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}" + echo "Status: ${{ steps.buildx.outputs.status }}" + echo "Flags: ${{ steps.buildx.outputs.flags }}" + echo "Platforms: ${{ steps.buildx.outputs.platforms }}" + + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log into registry ${{ env.EULIX_REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ${{ env.EULIX_REGISTRY }} + username: ${{ secrets.EULIX_REGISTRY_USERNAME }} + password: ${{ secrets.EULIX_REGISTRY_PASSWORD }} + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v2 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + ${{ env.EULIX_REGISTRY }}/${{ env.IMAGE_NAME }} + flavor: | + prefix=jvm- + + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@v2 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + builder: ${{ steps.buildx.outputs.name }} + platforms: linux/amd64,linux/arm64 + cache-from: type=gha + cache-to: type=gha,mode=max + file: Dockerfile.jvm + + build-native-images: + runs-on: [self-hosted, linux, x64] + permissions: + contents: read + packages: write + id-token: write + steps: + - uses: actions/checkout@v3 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Setup Docker buildx + uses: docker/setup-buildx-action@v2 + + - name: Inspect builder + run: | + echo "Name: ${{ steps.buildx.outputs.name }}" + echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}" + echo "Status: ${{ steps.buildx.outputs.status }}" + echo "Flags: ${{ steps.buildx.outputs.flags }}" + echo "Platforms: ${{ steps.buildx.outputs.platforms }}" + + - name: Log into registry ${{ env.REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Log into registry ${{ env.EULIX_REGISTRY }} + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ${{ env.EULIX_REGISTRY }} + username: ${{ secrets.EULIX_REGISTRY_USERNAME }} + password: ${{ secrets.EULIX_REGISTRY_PASSWORD }} + + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v2 + with: + images: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + ${{ env.EULIX_REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@v2 + with: + context: . + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + builder: ${{ steps.buildx.outputs.name }} + platforms: linux/amd64,linux/arm64 + cache-from: type=gha + cache-to: type=gha,mode=max + file: Dockerfile \ No newline at end of file diff --git a/.github/workflows/build-test.yaml b/.github/workflows/build-test.yaml new file mode 100644 index 0000000..4f63e9a --- /dev/null +++ b/.github/workflows/build-test.yaml @@ -0,0 +1,95 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +## Ref: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven + +name: build and test + +on: + push: + paths-ignore: + - '**/*.md' + - 'docs/**' + - '**/images/**' + branches: + - dev + pull_request: + types: + - opened + - synchronize + - reopened + - ready_for_review + branches: + - dev + paths-ignore: + - '**/*.md' + - 'docs/**' + - '**/images/**' + workflow_dispatch: + +env: + MANDREL_VERSION: "22.3.0.1-Final" + JAVA_VERSION: '17' + +jobs: + jvm-build-test: + runs-on: [self-hosted, linux, x64] + steps: + - uses: actions/checkout@v3 + + - name: Setup Maven+JDK-${{ env.JAVA_VERSION }} + uses: actions/setup-java@v3 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: 'temurin' + cache: maven + + - name: Build and Verify for JVM + run: | + ./mvnw -B clean verify \ + -Dquarkus.http.host=0.0.0.0 \ + -Dmaven.compiler.release=${{ env.JAVA_VERSION }} + + native-build-test: + runs-on: [self-hosted, linux, x64] + steps: + - uses: actions/checkout@v3 + + - name: Cache and restore Mandrel distro + id: check-mandrel-cache + uses: actions/cache@v3 + with: + path: mandrel-${{ env.MANDREL_VERSION }}-${{ env.JAVA_VERSION }}.tar.gz + key: mandrel-distro-${{ env.MANDREL_VERSION }}-${{ env.JAVA_VERSION }} + + - name: Download Mandrel + if: steps.check-mandrel-cache.outputs.cache-hit != 'true' + run: | + jdk_url="https://github.com/graalvm/mandrel/releases/download/mandrel-${MANDREL_VERSION}/mandrel-java${JAVA_VERSION}-linux-amd64-${MANDREL_VERSION}.tar.gz" + wget -q -O mandrel-${{ env.MANDREL_VERSION }}-${{ env.JAVA_VERSION }}.tar.gz $jdk_url + + - name: Setup Maven+MandrelJDK-${{ env.JAVA_VERSION }} + uses: actions/setup-java@v3 + with: + distribution: 'jdkfile' + jdkFile: mandrel-${{ env.MANDREL_VERSION }}-${{ env.JAVA_VERSION }}.tar.gz + java-version: ${{ env.JAVA_VERSION }} + architecture: x64 + cache: maven + + - name: Build and Verify for Native + run: | + ./mvnw -B clean verify -Pnative \ + -Dquarkus.http.host=0.0.0.0 \ + -Dmaven.compiler.release=${{ env.JAVA_VERSION }} \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..647f4c6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,53 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#Maven +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +release.properties + +# Eclipse +.project +.classpath +.settings/ +bin/ + +# IntelliJ +.idea +*.ipr +*.iml +*.iws + +# NetBeans +nb-configuration.xml + +# Visual Studio Code +.vscode +.factorypath + +# OSX +.DS_Store + +# Vim +*.swp +*.swo + +# patch +*.orig +*.rej + +# Local environment +.env diff --git a/.license.tpl b/.license.tpl new file mode 100644 index 0000000..7a4f56d --- /dev/null +++ b/.license.tpl @@ -0,0 +1,212 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +{{ range .Groups }} +======================================================================== +{{.LicenseID}} licenses +======================================================================== +{{range .Deps}} + {{.Name}} {{.Version}} {{.LicenseID}} +{{- end }} +{{ end }} \ No newline at end of file diff --git a/.licenserc.yaml b/.licenserc.yaml new file mode 100644 index 0000000..202745a --- /dev/null +++ b/.licenserc.yaml @@ -0,0 +1,61 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +header: + license: + spdx-id: Apache-2.0 + copyright-owner: ISCAS + software-name: aospace-gateway + content: | + Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + paths: + - '**' + + paths-ignore: + - 'licenses' + - '**/*.md' + - '**/*.json' + - 'LICENSE' + - 'NOTICE' + - 'VERSION' + - '.license.tpl' + - 'mvnw' + - '**/*.pem' + - '**/*.m3u8' + - 'q' + + language: + Dockerfile: + filenames: + - Dockerfile.jvm + - Dockerfile.legacy-jar + - Dockerfile.native + - Dockerfile.native-distroless + comment_style_id: Hashtag + +dependency: + files: + - pom.xml \ No newline at end of file diff --git a/.mvn/wrapper/.gitignore b/.mvn/wrapper/.gitignore new file mode 100644 index 0000000..eef7011 --- /dev/null +++ b/.mvn/wrapper/.gitignore @@ -0,0 +1,15 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +maven-wrapper.jar \ No newline at end of file diff --git a/.mvn/wrapper/MavenWrapperDownloader.java b/.mvn/wrapper/MavenWrapperDownloader.java new file mode 100644 index 0000000..63a2798 --- /dev/null +++ b/.mvn/wrapper/MavenWrapperDownloader.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.IOException; +import java.io.InputStream; +import java.net.Authenticator; +import java.net.PasswordAuthentication; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardCopyOption; + +public final class MavenWrapperDownloader +{ + private static final String WRAPPER_VERSION = "3.2.0"; + + private static final boolean VERBOSE = Boolean.parseBoolean( System.getenv( "MVNW_VERBOSE" ) ); + + public static void main( String[] args ) + { + log( "Apache Maven Wrapper Downloader " + WRAPPER_VERSION ); + + if ( args.length != 2 ) + { + System.err.println( " - ERROR wrapperUrl or wrapperJarPath parameter missing" ); + System.exit( 1 ); + } + + try + { + log( " - Downloader started" ); + final URL wrapperUrl = new URL( args[0] ); + final String jarPath = args[1].replace( "..", "" ); // Sanitize path + final Path wrapperJarPath = Paths.get( jarPath ).toAbsolutePath().normalize(); + downloadFileFromURL( wrapperUrl, wrapperJarPath ); + log( "Done" ); + } + catch ( IOException e ) + { + System.err.println( "- Error downloading: " + e.getMessage() ); + if ( VERBOSE ) + { + e.printStackTrace(); + } + System.exit( 1 ); + } + } + + private static void downloadFileFromURL( URL wrapperUrl, Path wrapperJarPath ) + throws IOException + { + log( " - Downloading to: " + wrapperJarPath ); + if ( System.getenv( "MVNW_USERNAME" ) != null && System.getenv( "MVNW_PASSWORD" ) != null ) + { + final String username = System.getenv( "MVNW_USERNAME" ); + final char[] password = System.getenv( "MVNW_PASSWORD" ).toCharArray(); + Authenticator.setDefault( new Authenticator() + { + @Override + protected PasswordAuthentication getPasswordAuthentication() + { + return new PasswordAuthentication( username, password ); + } + } ); + } + try ( InputStream inStream = wrapperUrl.openStream() ) + { + Files.copy( inStream, wrapperJarPath, StandardCopyOption.REPLACE_EXISTING ); + } + log( " - Downloader complete" ); + } + + private static void log( String msg ) + { + if ( VERBOSE ) + { + System.out.println( msg ); + } + } + +} diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..18ff78b --- /dev/null +++ b/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,17 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.3/apache-maven-3.9.3-bin.zip +wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar + diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9fdf0dd --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,93 @@ +Change Log +========== + +## 版本 1.5.0 + +_Jul 11, 2023_ + +* 支持通过开发者选项部署容器应用 +* 支持通过应用市场部署容器应用 +* 支持记录和获取文件操作历史记录 + +## 版本 1.0.9 + +_Jul 28, 2022_ + +* 傲空间应用基础框架和通讯录小应用 +* 修改安全密码功能 + +## 版本 1.0.3 + +_Mar 03, 2022_ + +* 将 account 微服务合并到 gateway 服务,便于整体维护和减少服务内存消耗。 +* 针对 Byte Serving 服务,提供了更完整的 [Range-Requests](https://www.rfc-editor.org/rfc/rfc2616#section-14.35) 的协议支持。 + +## 版本 0.7.1 + +_Dec 07, 2021_ + +* 修复了 `ConstraintViolationException` 异常无法被拦截并转换为统一响应的问题。 +* 修复了框架对 `multipart/form-data` 默认使用 `tmp` 目录缓存文件导致磁盘空间耗尽的问题。 +* 针对 Byte Serving 服务,提供了基于 betag 和 uuid 的文件字节流访问模式(通过设置 `fileName` 为 `betag:{tag}` 或 `uuid:{uuid}`)。 + +## 版本 0.6.0 + +_Nov 30, 2021_ + +* 完善了临时授权客户端访问流程。 +* 提供了基于 Byte Serving 的文件访问接口的实现(需要设置 access token 才能访问)。 +* 为 Byte Serving 文件访问提供字节流加密支持(设置请求参数`encrypted=true`)。 +* 提供了针对环境变量 `APP_GATEWAY_FILE_SYSTEM_LOCATION` 所在目录的文件浏览页面(html)。 +* 统一了网关所有接口的分类命名。 +* 完善了应用配置代码和错误消息处理。 + +## 版本 0.5.0 + +_Nov 17, 2021_ + +* 提供了 Upload 泛化接口支持指定不同的 ext-protocol:`onepart`, `multipart`,它们分别表示通过普通单个部分或者多个部分的 POST/PUT 对接上游服务。 + +## 版本 0.4.0 + +_Nov 02, 2021_ + +* 支持了多账户撤销客户端认证。 + +## 版本 0.3.0 + +_Oct 19, 2021_ + +* 支持了多账号授权和管理。 + +## 版本 0.2.5 + +_Sep 23, 2021_ + +* 修复了文件下载接口业务网关积累本地临时文件的问题。 +* 提供了随机化加密会话 AES 初始化向量。 +* 将其对称密钥提升到 256 bits。 +* 支持了动态调整加解密算法配置。 + +## 版本 0.2.0 + +_Sep 8, 2021_ + +* 支持了二维码授权功能以及 auth-key 授权绑定设备功能。 +* 修复了临时授权无法续约的问题。 + +## 版本 0.1.6 + +_Aug 18, 2021_ + +* 支持了文件加密下载产品功能。 +* 支持了文件加密上传产品功能。 +* 修复了盒子网关 native 镜像运行涉及 Json 反序列化的问题。 + +## 版本 0.1.5 + +_Jul 28, 2021_ + +* 服务(eulixspace-gateway-jvm)提供了基本加密业务请求、加密文件上传和下载的支持。 +* 修复了通过镜像启动无法读取服务内预置密钥的问题。 +* 支持了 native 镜像构建。 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..699a1aa --- /dev/null +++ b/Dockerfile @@ -0,0 +1,57 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +FROM ghcr.io/graalvm/graalvm-ce:ol8-java17-22 as builder + +WORKDIR /work/ + +COPY . . + +RUN curl -o maven.tar.gz https://archive.apache.org/dist/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz +RUN tar -xzvf maven.tar.gz +RUN gu install native-image +RUN ./apache-maven-3.9.3/bin/mvn -Dhttps.protocols=TLSv1.2 -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true package -Pnative -Dmaven.test.skip=true + + +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# It uses a micro base image, tuned for Quarkus native executables. +# It reduces the size of the resulting container image. +# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. +# +# Before building the container image run: +# +# ./mvnw package -Pnative +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/aospace-message . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/aospace-message +# +### +FROM quay.io/quarkus/quarkus-micro-image:2.0 +WORKDIR /work/ +RUN chown 1001 /work \ + && chmod "g+rwX" /work \ + && chown 1001:root /work +COPY --from=builder --chown=1001:root /work/target/*-runner /work/aospace-gateway + +EXPOSE 8080 +USER root + +CMD ["/work/aospace-gateway", "-Dquarkus.http.host=0.0.0.0"] diff --git a/Dockerfile.jvm b/Dockerfile.jvm new file mode 100644 index 0000000..fe14721 --- /dev/null +++ b/Dockerfile.jvm @@ -0,0 +1,107 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode +# +# Before building the container image run: +# +# ./mvnw package +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/aospace-gateway-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/aospace-gateway-jvm +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/aospace-gateway-jvm +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi8/openjdk-17:1.16 + +ENV LANGUAGE='en_US:en' + +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=1001 target/quarkus-app/lib/ /deployments/lib/ +COPY --chown=1001 target/quarkus-app/*.jar /deployments/ +COPY --chown=1001 target/quarkus-app/app/ /deployments/app/ +COPY --chown=1001 target/quarkus-app/quarkus/ /deployments/quarkus/ + +EXPOSE 8080 +USER root +ENV JAVA_OPTS="-Duser.timezone=GMT+8 -Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..de4b130 --- /dev/null +++ b/LICENSE @@ -0,0 +1,204 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..9c91be2 --- /dev/null +++ b/NOTICE @@ -0,0 +1,19 @@ +--AOSpace-Gateway-- +Copyright (c) 2022 Institute of Software, Chinese Academy of Sciences (ISCAS) + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +--Third Party Software Notices-- +AOSpace-Gateway use software provided by third parties, including open source software. The following copyright statements and licenses apply to various components that are distributed with AOSpace-Gateway. The AOSpace-Gateway that includes this file does not necessarily use all of the third party software components referred to below. + +Licensee must fully agree and comply with these license terms or must not use these components. The third party license terms apply only to the respective software to which the license pertains, and the third party license terms do not apply to the AOSpace-Gateway. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0bb86ca --- /dev/null +++ b/README.md @@ -0,0 +1,102 @@ +# space-gateway + +English | [简体中文](./README_cn.md) + +## Project Introduction + +space-gateway is used for request routing, encryption and decryption, authentication and authorization, account management, video on demand service. + +This application has a customized http root path: `/space`. And for api: + +## Module Design Introduction + +- gateway: Request routing, encryption and decryption, identity verification and authorization +- account: Account management +- push: Message push dependency +- vod: Video on demand service file acquisition dependency [ao-space/space-media-vod](https://github.com/ao-space/space-media-vod) + +## Build and Run + +### Running the application in dev mode + +You can run your application in dev mode that enables live coding using: + +Note: The docker environment is required to run the application in dev mode. If docker is not installed, +redis and postgresql connection parameters need to be configured under application.yml. + +```shell script +./mvnw compile quarkus:dev +``` + +> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at . + +### Packaging and running the application + +The application can be packaged using: + +```shell script +./mvnw package +``` + +It produces the `quarkus-run.jar` file in the `target/quarkus-app/` directory. +Be aware that it’s not an _über-jar_ as the dependencies are copied into the `target/quarkus-app/lib/` directory. + +If you want to build an _über-jar_, execute the following command: + +```shell script +./mvnw package -Dquarkus.package.type=uber-jar +``` + +The application is now runnable using `java -jar target/quarkus-app/quarkus-run.jar`. + +### Creating a native executable and Docker image + +You can create a native executable using: + +```shell script +./mvnw package -Pnative +``` + +Or, if you don't have GraalVM installed, you can run the native executable build in a container using: + +```shell script +./mvnw package -Pnative -Dquarkus.native.container-build=true +``` + +You can then execute your native executable with: `./target/space-gateway-1.0.0-SNAPSHOT-runner` + +Create native docker image: + +```shell script +docker build -f src/main/docker/Dockerfile.native -t native/space-gateway . +``` + +And run above native image: + +```shell script +docker run -i --rm -p 8080:8080 native/space-gateway +``` + +If you want to learn more about building native executables, please consult . + +### Combined with other services in AO.space + +Refer to [build-and-deploy](https://github.com/ao-space/ao.space/blob/dev/docs/build-and-deploy.md). + +## Notes + +## Contribution Guidelines + +Contributions to this project are very welcome. Here are some guidelines and suggestions to help you get involved in the project. + +[Contribution Guidelines](https://github.com/ao-space/ao.space/blob/dev/docs/en/contribution-guidelines.md) + +## Contact us + +- Email: +- [Official Website](https://ao.space) +- [Discussion group](https://slack.ao.space) + +## Thanks for your contribution + +Finally, thank you for your contribution to this project. We welcome contributions in all forms, including but not limited to code contributions, issue reports, feature requests, documentation writing, etc. We believe that with your help, this project will become more perfect and stronger. diff --git a/README_cn.md b/README_cn.md new file mode 100644 index 0000000..d97400f --- /dev/null +++ b/README_cn.md @@ -0,0 +1,100 @@ +# space-gateway + +[English](./README.md) | 简体中文 + +## 项目简介 + +space-gateway 用于请求路由、加密解密、身份验证和授权、账户管理、消息推送、视频点播服务文件获取。 + +该应用具有自定义的 HTTP 根路径:/space。 API 地址为: + +## 模块介绍设计 + +- gateway: 请求路由、加密解密、身份验证和授权 +- account: 账户管理 +- push: 消息推送依赖 +- vod: 视频点播服务文件获取依赖 [ao-space/space-media-vod](https://github.com/ao-space/space-media-vod) + +## 构建与运行 + +### 在 dev 模式下运行应用程序 + +您可以使用以下命令在 dev 模式下运行应用程序,从而启用实时编码: + +注意:在 dev 模式下运行应用程序需要 docker 环境,如果没有安装 docker 则需要在 application.yml 下配置 redis 和 postgresql 连接参数。 + +```shell +./mvnw compile quarkus:dev +``` + +注意: Quarkus 现在附带了 Dev UI,仅在 dev 模式下可用,访问地址为 + +### 打包并运行应用程序 + +可以使用以下命令打包应用程序: + +```shell +./mvnw package +``` + +它将在 `target/quarkus-app/` 目录中生成 `quarkus-run.jar` 文件。请注意,它不是 `über-jar`,因为依赖项被复制到 `target/quarkus-app/lib/` 目录中。 + +如果要构建 `über-jar`,请执行以下命令: + +```shell +./mvnw package -Dquarkus.package.type=uber-jar +``` + +现在,可以使用 `java -jar target/quarkus-app/quarkus-run.jar` 运行应用程序。 + +### 创建本机可执行文件和 Docker 镜像 + +您可以使用以下命令创建本机可执行文件: + +```shell +./mvnw package -Pnative +``` + +或者,如果您没有安装 GraalVM,则可以在容器中运行本机可执行文件构建,使用以下命令: + +```shell +./mvnw package -Pnative -Dquarkus.native.container-build=true +``` + +然后,您可以使用 `./target/space-gateway-1.0.0-SNAPSHOT-runner` 执行本机可执行文件。 + +创建本机 Docker 镜像: + +```shell +docker build -f src/main/docker/Dockerfile.native -t native/space-gateway . +``` + +并运行上述本机镜像: + +```text +docker run -i --rm -p 8080:8080 native/space-gateway +``` + +如果您想了解有关构建本机可执行文件的更多信息,请参阅 。 + +### 和傲空间其它服务一起运行 + +参考 [build-and-deploy](https://github.com/ao-space/ao.space/blob/dev/docs/build-and-deploy_CN.md)。 + +## 注意事项 + +## 贡献指南 + +我们非常欢迎对本项目进行贡献。以下是一些指导原则和建议,希望能够帮助您参与到项目中来。 + +[贡献指南](https://github.com/ao-space/ao.space/blob/dev/docs/cn/contribution-guidelines.md) + +## 联系我们 + +- 邮箱: +- [官方网站](https://ao.space) +- [讨论组](https://slack.ao.space) + +## 感谢您的贡献 + +最后,感谢您对本项目的贡献。我们欢迎各种形式的贡献,包括但不限于代码贡献、问题报告、功能请求、文档编写等。我们相信在您的帮助下,本项目会变得更加完善和强大。 diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..2165f8f --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +2.0.4 diff --git a/licenses/license-antlr-antlr.txt b/licenses/license-antlr-antlr.txt new file mode 100644 index 0000000..c2d6d04 --- /dev/null +++ b/licenses/license-antlr-antlr.txt @@ -0,0 +1 @@ +License: {Name: BSD License, URL: http://www.antlr.org/license.html, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.belerweb-pinyin4j.txt b/licenses/license-com.belerweb-pinyin4j.txt new file mode 100644 index 0000000..135f773 --- /dev/null +++ b/licenses/license-com.belerweb-pinyin4j.txt @@ -0,0 +1 @@ +License: {Name: BSD, URL: http://opensource.org/licenses/bsd-license.html, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.beust-jcommander.txt b/licenses/license-com.beust-jcommander.txt new file mode 100644 index 0000000..0f33352 --- /dev/null +++ b/licenses/license-com.beust-jcommander.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-com.cronutils-cron-utils.txt b/licenses/license-com.cronutils-cron-utils.txt new file mode 100644 index 0000000..5b5e45b --- /dev/null +++ b/licenses/license-com.cronutils-cron-utils.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.html \ No newline at end of file diff --git a/licenses/license-com.fasterxml-classmate.txt b/licenses/license-com.fasterxml-classmate.txt new file mode 100644 index 0000000..08c2646 --- /dev/null +++ b/licenses/license-com.fasterxml-classmate.txt @@ -0,0 +1 @@ +License: {Name: Apache License, Version 2.0, URL: https://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.fasterxml.jackson.core-jackson-annotations.txt b/licenses/license-com.fasterxml.jackson.core-jackson-annotations.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-com.fasterxml.jackson.core-jackson-annotations.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-com.fasterxml.jackson.core-jackson-core.txt b/licenses/license-com.fasterxml.jackson.core-jackson-core.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-com.fasterxml.jackson.core-jackson-core.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-com.fasterxml.jackson.core-jackson-databind.txt b/licenses/license-com.fasterxml.jackson.core-jackson-databind.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-com.fasterxml.jackson.core-jackson-databind.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-com.fasterxml.jackson.dataformat-jackson-dataformat-yaml.txt b/licenses/license-com.fasterxml.jackson.dataformat-jackson-dataformat-yaml.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.fasterxml.jackson.datatype-jackson-datatype-jdk8.txt b/licenses/license-com.fasterxml.jackson.datatype-jackson-datatype-jdk8.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-com.fasterxml.jackson.datatype-jackson-datatype-jdk8.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-com.fasterxml.jackson.datatype-jackson-datatype-jsr310.txt b/licenses/license-com.fasterxml.jackson.datatype-jackson-datatype-jsr310.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.fasterxml.jackson.jaxrs-jackson-jaxrs-base.txt b/licenses/license-com.fasterxml.jackson.jaxrs-jackson-jaxrs-base.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.fasterxml.jackson.jaxrs-jackson-jaxrs-json-provider.txt b/licenses/license-com.fasterxml.jackson.jaxrs-jackson-jaxrs-json-provider.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.fasterxml.jackson.module-jackson-module-jaxb-annotations.txt b/licenses/license-com.fasterxml.jackson.module-jackson-module-jaxb-annotations.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.fasterxml.jackson.module-jackson-module-parameter-names.txt b/licenses/license-com.fasterxml.jackson.module-jackson-module-parameter-names.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-com.fasterxml.jackson.module-jackson-module-parameter-names.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-com.github.ben-manes.caffeine-caffeine.txt b/licenses/license-com.github.ben-manes.caffeine-caffeine.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-com.github.ben-manes.caffeine-caffeine.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-com.github.jai-imageio-jai-imageio-core.txt b/licenses/license-com.github.jai-imageio-jai-imageio-core.txt new file mode 100644 index 0000000..88e09e0 --- /dev/null +++ b/licenses/license-com.github.jai-imageio-jai-imageio-core.txt @@ -0,0 +1,39 @@ +Copyright (c) 2005 Sun Microsystems, Inc. +Copyright © 2010-2014 University of Manchester +Copyright © 2010-2015 Stian Soiland-Reyes +Copyright © 2015 Peter Hull +All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +- Redistribution of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +- Redistribution in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +Neither the name of Sun Microsystems, Inc. or the names of +contributors may be used to endorse or promote products derived +from this software without specific prior written permission. + +This software is provided "AS IS," without a warranty of any +kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND +WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY +EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL +NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF +USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS +DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR +ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, +CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND +REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR +INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + +You acknowledge that this software is not designed or intended for +use in the design, construction, operation or maintenance of any +nuclear facility. diff --git a/licenses/license-com.github.java-json-tools-btf.txt b/licenses/license-com.github.java-json-tools-btf.txt new file mode 100644 index 0000000..1cefda9 --- /dev/null +++ b/licenses/license-com.github.java-json-tools-btf.txt @@ -0,0 +1,2 @@ +License: {Name: Lesser General Public License, version 3 or greater, URL: http://www.gnu.org/licenses/lgpl.html, Distribution: repo, Comments: , } +License: {Name: Apache Software License, version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.github.java-json-tools-jackson-coreutils.txt b/licenses/license-com.github.java-json-tools-jackson-coreutils.txt new file mode 100644 index 0000000..1cefda9 --- /dev/null +++ b/licenses/license-com.github.java-json-tools-jackson-coreutils.txt @@ -0,0 +1,2 @@ +License: {Name: Lesser General Public License, version 3 or greater, URL: http://www.gnu.org/licenses/lgpl.html, Distribution: repo, Comments: , } +License: {Name: Apache Software License, version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.github.java-json-tools-json-patch.txt b/licenses/license-com.github.java-json-tools-json-patch.txt new file mode 100644 index 0000000..1cefda9 --- /dev/null +++ b/licenses/license-com.github.java-json-tools-json-patch.txt @@ -0,0 +1,2 @@ +License: {Name: Lesser General Public License, version 3 or greater, URL: http://www.gnu.org/licenses/lgpl.html, Distribution: repo, Comments: , } +License: {Name: Apache Software License, version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.github.java-json-tools-msg-simple.txt b/licenses/license-com.github.java-json-tools-msg-simple.txt new file mode 100644 index 0000000..1cefda9 --- /dev/null +++ b/licenses/license-com.github.java-json-tools-msg-simple.txt @@ -0,0 +1,2 @@ +License: {Name: Lesser General Public License, version 3 or greater, URL: http://www.gnu.org/licenses/lgpl.html, Distribution: repo, Comments: , } +License: {Name: Apache Software License, version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.google.code.findbugs-jsr305.txt b/licenses/license-com.google.code.findbugs-jsr305.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-com.google.code.findbugs-jsr305.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-com.google.code.gson-gson.txt b/licenses/license-com.google.code.gson-gson.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.google.errorprone-error-prone-annotations.txt b/licenses/license-com.google.errorprone-error-prone-annotations.txt new file mode 100644 index 0000000..5911501 --- /dev/null +++ b/licenses/license-com.google.errorprone-error-prone-annotations.txt @@ -0,0 +1 @@ +License: {Name: Apache 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: , Comments: , } \ No newline at end of file diff --git a/licenses/license-com.google.guava-failureaccess.txt b/licenses/license-com.google.guava-failureaccess.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-com.google.guava-failureaccess.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-com.google.guava-guava.txt b/licenses/license-com.google.guava-guava.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-com.google.guava-guava.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-com.google.guava-listenablefuture.txt b/licenses/license-com.google.guava-listenablefuture.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.google.j2objc-j2objc-annotations.txt b/licenses/license-com.google.j2objc-j2objc-annotations.txt new file mode 100644 index 0000000..b67090c --- /dev/null +++ b/licenses/license-com.google.j2objc-j2objc-annotations.txt @@ -0,0 +1 @@ +License: {Name: The Apache Software License, Version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.google.zxing-core.txt b/licenses/license-com.google.zxing-core.txt new file mode 100644 index 0000000..8e9a5e6 --- /dev/null +++ b/licenses/license-com.google.zxing-core.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0.txt" \ No newline at end of file diff --git a/licenses/license-com.google.zxing-javase.txt b/licenses/license-com.google.zxing-javase.txt new file mode 100644 index 0000000..40e8f55 --- /dev/null +++ b/licenses/license-com.google.zxing-javase.txt @@ -0,0 +1,15 @@ + + Copyright (C) 2010 ZXing authors + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + \ No newline at end of file diff --git a/licenses/license-com.ibm.async-asyncutil.txt b/licenses/license-com.ibm.async-asyncutil.txt new file mode 100644 index 0000000..5afe962 --- /dev/null +++ b/licenses/license-com.ibm.async-asyncutil.txt @@ -0,0 +1 @@ +License: {Name: The Apache Software License, Version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: , Comments: , } \ No newline at end of file diff --git a/licenses/license-com.mchange-mchange-commons-java.txt b/licenses/license-com.mchange-mchange-commons-java.txt new file mode 100644 index 0000000..e9b07be --- /dev/null +++ b/licenses/license-com.mchange-mchange-commons-java.txt @@ -0,0 +1,2 @@ +License: {Name: GNU Lesser General Public License, Version 2.1, URL: http://www.gnu.org/licenses/lgpl-2.1.html, Distribution: repo, Comments: , } +License: {Name: Eclipse Public License, Version 1.0, URL: http://www.eclipse.org/org/documents/epl-v10.html, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-com.squareup.okhttp3-okhttp.txt b/licenses/license-com.squareup.okhttp3-okhttp.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.squareup.okio-okio.txt b/licenses/license-com.squareup.okio-okio.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-com.sun.activation-jakarta.activation.txt b/licenses/license-com.sun.activation-jakarta.activation.txt new file mode 100644 index 0000000..e0358f9 --- /dev/null +++ b/licenses/license-com.sun.activation-jakarta.activation.txt @@ -0,0 +1,29 @@ + + Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Eclipse Foundation, Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/license-com.sun.istack-istack-commons-runtime.txt b/licenses/license-com.sun.istack-istack-commons-runtime.txt new file mode 100644 index 0000000..c739f78 --- /dev/null +++ b/licenses/license-com.sun.istack-istack-commons-runtime.txt @@ -0,0 +1,29 @@ + + Copyright (c) 2017 Oracle and/or its affiliates. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Eclipse Foundation, Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/license-com.sun.mail-jakarta.mail.txt b/licenses/license-com.sun.mail-jakarta.mail.txt new file mode 100644 index 0000000..5de3d1b --- /dev/null +++ b/licenses/license-com.sun.mail-jakarta.mail.txt @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + + "Contributor" means any person or entity that Distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions Distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the Program + in a commercial product offering. The obligations in this section do not + apply to any claims or Losses relating to any actual or alleged + intellectual property infringement. In order to qualify, an Indemnified + Contributor must: a) promptly notify the Commercial Contributor in + writing of such claim, and b) allow the Commercial Contributor to control, + and cooperate with the Commercial Contributor in, the defense and any + related settlement negotiations. The Indemnified Contributor may + participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those performance + claims and warranties, and if a court requires any other Contributor to + pay any damages as a result, the Commercial Contributor must pay + those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR + IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR + PURPOSE. Each Recipient is solely responsible for determining the + appropriateness of using and distributing the Program and assumes all + risks associated with its exercise of rights under this Agreement, + including but not limited to the risks and costs of program errors, + compliance with applicable laws, damage to or loss of data, programs + or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS + SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST + PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that the + Program itself (excluding combinations of the Program with other software + or hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it + fails to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of + time after becoming aware of such noncompliance. If all Recipient's + rights under this Agreement terminate, Recipient agrees to cease use + and distribution of the Program as soon as reasonably practicable. + However, Recipient's obligations under this Agreement and any licenses + granted by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a distinguishing + version number. The Program (including Contributions) may always be + Distributed subject to the version of the Agreement under which it was + received. In addition, after a new version of the Agreement is published, + Contributor may elect to Distribute the Program (including its + Contributions) under the new version. + + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient + receives no rights or licenses to the intellectual property of any + Contributor under this Agreement, whether expressly, by implication, + estoppel or otherwise. All rights in the Program not expressly granted + under this Agreement are reserved. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public License is + intended to guarantee your freedom to share and change free software--to + make sure the software is free for all its users. This General Public + License applies to most of the Free Software Foundation's software and + to any other program whose authors commit to using it. (Some other Free + Software Foundation software is covered by the GNU Library General + Public License instead.) You can apply it to your programs, too. + + When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this + service if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether gratis + or for a fee, you must give the recipients all the rights that you have. + You must make sure that they, too, receive or can get the source code. + And you must show them these terms so they know their rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program + proprietary. To prevent this, we have made it clear that any patent must + be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed under + the terms of this General Public License. The "Program", below, refers + to any such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: that is + to say, a work containing the Program or a portion of it, either + verbatim or with modifications and/or translated into another language. + (Hereinafter, translation is included without limitation in the term + "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is + covered only if its contents constitute a work based on the Program + (independent of having been made by running the Program). Whether that + is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion of + it, thus forming a work based on the Program, and copy and distribute + such modifications or work under the terms of Section 1 above, provided + that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this License. + (Exception: if the Program itself is interactive but does not + normally print such an announcement, your work based on the Program + is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Program, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt otherwise + to copy, modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will + not have their licenses terminated so long as such parties remain in + full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and all + its terms and conditions for copying, distributing or modifying the + Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License may + add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted by the + Free Software Foundation, write to the Free Software Foundation; we + sometimes make exceptions for this. Our decision will be guided by the + two goals of preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the commands + you use may be called something other than `show w' and `show c'; they + could even be mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications + with the library. If this is what you want to do, use the GNU Library + General Public License instead of this License. + +--- + +## CLASSPATH EXCEPTION + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License version 2 cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from or + based on this library. If you modify this library, you may extend this + exception to your version of the library, but you are not obligated to + do so. If you do not wish to do so, delete this exception statement + from your version. diff --git a/licenses/license-commons-codec-commons-codec.txt b/licenses/license-commons-codec-commons-codec.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-commons-codec-commons-codec.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-commons-io-commons-io.txt b/licenses/license-commons-io-commons-io.txt new file mode 100644 index 0000000..6b0b127 --- /dev/null +++ b/licenses/license-commons-io-commons-io.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/licenses/license-dev.samstevens.totp-totp.txt b/licenses/license-dev.samstevens.totp-totp.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.agroal-agroal-api.txt b/licenses/license-io.agroal-agroal-api.txt new file mode 100644 index 0000000..5b5e45b --- /dev/null +++ b/licenses/license-io.agroal-agroal-api.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.html \ No newline at end of file diff --git a/licenses/license-io.agroal-agroal-narayana.txt b/licenses/license-io.agroal-agroal-narayana.txt new file mode 100644 index 0000000..5b5e45b --- /dev/null +++ b/licenses/license-io.agroal-agroal-narayana.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.html \ No newline at end of file diff --git a/licenses/license-io.agroal-agroal-pool.txt b/licenses/license-io.agroal-agroal-pool.txt new file mode 100644 index 0000000..5b5e45b --- /dev/null +++ b/licenses/license-io.agroal-agroal-pool.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.html \ No newline at end of file diff --git a/licenses/license-io.netty-netty-buffer.txt b/licenses/license-io.netty-netty-buffer.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-buffer.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-codec-dns.txt b/licenses/license-io.netty-netty-codec-dns.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-codec-dns.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-codec-haproxy.txt b/licenses/license-io.netty-netty-codec-haproxy.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-codec-haproxy.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-codec-http.txt b/licenses/license-io.netty-netty-codec-http.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-codec-http.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-codec-http2.txt b/licenses/license-io.netty-netty-codec-http2.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-codec-http2.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-codec-socks.txt b/licenses/license-io.netty-netty-codec-socks.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-codec-socks.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-codec.txt b/licenses/license-io.netty-netty-codec.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-codec.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-common.txt b/licenses/license-io.netty-netty-common.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-common.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-handler-proxy.txt b/licenses/license-io.netty-netty-handler-proxy.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-handler-proxy.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-handler.txt b/licenses/license-io.netty-netty-handler.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-handler.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-resolver-dns.txt b/licenses/license-io.netty-netty-resolver-dns.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-resolver-dns.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-resolver.txt b/licenses/license-io.netty-netty-resolver.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-resolver.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.netty-netty-transport.txt b/licenses/license-io.netty-netty-transport.txt new file mode 100644 index 0000000..5151118 --- /dev/null +++ b/licenses/license-io.netty-netty-transport.txt @@ -0,0 +1 @@ +https://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/licenses/license-io.quarkus-quarkus-agroal.txt b/licenses/license-io.quarkus-quarkus-agroal.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-apache-httpclient.txt b/licenses/license-io.quarkus-quarkus-apache-httpclient.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-arc.txt b/licenses/license-io.quarkus-quarkus-arc.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-bootstrap-runner.txt b/licenses/license-io.quarkus-quarkus-bootstrap-runner.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-caffeine.txt b/licenses/license-io.quarkus-quarkus-caffeine.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-config-yaml.txt b/licenses/license-io.quarkus-quarkus-config-yaml.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-core.txt b/licenses/license-io.quarkus-quarkus-core.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-credentials.txt b/licenses/license-io.quarkus-quarkus-credentials.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-datasource-common.txt b/licenses/license-io.quarkus-quarkus-datasource-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-datasource.txt b/licenses/license-io.quarkus-quarkus-datasource.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-development-mode-spi.txt b/licenses/license-io.quarkus-quarkus-development-mode-spi.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-flyway.txt b/licenses/license-io.quarkus-quarkus-flyway.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-hibernate-orm-panache-common.txt b/licenses/license-io.quarkus-quarkus-hibernate-orm-panache-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-hibernate-orm-panache.txt b/licenses/license-io.quarkus-quarkus-hibernate-orm-panache.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-hibernate-orm.txt b/licenses/license-io.quarkus-quarkus-hibernate-orm.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-hibernate-validator.txt b/licenses/license-io.quarkus-quarkus-hibernate-validator.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-ide-launcher.txt b/licenses/license-io.quarkus-quarkus-ide-launcher.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-jackson.txt b/licenses/license-io.quarkus-quarkus-jackson.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-jaxb.txt b/licenses/license-io.quarkus-quarkus-jaxb.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-jaxp.txt b/licenses/license-io.quarkus-quarkus-jaxp.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-jdbc-postgresql.txt b/licenses/license-io.quarkus-quarkus-jdbc-postgresql.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-jsonp.txt b/licenses/license-io.quarkus-quarkus-jsonp.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-logging-sentry.txt b/licenses/license-io.quarkus-quarkus-logging-sentry.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-mutiny.txt b/licenses/license-io.quarkus-quarkus-mutiny.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-narayana-jta.txt b/licenses/license-io.quarkus-quarkus-narayana-jta.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-netty.txt b/licenses/license-io.quarkus-quarkus-netty.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-panache-common.txt b/licenses/license-io.quarkus-quarkus-panache-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-panache-hibernate-common.txt b/licenses/license-io.quarkus-quarkus-panache-hibernate-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-quartz.txt b/licenses/license-io.quarkus-quarkus-quartz.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-reactive-routes.txt b/licenses/license-io.quarkus-quarkus-reactive-routes.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-redis-client.txt b/licenses/license-io.quarkus-quarkus-redis-client.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-rest-client-jackson.txt b/licenses/license-io.quarkus-quarkus-rest-client-jackson.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-rest-client.txt b/licenses/license-io.quarkus-quarkus-rest-client.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-resteasy-common.txt b/licenses/license-io.quarkus-quarkus-resteasy-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-resteasy-jackson.txt b/licenses/license-io.quarkus-quarkus-resteasy-jackson.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-resteasy-jaxb.txt b/licenses/license-io.quarkus-quarkus-resteasy-jaxb.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-resteasy-multipart.txt b/licenses/license-io.quarkus-quarkus-resteasy-multipart.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-resteasy-mutiny-common.txt b/licenses/license-io.quarkus-quarkus-resteasy-mutiny-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-resteasy-mutiny.txt b/licenses/license-io.quarkus-quarkus-resteasy-mutiny.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-resteasy-server-common.txt b/licenses/license-io.quarkus-quarkus-resteasy-server-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-resteasy.txt b/licenses/license-io.quarkus-quarkus-resteasy.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-scheduler.txt b/licenses/license-io.quarkus-quarkus-scheduler.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-security-runtime-spi.txt b/licenses/license-io.quarkus-quarkus-security-runtime-spi.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-security.txt b/licenses/license-io.quarkus-quarkus-security.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-smallrye-context-propagation.txt b/licenses/license-io.quarkus-quarkus-smallrye-context-propagation.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-smallrye-jwt-build.txt b/licenses/license-io.quarkus-quarkus-smallrye-jwt-build.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-smallrye-jwt.txt b/licenses/license-io.quarkus-quarkus-smallrye-jwt.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-smallrye-openapi.txt b/licenses/license-io.quarkus-quarkus-smallrye-openapi.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-swagger-ui.txt b/licenses/license-io.quarkus-quarkus-swagger-ui.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-vertx-http-dev-console-runtime-spi.txt b/licenses/license-io.quarkus-quarkus-vertx-http-dev-console-runtime-spi.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-vertx-http.txt b/licenses/license-io.quarkus-quarkus-vertx-http.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus-quarkus-vertx.txt b/licenses/license-io.quarkus-quarkus-vertx.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus.arc-arc.txt b/licenses/license-io.quarkus.arc-arc.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.quarkus.security-quarkus-security.txt b/licenses/license-io.quarkus.security-quarkus-security.txt new file mode 100644 index 0000000..b67090c --- /dev/null +++ b/licenses/license-io.quarkus.security-quarkus-security.txt @@ -0,0 +1 @@ +License: {Name: The Apache Software License, Version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-io.sentry-sentry-jul.txt b/licenses/license-io.sentry-sentry-jul.txt new file mode 100644 index 0000000..8b444a4 --- /dev/null +++ b/licenses/license-io.sentry-sentry-jul.txt @@ -0,0 +1 @@ +License: {Name: MIT, URL: http://www.opensource.org/licenses/mit-license.php, Distribution: , Comments: , } \ No newline at end of file diff --git a/licenses/license-io.sentry-sentry.txt b/licenses/license-io.sentry-sentry.txt new file mode 100644 index 0000000..8b444a4 --- /dev/null +++ b/licenses/license-io.sentry-sentry.txt @@ -0,0 +1 @@ +License: {Name: MIT, URL: http://www.opensource.org/licenses/mit-license.php, Distribution: , Comments: , } \ No newline at end of file diff --git a/licenses/license-io.smallrye-smallrye-context-propagation-api.txt b/licenses/license-io.smallrye-smallrye-context-propagation-api.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye-smallrye-context-propagation-jta.txt b/licenses/license-io.smallrye-smallrye-context-propagation-jta.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye-smallrye-context-propagation-storage.txt b/licenses/license-io.smallrye-smallrye-context-propagation-storage.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye-smallrye-context-propagation.txt b/licenses/license-io.smallrye-smallrye-context-propagation.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye-smallrye-fault-tolerance-vertx.txt b/licenses/license-io.smallrye-smallrye-fault-tolerance-vertx.txt new file mode 100644 index 0000000..71d5e8a --- /dev/null +++ b/licenses/license-io.smallrye-smallrye-fault-tolerance-vertx.txt @@ -0,0 +1,15 @@ + + ~ Copyright 2021 Red Hat, Inc. + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + \ No newline at end of file diff --git a/licenses/license-io.smallrye-smallrye-jwt-build.txt b/licenses/license-io.smallrye-smallrye-jwt-build.txt new file mode 100644 index 0000000..cab52e0 --- /dev/null +++ b/licenses/license-io.smallrye-smallrye-jwt-build.txt @@ -0,0 +1,15 @@ + + ~ Copyright 2020 Red Hat, Inc. + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + \ No newline at end of file diff --git a/licenses/license-io.smallrye-smallrye-jwt-common.txt b/licenses/license-io.smallrye-smallrye-jwt-common.txt new file mode 100644 index 0000000..cab52e0 --- /dev/null +++ b/licenses/license-io.smallrye-smallrye-jwt-common.txt @@ -0,0 +1,15 @@ + + ~ Copyright 2020 Red Hat, Inc. + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + \ No newline at end of file diff --git a/licenses/license-io.smallrye-smallrye-jwt.txt b/licenses/license-io.smallrye-smallrye-jwt.txt new file mode 100644 index 0000000..8f70178 --- /dev/null +++ b/licenses/license-io.smallrye-smallrye-jwt.txt @@ -0,0 +1,15 @@ + + ~ Copyright 2017 Red Hat, Inc. + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + \ No newline at end of file diff --git a/licenses/license-io.smallrye-smallrye-open-api-core.txt b/licenses/license-io.smallrye-smallrye-open-api-core.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.common-smallrye-common-annotation.txt b/licenses/license-io.smallrye.common-smallrye-common-annotation.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.common-smallrye-common-classloader.txt b/licenses/license-io.smallrye.common-smallrye-common-classloader.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.common-smallrye-common-constraint.txt b/licenses/license-io.smallrye.common-smallrye-common-constraint.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.common-smallrye-common-expression.txt b/licenses/license-io.smallrye.common-smallrye-common-expression.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.common-smallrye-common-function.txt b/licenses/license-io.smallrye.common-smallrye-common-function.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.common-smallrye-common-io.txt b/licenses/license-io.smallrye.common-smallrye-common-io.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.config-smallrye-config-common.txt b/licenses/license-io.smallrye.config-smallrye-config-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.config-smallrye-config-core.txt b/licenses/license-io.smallrye.config-smallrye-config-core.txt new file mode 100644 index 0000000..8f70178 --- /dev/null +++ b/licenses/license-io.smallrye.config-smallrye-config-core.txt @@ -0,0 +1,15 @@ + + ~ Copyright 2017 Red Hat, Inc. + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + \ No newline at end of file diff --git a/licenses/license-io.smallrye.config-smallrye-config-source-yaml.txt b/licenses/license-io.smallrye.config-smallrye-config-source-yaml.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.config-smallrye-config-validator.txt b/licenses/license-io.smallrye.config-smallrye-config-validator.txt new file mode 100644 index 0000000..0d2f51b --- /dev/null +++ b/licenses/license-io.smallrye.config-smallrye-config-validator.txt @@ -0,0 +1,15 @@ + + ~ Copyright 2021 Red Hat, Inc. + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + \ No newline at end of file diff --git a/licenses/license-io.smallrye.config-smallrye-config.txt b/licenses/license-io.smallrye.config-smallrye-config.txt new file mode 100644 index 0000000..cab52e0 --- /dev/null +++ b/licenses/license-io.smallrye.config-smallrye-config.txt @@ -0,0 +1,15 @@ + + ~ Copyright 2020 Red Hat, Inc. + ~ + ~ Licensed under the Apache License, Version 2.0 (the "License"); + ~ you may not use this file except in compliance with the License. + ~ You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, software + ~ distributed under the License is distributed on an "AS IS" BASIS, + ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + ~ See the License for the specific language governing permissions and + ~ limitations under the License. + \ No newline at end of file diff --git a/licenses/license-io.smallrye.reactive-mutiny-smallrye-context-propagation.txt b/licenses/license-io.smallrye.reactive-mutiny-smallrye-context-propagation.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-mutiny.txt b/licenses/license-io.smallrye.reactive-mutiny.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-auth-common.txt b/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-auth-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-bridge-common.txt b/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-bridge-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-core.txt b/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-core.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-redis-client.txt b/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-redis-client.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-runtime.txt b/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-runtime.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-web-common.txt b/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-web-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-web.txt b/licenses/license-io.smallrye.reactive-smallrye-mutiny-vertx-web.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-reactive-converter-api.txt b/licenses/license-io.smallrye.reactive-smallrye-reactive-converter-api.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-smallrye-reactive-converter-mutiny.txt b/licenses/license-io.smallrye.reactive-smallrye-reactive-converter-mutiny.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.smallrye.reactive-vertx-mutiny-generator.txt b/licenses/license-io.smallrye.reactive-vertx-mutiny-generator.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.vertx-vertx-auth-common.txt b/licenses/license-io.vertx-vertx-auth-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.vertx-vertx-bridge-common.txt b/licenses/license-io.vertx-vertx-bridge-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.vertx-vertx-codegen.txt b/licenses/license-io.vertx-vertx-codegen.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.vertx-vertx-core.txt b/licenses/license-io.vertx-vertx-core.txt new file mode 100644 index 0000000..a1f3ee3 --- /dev/null +++ b/licenses/license-io.vertx-vertx-core.txt @@ -0,0 +1,2 @@ +License: {Name: The Apache Software License, Version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: repo, Comments: , } +License: {Name: Eclipse Public License - v 2.0, URL: http://www.eclipse.org/legal/epl-v20.html, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-io.vertx-vertx-redis-client.txt b/licenses/license-io.vertx-vertx-redis-client.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.vertx-vertx-web-common.txt b/licenses/license-io.vertx-vertx-web-common.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-io.vertx-vertx-web.txt b/licenses/license-io.vertx-vertx-web.txt new file mode 100644 index 0000000..a1f3ee3 --- /dev/null +++ b/licenses/license-io.vertx-vertx-web.txt @@ -0,0 +1,2 @@ +License: {Name: The Apache Software License, Version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: repo, Comments: , } +License: {Name: Eclipse Public License - v 2.0, URL: http://www.eclipse.org/legal/epl-v20.html, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-jakarta.annotation-jakarta.annotation-api.txt b/licenses/license-jakarta.annotation-jakarta.annotation-api.txt new file mode 100644 index 0000000..5de3d1b --- /dev/null +++ b/licenses/license-jakarta.annotation-jakarta.annotation-api.txt @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + + "Contributor" means any person or entity that Distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions Distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the Program + in a commercial product offering. The obligations in this section do not + apply to any claims or Losses relating to any actual or alleged + intellectual property infringement. In order to qualify, an Indemnified + Contributor must: a) promptly notify the Commercial Contributor in + writing of such claim, and b) allow the Commercial Contributor to control, + and cooperate with the Commercial Contributor in, the defense and any + related settlement negotiations. The Indemnified Contributor may + participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those performance + claims and warranties, and if a court requires any other Contributor to + pay any damages as a result, the Commercial Contributor must pay + those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR + IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR + PURPOSE. Each Recipient is solely responsible for determining the + appropriateness of using and distributing the Program and assumes all + risks associated with its exercise of rights under this Agreement, + including but not limited to the risks and costs of program errors, + compliance with applicable laws, damage to or loss of data, programs + or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS + SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST + PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that the + Program itself (excluding combinations of the Program with other software + or hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it + fails to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of + time after becoming aware of such noncompliance. If all Recipient's + rights under this Agreement terminate, Recipient agrees to cease use + and distribution of the Program as soon as reasonably practicable. + However, Recipient's obligations under this Agreement and any licenses + granted by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a distinguishing + version number. The Program (including Contributions) may always be + Distributed subject to the version of the Agreement under which it was + received. In addition, after a new version of the Agreement is published, + Contributor may elect to Distribute the Program (including its + Contributions) under the new version. + + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient + receives no rights or licenses to the intellectual property of any + Contributor under this Agreement, whether expressly, by implication, + estoppel or otherwise. All rights in the Program not expressly granted + under this Agreement are reserved. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public License is + intended to guarantee your freedom to share and change free software--to + make sure the software is free for all its users. This General Public + License applies to most of the Free Software Foundation's software and + to any other program whose authors commit to using it. (Some other Free + Software Foundation software is covered by the GNU Library General + Public License instead.) You can apply it to your programs, too. + + When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this + service if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether gratis + or for a fee, you must give the recipients all the rights that you have. + You must make sure that they, too, receive or can get the source code. + And you must show them these terms so they know their rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program + proprietary. To prevent this, we have made it clear that any patent must + be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed under + the terms of this General Public License. The "Program", below, refers + to any such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: that is + to say, a work containing the Program or a portion of it, either + verbatim or with modifications and/or translated into another language. + (Hereinafter, translation is included without limitation in the term + "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is + covered only if its contents constitute a work based on the Program + (independent of having been made by running the Program). Whether that + is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion of + it, thus forming a work based on the Program, and copy and distribute + such modifications or work under the terms of Section 1 above, provided + that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this License. + (Exception: if the Program itself is interactive but does not + normally print such an announcement, your work based on the Program + is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Program, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt otherwise + to copy, modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will + not have their licenses terminated so long as such parties remain in + full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and all + its terms and conditions for copying, distributing or modifying the + Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License may + add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted by the + Free Software Foundation, write to the Free Software Foundation; we + sometimes make exceptions for this. Our decision will be guided by the + two goals of preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the commands + you use may be called something other than `show w' and `show c'; they + could even be mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications + with the library. If this is what you want to do, use the GNU Library + General Public License instead of this License. + +--- + +## CLASSPATH EXCEPTION + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License version 2 cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from or + based on this library. If you modify this library, you may extend this + exception to your version of the library, but you are not obligated to + do so. If you do not wish to do so, delete this exception statement + from your version. diff --git a/licenses/license-jakarta.el-jakarta.el-api.txt b/licenses/license-jakarta.el-jakarta.el-api.txt new file mode 100644 index 0000000..5de3d1b --- /dev/null +++ b/licenses/license-jakarta.el-jakarta.el-api.txt @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + + "Contributor" means any person or entity that Distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions Distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the Program + in a commercial product offering. The obligations in this section do not + apply to any claims or Losses relating to any actual or alleged + intellectual property infringement. In order to qualify, an Indemnified + Contributor must: a) promptly notify the Commercial Contributor in + writing of such claim, and b) allow the Commercial Contributor to control, + and cooperate with the Commercial Contributor in, the defense and any + related settlement negotiations. The Indemnified Contributor may + participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those performance + claims and warranties, and if a court requires any other Contributor to + pay any damages as a result, the Commercial Contributor must pay + those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR + IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR + PURPOSE. Each Recipient is solely responsible for determining the + appropriateness of using and distributing the Program and assumes all + risks associated with its exercise of rights under this Agreement, + including but not limited to the risks and costs of program errors, + compliance with applicable laws, damage to or loss of data, programs + or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS + SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST + PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that the + Program itself (excluding combinations of the Program with other software + or hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it + fails to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of + time after becoming aware of such noncompliance. If all Recipient's + rights under this Agreement terminate, Recipient agrees to cease use + and distribution of the Program as soon as reasonably practicable. + However, Recipient's obligations under this Agreement and any licenses + granted by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a distinguishing + version number. The Program (including Contributions) may always be + Distributed subject to the version of the Agreement under which it was + received. In addition, after a new version of the Agreement is published, + Contributor may elect to Distribute the Program (including its + Contributions) under the new version. + + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient + receives no rights or licenses to the intellectual property of any + Contributor under this Agreement, whether expressly, by implication, + estoppel or otherwise. All rights in the Program not expressly granted + under this Agreement are reserved. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public License is + intended to guarantee your freedom to share and change free software--to + make sure the software is free for all its users. This General Public + License applies to most of the Free Software Foundation's software and + to any other program whose authors commit to using it. (Some other Free + Software Foundation software is covered by the GNU Library General + Public License instead.) You can apply it to your programs, too. + + When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this + service if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether gratis + or for a fee, you must give the recipients all the rights that you have. + You must make sure that they, too, receive or can get the source code. + And you must show them these terms so they know their rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program + proprietary. To prevent this, we have made it clear that any patent must + be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed under + the terms of this General Public License. The "Program", below, refers + to any such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: that is + to say, a work containing the Program or a portion of it, either + verbatim or with modifications and/or translated into another language. + (Hereinafter, translation is included without limitation in the term + "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is + covered only if its contents constitute a work based on the Program + (independent of having been made by running the Program). Whether that + is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion of + it, thus forming a work based on the Program, and copy and distribute + such modifications or work under the terms of Section 1 above, provided + that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this License. + (Exception: if the Program itself is interactive but does not + normally print such an announcement, your work based on the Program + is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Program, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt otherwise + to copy, modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will + not have their licenses terminated so long as such parties remain in + full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and all + its terms and conditions for copying, distributing or modifying the + Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License may + add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted by the + Free Software Foundation, write to the Free Software Foundation; we + sometimes make exceptions for this. Our decision will be guided by the + two goals of preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the commands + you use may be called something other than `show w' and `show c'; they + could even be mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications + with the library. If this is what you want to do, use the GNU Library + General Public License instead of this License. + +--- + +## CLASSPATH EXCEPTION + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License version 2 cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from or + based on this library. If you modify this library, you may extend this + exception to your version of the library, but you are not obligated to + do so. If you do not wish to do so, delete this exception statement + from your version. diff --git a/licenses/license-jakarta.enterprise-jakarta.enterprise.cdi-api.txt b/licenses/license-jakarta.enterprise-jakarta.enterprise.cdi-api.txt new file mode 100644 index 0000000..9006f1a --- /dev/null +++ b/licenses/license-jakarta.enterprise-jakarta.enterprise.cdi-api.txt @@ -0,0 +1 @@ +https://repository.jboss.org/licenses/apache-2.0.txt \ No newline at end of file diff --git a/licenses/license-jakarta.inject-jakarta.inject-api.txt b/licenses/license-jakarta.inject-jakarta.inject-api.txt new file mode 100644 index 0000000..b67090c --- /dev/null +++ b/licenses/license-jakarta.inject-jakarta.inject-api.txt @@ -0,0 +1 @@ +License: {Name: The Apache Software License, Version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-jakarta.interceptor-jakarta.interceptor-api.txt b/licenses/license-jakarta.interceptor-jakarta.interceptor-api.txt new file mode 100644 index 0000000..5de3d1b --- /dev/null +++ b/licenses/license-jakarta.interceptor-jakarta.interceptor-api.txt @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + + "Contributor" means any person or entity that Distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions Distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the Program + in a commercial product offering. The obligations in this section do not + apply to any claims or Losses relating to any actual or alleged + intellectual property infringement. In order to qualify, an Indemnified + Contributor must: a) promptly notify the Commercial Contributor in + writing of such claim, and b) allow the Commercial Contributor to control, + and cooperate with the Commercial Contributor in, the defense and any + related settlement negotiations. The Indemnified Contributor may + participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those performance + claims and warranties, and if a court requires any other Contributor to + pay any damages as a result, the Commercial Contributor must pay + those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR + IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR + PURPOSE. Each Recipient is solely responsible for determining the + appropriateness of using and distributing the Program and assumes all + risks associated with its exercise of rights under this Agreement, + including but not limited to the risks and costs of program errors, + compliance with applicable laws, damage to or loss of data, programs + or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS + SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST + PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that the + Program itself (excluding combinations of the Program with other software + or hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it + fails to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of + time after becoming aware of such noncompliance. If all Recipient's + rights under this Agreement terminate, Recipient agrees to cease use + and distribution of the Program as soon as reasonably practicable. + However, Recipient's obligations under this Agreement and any licenses + granted by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a distinguishing + version number. The Program (including Contributions) may always be + Distributed subject to the version of the Agreement under which it was + received. In addition, after a new version of the Agreement is published, + Contributor may elect to Distribute the Program (including its + Contributions) under the new version. + + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient + receives no rights or licenses to the intellectual property of any + Contributor under this Agreement, whether expressly, by implication, + estoppel or otherwise. All rights in the Program not expressly granted + under this Agreement are reserved. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public License is + intended to guarantee your freedom to share and change free software--to + make sure the software is free for all its users. This General Public + License applies to most of the Free Software Foundation's software and + to any other program whose authors commit to using it. (Some other Free + Software Foundation software is covered by the GNU Library General + Public License instead.) You can apply it to your programs, too. + + When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this + service if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether gratis + or for a fee, you must give the recipients all the rights that you have. + You must make sure that they, too, receive or can get the source code. + And you must show them these terms so they know their rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program + proprietary. To prevent this, we have made it clear that any patent must + be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed under + the terms of this General Public License. The "Program", below, refers + to any such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: that is + to say, a work containing the Program or a portion of it, either + verbatim or with modifications and/or translated into another language. + (Hereinafter, translation is included without limitation in the term + "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is + covered only if its contents constitute a work based on the Program + (independent of having been made by running the Program). Whether that + is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion of + it, thus forming a work based on the Program, and copy and distribute + such modifications or work under the terms of Section 1 above, provided + that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this License. + (Exception: if the Program itself is interactive but does not + normally print such an announcement, your work based on the Program + is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Program, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt otherwise + to copy, modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will + not have their licenses terminated so long as such parties remain in + full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and all + its terms and conditions for copying, distributing or modifying the + Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License may + add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted by the + Free Software Foundation, write to the Free Software Foundation; we + sometimes make exceptions for this. Our decision will be guided by the + two goals of preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the commands + you use may be called something other than `show w' and `show c'; they + could even be mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications + with the library. If this is what you want to do, use the GNU Library + General Public License instead of this License. + +--- + +## CLASSPATH EXCEPTION + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License version 2 cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from or + based on this library. If you modify this library, you may extend this + exception to your version of the library, but you are not obligated to + do so. If you do not wish to do so, delete this exception statement + from your version. diff --git a/licenses/license-jakarta.persistence-jakarta.persistence-api.txt b/licenses/license-jakarta.persistence-jakarta.persistence-api.txt new file mode 100644 index 0000000..93c53ca --- /dev/null +++ b/licenses/license-jakarta.persistence-jakarta.persistence-api.txt @@ -0,0 +1 @@ +http://www.eclipse.org/legal/epl-2.0, http://www.eclipse.org/org/documents/edl-v10.php \ No newline at end of file diff --git a/licenses/license-jakarta.transaction-jakarta.transaction-api.txt b/licenses/license-jakarta.transaction-jakarta.transaction-api.txt new file mode 100644 index 0000000..8f68590 --- /dev/null +++ b/licenses/license-jakarta.transaction-jakarta.transaction-api.txt @@ -0,0 +1 @@ +http://www.eclipse.org/legal/epl-2.0, https://www.gnu.org/software/classpath/license.html \ No newline at end of file diff --git a/licenses/license-jakarta.validation-jakarta.validation-api.txt b/licenses/license-jakarta.validation-jakarta.validation-api.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-jakarta.validation-jakarta.validation-api.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-javax.servlet-javax.servlet-api.txt b/licenses/license-javax.servlet-javax.servlet-api.txt new file mode 100644 index 0000000..a0ccc93 --- /dev/null +++ b/licenses/license-javax.servlet-javax.servlet-api.txt @@ -0,0 +1,263 @@ +COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 + +1. Definitions. + + 1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications. + + 1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. + + 1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. + + 1.4. Executable. means the Covered Software in any form other than Source Code. + + 1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License. + + 1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. + + 1.7. License. means this document. + + 1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. + + 1.9. Modifications. means the Source Code and Executable form of any of the following: + + A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; + + B. Any new file that contains any part of the Original Software or previous Modification; or + + C. Any new file that is contributed or otherwise made available under the terms of this License. + + 1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License. + + 1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. + + 1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. + + 1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. + +2. License Grants. + + 2.1. The Initial Developer Grant. + + Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: + + (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). + + (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. + + 2.2. Contributor Grant. + + Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: + + (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). + + (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. + + (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. + +3. Distribution Obligations. + + 3.1. Availability of Source Code. + Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. + + 3.2. Modifications. + The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. + + 3.3. Required Notices. + You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. + + 3.4. Application of Additional Terms. + You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. + + 3.5. Distribution of Executable Versions. + You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. + + 3.6. Larger Works. + You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. + +4. Versions of the License. + + 4.1. New Versions. + Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. + + 4.2. Effect of New Versions. + You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. + + 4.3. Modified Versions. + When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. + +5. DISCLAIMER OF WARRANTY. + + COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +6. TERMINATION. + + 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. + + 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. + + 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. + +7. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +8. U.S. GOVERNMENT END USERS. + + The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. + +9. MISCELLANEOUS. + + This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. + +10. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. + + NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) + + The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. + + +The GNU General Public License (GPL) Version 2, June 1991 + + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + + c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + + Copyright (C) + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. + + +"CLASSPATH" EXCEPTION TO THE GPL VERSION 2 + +Certain source files distributed by Sun Microsystems, Inc. are subject to the following clarification and special exception to the GPL Version 2, but only where Sun has expressly included in the particular source file's header the words + +"Sun designates this particular file as subject to the "Classpath" exception as provided by Sun in the License file that accompanied this code." + +Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination. + +As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.? An independent module is a module which is not derived from or based on this library.? If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so.? If you do not wish to do so, delete this exception statement from your version. diff --git a/licenses/license-net.bytebuddy-byte-buddy.txt b/licenses/license-net.bytebuddy-byte-buddy.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.apache.commons-commons-lang3.txt b/licenses/license-org.apache.commons-commons-lang3.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.apache.commons-commons-lang3.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.apache.httpcomponents-httpasyncclient.txt b/licenses/license-org.apache.httpcomponents-httpasyncclient.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.apache.httpcomponents-httpasyncclient.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.apache.httpcomponents-httpclient.txt b/licenses/license-org.apache.httpcomponents-httpclient.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.apache.httpcomponents-httpclient.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.apache.httpcomponents-httpcore-nio.txt b/licenses/license-org.apache.httpcomponents-httpcore-nio.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.apache.httpcomponents-httpcore-nio.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.apache.httpcomponents-httpcore.txt b/licenses/license-org.apache.httpcomponents-httpcore.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.apache.httpcomponents-httpcore.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.apache.james-apache-mime4j-core.txt b/licenses/license-org.apache.james-apache-mime4j-core.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.apache.james-apache-mime4j-core.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.apache.james-apache-mime4j-dom.txt b/licenses/license-org.apache.james-apache-mime4j-dom.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.apache.james-apache-mime4j-dom.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.apache.james-apache-mime4j-storage.txt b/licenses/license-org.apache.james-apache-mime4j-storage.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.apache.james-apache-mime4j-storage.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.bitbucket.b-c-jose4j.txt b/licenses/license-org.bitbucket.b-c-jose4j.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-org.bitbucket.b-c-jose4j.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-org.checkerframework-checker-qual.txt b/licenses/license-org.checkerframework-checker-qual.txt new file mode 100644 index 0000000..cef1c37 --- /dev/null +++ b/licenses/license-org.checkerframework-checker-qual.txt @@ -0,0 +1 @@ +License: {Name: The MIT License, URL: http://opensource.org/licenses/MIT, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-org.eclipse.microprofile.config-microprofile-config-api.txt b/licenses/license-org.eclipse.microprofile.config-microprofile-config-api.txt new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/licenses/license-org.eclipse.microprofile.config-microprofile-config-api.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.eclipse.microprofile.context-propagation-microprofile-context-propagation-api.txt b/licenses/license-org.eclipse.microprofile.context-propagation-microprofile-context-propagation-api.txt new file mode 100644 index 0000000..ed25074 --- /dev/null +++ b/licenses/license-org.eclipse.microprofile.context-propagation-microprofile-context-propagation-api.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/licenses/license-org.eclipse.microprofile.jwt-microprofile-jwt-auth-api.txt b/licenses/license-org.eclipse.microprofile.jwt-microprofile-jwt-auth-api.txt new file mode 100644 index 0000000..89bbef3 --- /dev/null +++ b/licenses/license-org.eclipse.microprofile.jwt-microprofile-jwt-auth-api.txt @@ -0,0 +1,13 @@ + + Licensed under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. diff --git a/licenses/license-org.eclipse.microprofile.openapi-microprofile-openapi-api.txt b/licenses/license-org.eclipse.microprofile.openapi-microprofile-openapi-api.txt new file mode 100644 index 0000000..89bbef3 --- /dev/null +++ b/licenses/license-org.eclipse.microprofile.openapi-microprofile-openapi-api.txt @@ -0,0 +1,13 @@ + + Licensed under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. diff --git a/licenses/license-org.eclipse.microprofile.rest.client-microprofile-rest-client-api.txt b/licenses/license-org.eclipse.microprofile.rest.client-microprofile-rest-client-api.txt new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/licenses/license-org.eclipse.microprofile.rest.client-microprofile-rest-client-api.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.flywaydb-flyway-core.txt b/licenses/license-org.flywaydb-flyway-core.txt new file mode 100644 index 0000000..eea0d66 --- /dev/null +++ b/licenses/license-org.flywaydb-flyway-core.txt @@ -0,0 +1,16 @@ + + + Copyright (C) Red Gate Software Ltd 2010-2021 + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/licenses/license-org.glassfish-jakarta.el.txt b/licenses/license-org.glassfish-jakarta.el.txt new file mode 100644 index 0000000..5de3d1b --- /dev/null +++ b/licenses/license-org.glassfish-jakarta.el.txt @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + + "Contributor" means any person or entity that Distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions Distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the Program + in a commercial product offering. The obligations in this section do not + apply to any claims or Losses relating to any actual or alleged + intellectual property infringement. In order to qualify, an Indemnified + Contributor must: a) promptly notify the Commercial Contributor in + writing of such claim, and b) allow the Commercial Contributor to control, + and cooperate with the Commercial Contributor in, the defense and any + related settlement negotiations. The Indemnified Contributor may + participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those performance + claims and warranties, and if a court requires any other Contributor to + pay any damages as a result, the Commercial Contributor must pay + those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR + IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR + PURPOSE. Each Recipient is solely responsible for determining the + appropriateness of using and distributing the Program and assumes all + risks associated with its exercise of rights under this Agreement, + including but not limited to the risks and costs of program errors, + compliance with applicable laws, damage to or loss of data, programs + or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS + SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST + PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that the + Program itself (excluding combinations of the Program with other software + or hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it + fails to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of + time after becoming aware of such noncompliance. If all Recipient's + rights under this Agreement terminate, Recipient agrees to cease use + and distribution of the Program as soon as reasonably practicable. + However, Recipient's obligations under this Agreement and any licenses + granted by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a distinguishing + version number. The Program (including Contributions) may always be + Distributed subject to the version of the Agreement under which it was + received. In addition, after a new version of the Agreement is published, + Contributor may elect to Distribute the Program (including its + Contributions) under the new version. + + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient + receives no rights or licenses to the intellectual property of any + Contributor under this Agreement, whether expressly, by implication, + estoppel or otherwise. All rights in the Program not expressly granted + under this Agreement are reserved. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public License is + intended to guarantee your freedom to share and change free software--to + make sure the software is free for all its users. This General Public + License applies to most of the Free Software Foundation's software and + to any other program whose authors commit to using it. (Some other Free + Software Foundation software is covered by the GNU Library General + Public License instead.) You can apply it to your programs, too. + + When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this + service if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether gratis + or for a fee, you must give the recipients all the rights that you have. + You must make sure that they, too, receive or can get the source code. + And you must show them these terms so they know their rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program + proprietary. To prevent this, we have made it clear that any patent must + be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed under + the terms of this General Public License. The "Program", below, refers + to any such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: that is + to say, a work containing the Program or a portion of it, either + verbatim or with modifications and/or translated into another language. + (Hereinafter, translation is included without limitation in the term + "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is + covered only if its contents constitute a work based on the Program + (independent of having been made by running the Program). Whether that + is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion of + it, thus forming a work based on the Program, and copy and distribute + such modifications or work under the terms of Section 1 above, provided + that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this License. + (Exception: if the Program itself is interactive but does not + normally print such an announcement, your work based on the Program + is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Program, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt otherwise + to copy, modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will + not have their licenses terminated so long as such parties remain in + full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and all + its terms and conditions for copying, distributing or modifying the + Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License may + add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted by the + Free Software Foundation, write to the Free Software Foundation; we + sometimes make exceptions for this. Our decision will be guided by the + two goals of preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the commands + you use may be called something other than `show w' and `show c'; they + could even be mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications + with the library. If this is what you want to do, use the GNU Library + General Public License instead of this License. + +--- + +## CLASSPATH EXCEPTION + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License version 2 cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from or + based on this library. If you modify this library, you may extend this + exception to your version of the library, but you are not obligated to + do so. If you do not wish to do so, delete this exception statement + from your version. diff --git a/licenses/license-org.glassfish-jakarta.json.txt b/licenses/license-org.glassfish-jakarta.json.txt new file mode 100644 index 0000000..5de3d1b --- /dev/null +++ b/licenses/license-org.glassfish-jakarta.json.txt @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + + "Contributor" means any person or entity that Distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions Distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the Program + in a commercial product offering. The obligations in this section do not + apply to any claims or Losses relating to any actual or alleged + intellectual property infringement. In order to qualify, an Indemnified + Contributor must: a) promptly notify the Commercial Contributor in + writing of such claim, and b) allow the Commercial Contributor to control, + and cooperate with the Commercial Contributor in, the defense and any + related settlement negotiations. The Indemnified Contributor may + participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those performance + claims and warranties, and if a court requires any other Contributor to + pay any damages as a result, the Commercial Contributor must pay + those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR + IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR + PURPOSE. Each Recipient is solely responsible for determining the + appropriateness of using and distributing the Program and assumes all + risks associated with its exercise of rights under this Agreement, + including but not limited to the risks and costs of program errors, + compliance with applicable laws, damage to or loss of data, programs + or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS + SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST + PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that the + Program itself (excluding combinations of the Program with other software + or hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it + fails to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of + time after becoming aware of such noncompliance. If all Recipient's + rights under this Agreement terminate, Recipient agrees to cease use + and distribution of the Program as soon as reasonably practicable. + However, Recipient's obligations under this Agreement and any licenses + granted by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a distinguishing + version number. The Program (including Contributions) may always be + Distributed subject to the version of the Agreement under which it was + received. In addition, after a new version of the Agreement is published, + Contributor may elect to Distribute the Program (including its + Contributions) under the new version. + + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient + receives no rights or licenses to the intellectual property of any + Contributor under this Agreement, whether expressly, by implication, + estoppel or otherwise. All rights in the Program not expressly granted + under this Agreement are reserved. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public License is + intended to guarantee your freedom to share and change free software--to + make sure the software is free for all its users. This General Public + License applies to most of the Free Software Foundation's software and + to any other program whose authors commit to using it. (Some other Free + Software Foundation software is covered by the GNU Library General + Public License instead.) You can apply it to your programs, too. + + When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this + service if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether gratis + or for a fee, you must give the recipients all the rights that you have. + You must make sure that they, too, receive or can get the source code. + And you must show them these terms so they know their rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program + proprietary. To prevent this, we have made it clear that any patent must + be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed under + the terms of this General Public License. The "Program", below, refers + to any such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: that is + to say, a work containing the Program or a portion of it, either + verbatim or with modifications and/or translated into another language. + (Hereinafter, translation is included without limitation in the term + "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is + covered only if its contents constitute a work based on the Program + (independent of having been made by running the Program). Whether that + is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion of + it, thus forming a work based on the Program, and copy and distribute + such modifications or work under the terms of Section 1 above, provided + that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this License. + (Exception: if the Program itself is interactive but does not + normally print such an announcement, your work based on the Program + is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Program, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt otherwise + to copy, modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will + not have their licenses terminated so long as such parties remain in + full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and all + its terms and conditions for copying, distributing or modifying the + Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License may + add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted by the + Free Software Foundation, write to the Free Software Foundation; we + sometimes make exceptions for this. Our decision will be guided by the + two goals of preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the commands + you use may be called something other than `show w' and `show c'; they + could even be mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications + with the library. If this is what you want to do, use the GNU Library + General Public License instead of this License. + +--- + +## CLASSPATH EXCEPTION + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License version 2 cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from or + based on this library. If you modify this library, you may extend this + exception to your version of the library, but you are not obligated to + do so. If you do not wish to do so, delete this exception statement + from your version. diff --git a/licenses/license-org.glassfish.jaxb-jaxb-runtime.txt b/licenses/license-org.glassfish.jaxb-jaxb-runtime.txt new file mode 100644 index 0000000..da1c1ce --- /dev/null +++ b/licenses/license-org.glassfish.jaxb-jaxb-runtime.txt @@ -0,0 +1,28 @@ +Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Eclipse Foundation, Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/licenses/license-org.glassfish.jaxb-txw2.txt b/licenses/license-org.glassfish.jaxb-txw2.txt new file mode 100644 index 0000000..da1c1ce --- /dev/null +++ b/licenses/license-org.glassfish.jaxb-txw2.txt @@ -0,0 +1,28 @@ +Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Eclipse Foundation, Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/licenses/license-org.graalvm.sdk-graal-sdk.txt b/licenses/license-org.graalvm.sdk-graal-sdk.txt new file mode 100644 index 0000000..99c8028 --- /dev/null +++ b/licenses/license-org.graalvm.sdk-graal-sdk.txt @@ -0,0 +1 @@ +License: {Name: Universal Permissive License, Version 1.0, URL: http://opensource.org/licenses/UPL, Distribution: , Comments: , } \ No newline at end of file diff --git a/licenses/license-org.hibernate-hibernate-core.txt b/licenses/license-org.hibernate-hibernate-core.txt new file mode 100644 index 0000000..c937eb1 --- /dev/null +++ b/licenses/license-org.hibernate-hibernate-core.txt @@ -0,0 +1 @@ +License: {Name: GNU Library General Public License v2.1 or later, URL: https://www.opensource.org/licenses/LGPL-2.1, Distribution: repo, Comments: See discussion at https://hibernate.org/community/license/ for more details., } \ No newline at end of file diff --git a/licenses/license-org.hibernate-hibernate-graalvm.txt b/licenses/license-org.hibernate-hibernate-graalvm.txt new file mode 100644 index 0000000..c937eb1 --- /dev/null +++ b/licenses/license-org.hibernate-hibernate-graalvm.txt @@ -0,0 +1 @@ +License: {Name: GNU Library General Public License v2.1 or later, URL: https://www.opensource.org/licenses/LGPL-2.1, Distribution: repo, Comments: See discussion at https://hibernate.org/community/license/ for more details., } \ No newline at end of file diff --git a/licenses/license-org.hibernate-quarkus-local-cache.txt b/licenses/license-org.hibernate-quarkus-local-cache.txt new file mode 100644 index 0000000..5b4f8e6 --- /dev/null +++ b/licenses/license-org.hibernate-quarkus-local-cache.txt @@ -0,0 +1 @@ +License: {Name: Apache License 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-org.hibernate.common-hibernate-commons-annotations.txt b/licenses/license-org.hibernate.common-hibernate-commons-annotations.txt new file mode 100644 index 0000000..d02738a --- /dev/null +++ b/licenses/license-org.hibernate.common-hibernate-commons-annotations.txt @@ -0,0 +1 @@ +License: {Name: GNU Library General Public License v2.1 or later, URL: http://www.opensource.org/licenses/LGPL-2.1, Distribution: repo, Comments: See discussion at http://hibernate.org/community/license/ for more details., } \ No newline at end of file diff --git a/licenses/license-org.hibernate.validator-hibernate-validator.txt b/licenses/license-org.hibernate.validator-hibernate-validator.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-org.hibernate.validator-hibernate-validator.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-org.jboss-jandex.txt b/licenses/license-org.jboss-jandex.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-org.jboss-jandex.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-org.jboss-jboss-transaction-spi.txt b/licenses/license-org.jboss-jboss-transaction-spi.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.logging-commons-logging-jboss-logging.txt b/licenses/license-org.jboss.logging-commons-logging-jboss-logging.txt new file mode 100644 index 0000000..36f8fe1 --- /dev/null +++ b/licenses/license-org.jboss.logging-commons-logging-jboss-logging.txt @@ -0,0 +1 @@ +License: {Name: Apache License 2.0, URL: http://repository.jboss.org/licenses/apache-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-org.jboss.logging-jboss-logging-annotations.txt b/licenses/license-org.jboss.logging-jboss-logging-annotations.txt new file mode 100644 index 0000000..7a4a3ea --- /dev/null +++ b/licenses/license-org.jboss.logging-jboss-logging-annotations.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. \ No newline at end of file diff --git a/licenses/license-org.jboss.logging-jboss-logging.txt b/licenses/license-org.jboss.logging-jboss-logging.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/licenses/license-org.jboss.logging-jboss-logging.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/licenses/license-org.jboss.logmanager-jboss-logmanager-embedded.txt b/licenses/license-org.jboss.logmanager-jboss-logmanager-embedded.txt new file mode 100644 index 0000000..36f8fe1 --- /dev/null +++ b/licenses/license-org.jboss.logmanager-jboss-logmanager-embedded.txt @@ -0,0 +1 @@ +License: {Name: Apache License 2.0, URL: http://repository.jboss.org/licenses/apache-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-org.jboss.narayana.jta-narayana-jta.txt b/licenses/license-org.jboss.narayana.jta-narayana-jta.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.narayana.jts-narayana-jts-integration.txt b/licenses/license-org.jboss.narayana.jts-narayana-jts-integration.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-cdi.txt b/licenses/license-org.jboss.resteasy-resteasy-cdi.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-client-api.txt b/licenses/license-org.jboss.resteasy-resteasy-client-api.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-client-microprofile-base.txt b/licenses/license-org.jboss.resteasy-resteasy-client-microprofile-base.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-client-microprofile.txt b/licenses/license-org.jboss.resteasy-resteasy-client-microprofile.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-client.txt b/licenses/license-org.jboss.resteasy-resteasy-client.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-core-spi.txt b/licenses/license-org.jboss.resteasy-resteasy-core-spi.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-core.txt b/licenses/license-org.jboss.resteasy-resteasy-core.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-jackson2-provider.txt b/licenses/license-org.jboss.resteasy-resteasy-jackson2-provider.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-jaxb-provider.txt b/licenses/license-org.jboss.resteasy-resteasy-jaxb-provider.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.resteasy-resteasy-multipart-provider.txt b/licenses/license-org.jboss.resteasy-resteasy-multipart-provider.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.jboss.slf4j-slf4j-jboss-logmanager.txt b/licenses/license-org.jboss.slf4j-slf4j-jboss-logmanager.txt new file mode 100644 index 0000000..36f8fe1 --- /dev/null +++ b/licenses/license-org.jboss.slf4j-slf4j-jboss-logmanager.txt @@ -0,0 +1 @@ +License: {Name: Apache License 2.0, URL: http://repository.jboss.org/licenses/apache-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-org.jboss.spec.javax.resource-jboss-connector-api-1.7-spec.txt b/licenses/license-org.jboss.spec.javax.resource-jboss-connector-api-1.7-spec.txt new file mode 100644 index 0000000..b40a0f4 --- /dev/null +++ b/licenses/license-org.jboss.spec.javax.resource-jboss-connector-api-1.7-spec.txt @@ -0,0 +1,347 @@ +The GNU General Public License (GPL) + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public License is intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. This General Public License applies to +most of the Free Software Foundation's software and to any other program whose +authors commit to using it. (Some other Free Software Foundation software is +covered by the GNU Library General Public License instead.) You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom to +distribute copies of free software (and charge for this service if you wish), +that you receive source code or can get it if you want it, that you can change +the software or use pieces of it in new free programs; and that you know you +can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny +you these rights or to ask you to surrender the rights. These restrictions +translate to certain responsibilities for you if you distribute copies of the +software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for +a fee, you must give the recipients all the rights that you have. You must +make sure that they, too, receive or can get the source code. And you must +show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, distribute +and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If the +software is modified by someone else and passed on, we want its recipients to +know that what they have is not the original, so that any problems introduced +by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that redistributors of a free program will +individually obtain patent licenses, in effect making the program proprietary. +To prevent this, we have made it clear that any patent must be licensed for +everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the terms of +this General Public License. The "Program", below, refers to any such program +or work, and a "work based on the Program" means either the Program or any +derivative work under copyright law: that is to say, a work containing the +Program or a portion of it, either verbatim or with modifications and/or +translated into another language. (Hereinafter, translation is included +without limitation in the term "modification".) Each licensee is addressed as +"you". + +Activities other than copying, distribution and modification are not covered by +this License; they are outside its scope. The act of running the Program is +not restricted, and the output from the Program is covered only if its contents +constitute a work based on the Program (independent of having been made by +running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as +you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this License +and to the absence of any warranty; and give any other recipients of the +Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may +at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus +forming a work based on the Program, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all of +these conditions: + + a) You must cause the modified files to carry prominent notices stating + that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in whole or + in part contains or is derived from the Program or any part thereof, to be + licensed as a whole at no charge to all third parties under the terms of + this License. + + c) If the modified program normally reads commands interactively when run, + you must cause it, when started running for such interactive use in the + most ordinary way, to print or display an announcement including an + appropriate copyright notice and a notice that there is no warranty (or + else, saying that you provide a warranty) and that users may redistribute + the program under these conditions, and telling the user how to view a copy + of this License. (Exception: if the Program itself is interactive but does + not normally print such an announcement, your work based on the Program is + not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Program, and can be reasonably +considered independent and separate works in themselves, then this License, and +its terms, do not apply to those sections when you distribute them as separate +works. But when you distribute the same sections as part of a whole which is a +work based on the Program, the distribution of the whole must be on the terms +of this License, whose permissions for other licensees extend to the entire +whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise the +right to control the distribution of derivative or collective works based on +the Program. + +In addition, mere aggregation of another work not based on the Program with the +Program (or with a work based on the Program) on a volume of a storage or +distribution medium does not bring the other work under the scope of this +License. + +3. You may copy and distribute the Program (or a work based on it, under +Section 2) in object code or executable form under the terms of Sections 1 and +2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source + code, which must be distributed under the terms of Sections 1 and 2 above + on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three years, to + give any third party, for a charge no more than your cost of physically + performing source distribution, a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed only + for noncommercial distribution and only if you received the program in + object code or executable form with such an offer, in accord with + Subsection b above.) + +The source code for a work means the preferred form of the work for making +modifications to it. For an executable work, complete source code means all +the source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and installation +of the executable. However, as a special exception, the source code +distributed need not include anything that is normally distributed (in either +source or binary form) with the major components (compiler, kernel, and so on) +of the operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the source +code from the same place counts as distribution of the source code, even though +third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as +expressly provided under this License. Any attempt otherwise to copy, modify, +sublicense or distribute the Program is void, and will automatically terminate +your rights under this License. However, parties who have received copies, or +rights, from you under this License will not have their licenses terminated so +long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. +However, nothing else grants you permission to modify or distribute the Program +or its derivative works. These actions are prohibited by law if you do not +accept this License. Therefore, by modifying or distributing the Program (or +any work based on the Program), you indicate your acceptance of this License to +do so, and all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), +the recipient automatically receives a license from the original licensor to +copy, distribute or modify the Program subject to these terms and conditions. +You may not impose any further restrictions on the recipients' exercise of the +rights granted herein. You are not responsible for enforcing compliance by +third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), conditions +are imposed on you (whether by court order, agreement or otherwise) that +contradict the conditions of this License, they do not excuse you from the +conditions of this License. If you cannot distribute so as to satisfy +simultaneously your obligations under this License and any other pertinent +obligations, then as a consequence you may not distribute the Program at all. +For example, if a patent license would not permit royalty-free redistribution +of the Program by all those who receive copies directly or indirectly through +you, then the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or +other property right claims or to contest validity of any such claims; this +section has the sole purpose of protecting the integrity of the free software +distribution system, which is implemented by public license practices. Many +people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose that +choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain +countries either by patents or by copyrighted interfaces, the original +copyright holder who places the Program under this License may add an explicit +geographical distribution limitation excluding those countries, so that +distribution is permitted only in or among countries not thus excluded. In +such case, this License incorporates the limitation as if written in the body +of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the +General Public License from time to time. Such new versions will be similar in +spirit to the present version, but may differ in detail to address new problems +or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any later +version", you have the option of following the terms and conditions either of +that version or of any later version published by the Free Software Foundation. +If the Program does not specify a version number of this License, you may +choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs +whose distribution conditions are different, write to the author to ask for +permission. For software which is copyrighted by the Free Software Foundation, +write to the Free Software Foundation; we sometimes make exceptions for this. +Our decision will be guided by the two goals of preserving the free status of +all derivatives of our free software and of promoting the sharing and reuse of +software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE +PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND +PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, +YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE +PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR +INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA +BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER +OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible +use to the public, the best way to achieve this is to make it free software +which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach +them to the start of each source file to most effectively convey the exclusion +of warranty; and each file should have at least the "copyright" line and a +pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + + Copyright (C) + + This program is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published by the Free + Software Foundation; either version 2 of the License, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., 59 + Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it +starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes + with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free + software, and you are welcome to redistribute it under certain conditions; + type 'show c' for details. + +The hypothetical commands 'show w' and 'show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may be +called something other than 'show w' and 'show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the program, if necessary. Here +is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + 'Gnomovision' (which makes passes at compilers) written by James Hacker. + + signature of Ty Coon, 1 April 1989 + + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General Public +License instead of this License. + + +"CLASSPATH" EXCEPTION TO THE GPL + +Certain source files distributed by Oracle America and/or its affiliates are +subject to the following clarification and special exception to the GPL, but +only where Oracle has expressly included in the particular source file's header +the words "Oracle designates this particular file as subject to the "Classpath" +exception as provided by Oracle in the LICENSE file that accompanied this code." + + Linking this library statically or dynamically with other modules is making + a combined work based on this library. Thus, the terms and conditions of + the GNU General Public License cover the whole combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent modules, + and to copy and distribute the resulting executable under terms of your + choice, provided that you also meet, for each linked independent module, + the terms and conditions of the license of that module. An independent + module is a module which is not derived from or based on this library. If + you modify this library, you may extend this exception to your version of + the library, but you are not obligated to do so. If you do not wish to do + so, delete this exception statement from your version. diff --git a/licenses/license-org.jboss.spec.javax.ws.rs-jboss-jaxrs-api-2.1-spec.txt b/licenses/license-org.jboss.spec.javax.ws.rs-jboss-jaxrs-api-2.1-spec.txt new file mode 100644 index 0000000..5de3d1b --- /dev/null +++ b/licenses/license-org.jboss.spec.javax.ws.rs-jboss-jaxrs-api-2.1-spec.txt @@ -0,0 +1,637 @@ +# Eclipse Public License - v 2.0 + + THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE + PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION + OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. + + 1. DEFINITIONS + + "Contribution" means: + + a) in the case of the initial Contributor, the initial content + Distributed under this Agreement, and + + b) in the case of each subsequent Contributor: + i) changes to the Program, and + ii) additions to the Program; + where such changes and/or additions to the Program originate from + and are Distributed by that particular Contributor. A Contribution + "originates" from a Contributor if it was added to the Program by + such Contributor itself or anyone acting on such Contributor's behalf. + Contributions do not include changes or additions to the Program that + are not Modified Works. + + "Contributor" means any person or entity that Distributes the Program. + + "Licensed Patents" mean patent claims licensable by a Contributor which + are necessarily infringed by the use or sale of its Contribution alone + or when combined with the Program. + + "Program" means the Contributions Distributed in accordance with this + Agreement. + + "Recipient" means anyone who receives the Program under this Agreement + or any Secondary License (as applicable), including Contributors. + + "Derivative Works" shall mean any work, whether in Source Code or other + form, that is based on (or derived from) the Program and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. + + "Modified Works" shall mean any work in Source Code or other form that + results from an addition to, deletion from, or modification of the + contents of the Program, including, for purposes of clarity any new file + in Source Code form that contains any contents of the Program. Modified + Works shall not include works that contain only declarations, + interfaces, types, classes, structures, or files of the Program solely + in each case in order to link to, bind by name, or subclass the Program + or Modified Works thereof. + + "Distribute" means the acts of a) distributing or b) making available + in any manner that enables the transfer of a copy. + + "Source Code" means the form of a Program preferred for making + modifications, including but not limited to software source code, + documentation source, and configuration files. + + "Secondary License" means either the GNU General Public License, + Version 2.0, or any later versions of that license, including any + exceptions or additional permissions as identified by the initial + Contributor. + + 2. GRANT OF RIGHTS + + a) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free copyright + license to reproduce, prepare Derivative Works of, publicly display, + publicly perform, Distribute and sublicense the Contribution of such + Contributor, if any, and such Derivative Works. + + b) Subject to the terms of this Agreement, each Contributor hereby + grants Recipient a non-exclusive, worldwide, royalty-free patent + license under Licensed Patents to make, use, sell, offer to sell, + import and otherwise transfer the Contribution of such Contributor, + if any, in Source Code or other form. This patent license shall + apply to the combination of the Contribution and the Program if, at + the time the Contribution is added by the Contributor, such addition + of the Contribution causes such combination to be covered by the + Licensed Patents. The patent license shall not apply to any other + combinations which include the Contribution. No hardware per se is + licensed hereunder. + + c) Recipient understands that although each Contributor grants the + licenses to its Contributions set forth herein, no assurances are + provided by any Contributor that the Program does not infringe the + patent or other intellectual property rights of any other entity. + Each Contributor disclaims any liability to Recipient for claims + brought by any other entity based on infringement of intellectual + property rights or otherwise. As a condition to exercising the + rights and licenses granted hereunder, each Recipient hereby + assumes sole responsibility to secure any other intellectual + property rights needed, if any. For example, if a third party + patent license is required to allow Recipient to Distribute the + Program, it is Recipient's responsibility to acquire that license + before distributing the Program. + + d) Each Contributor represents that to its knowledge it has + sufficient copyright rights in its Contribution, if any, to grant + the copyright license set forth in this Agreement. + + e) Notwithstanding the terms of any Secondary License, no + Contributor makes additional grants to any Recipient (other than + those set forth in this Agreement) as a result of such Recipient's + receipt of the Program under the terms of a Secondary License + (if permitted under the terms of Section 3). + + 3. REQUIREMENTS + + 3.1 If a Contributor Distributes the Program in any form, then: + + a) the Program must also be made available as Source Code, in + accordance with section 3.2, and the Contributor must accompany + the Program with a statement that the Source Code for the Program + is available under this Agreement, and informs Recipients how to + obtain it in a reasonable manner on or through a medium customarily + used for software exchange; and + + b) the Contributor may Distribute the Program under a license + different than this Agreement, provided that such license: + i) effectively disclaims on behalf of all other Contributors all + warranties and conditions, express and implied, including + warranties or conditions of title and non-infringement, and + implied warranties or conditions of merchantability and fitness + for a particular purpose; + + ii) effectively excludes on behalf of all other Contributors all + liability for damages, including direct, indirect, special, + incidental and consequential damages, such as lost profits; + + iii) does not attempt to limit or alter the recipients' rights + in the Source Code under section 3.2; and + + iv) requires any subsequent distribution of the Program by any + party to be under a license that satisfies the requirements + of this section 3. + + 3.2 When the Program is Distributed as Source Code: + + a) it must be made available under this Agreement, or if the + Program (i) is combined with other material in a separate file or + files made available under a Secondary License, and (ii) the initial + Contributor attached to the Source Code the notice described in + Exhibit A of this Agreement, then the Program may be made available + under the terms of such Secondary Licenses, and + + b) a copy of this Agreement must be included with each copy of + the Program. + + 3.3 Contributors may not remove or alter any copyright, patent, + trademark, attribution notices, disclaimers of warranty, or limitations + of liability ("notices") contained within the Program from any copy of + the Program which they Distribute, provided that Contributors may add + their own appropriate notices. + + 4. COMMERCIAL DISTRIBUTION + + Commercial distributors of software may accept certain responsibilities + with respect to end users, business partners and the like. While this + license is intended to facilitate the commercial use of the Program, + the Contributor who includes the Program in a commercial product + offering should do so in a manner which does not create potential + liability for other Contributors. Therefore, if a Contributor includes + the Program in a commercial product offering, such Contributor + ("Commercial Contributor") hereby agrees to defend and indemnify every + other Contributor ("Indemnified Contributor") against any losses, + damages and costs (collectively "Losses") arising from claims, lawsuits + and other legal actions brought by a third party against the Indemnified + Contributor to the extent caused by the acts or omissions of such + Commercial Contributor in connection with its distribution of the Program + in a commercial product offering. The obligations in this section do not + apply to any claims or Losses relating to any actual or alleged + intellectual property infringement. In order to qualify, an Indemnified + Contributor must: a) promptly notify the Commercial Contributor in + writing of such claim, and b) allow the Commercial Contributor to control, + and cooperate with the Commercial Contributor in, the defense and any + related settlement negotiations. The Indemnified Contributor may + participate in any such claim at its own expense. + + For example, a Contributor might include the Program in a commercial + product offering, Product X. That Contributor is then a Commercial + Contributor. If that Commercial Contributor then makes performance + claims, or offers warranties related to Product X, those performance + claims and warranties are such Commercial Contributor's responsibility + alone. Under this section, the Commercial Contributor would have to + defend claims against the other Contributors related to those performance + claims and warranties, and if a court requires any other Contributor to + pay any damages as a result, the Commercial Contributor must pay + those damages. + + 5. NO WARRANTY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, THE PROGRAM IS PROVIDED ON AN "AS IS" + BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR + IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF + TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR + PURPOSE. Each Recipient is solely responsible for determining the + appropriateness of using and distributing the Program and assumes all + risks associated with its exercise of rights under this Agreement, + including but not limited to the risks and costs of program errors, + compliance with applicable laws, damage to or loss of data, programs + or equipment, and unavailability or interruption of operations. + + 6. DISCLAIMER OF LIABILITY + + EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, AND TO THE EXTENT + PERMITTED BY APPLICABLE LAW, NEITHER RECIPIENT NOR ANY CONTRIBUTORS + SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST + PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE + EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGES. + + 7. GENERAL + + If any provision of this Agreement is invalid or unenforceable under + applicable law, it shall not affect the validity or enforceability of + the remainder of the terms of this Agreement, and without further + action by the parties hereto, such provision shall be reformed to the + minimum extent necessary to make such provision valid and enforceable. + + If Recipient institutes patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that the + Program itself (excluding combinations of the Program with other software + or hardware) infringes such Recipient's patent(s), then such Recipient's + rights granted under Section 2(b) shall terminate as of the date such + litigation is filed. + + All Recipient's rights under this Agreement shall terminate if it + fails to comply with any of the material terms or conditions of this + Agreement and does not cure such failure in a reasonable period of + time after becoming aware of such noncompliance. If all Recipient's + rights under this Agreement terminate, Recipient agrees to cease use + and distribution of the Program as soon as reasonably practicable. + However, Recipient's obligations under this Agreement and any licenses + granted by Recipient relating to the Program shall continue and survive. + + Everyone is permitted to copy and distribute copies of this Agreement, + but in order to avoid inconsistency the Agreement is copyrighted and + may only be modified in the following manner. The Agreement Steward + reserves the right to publish new versions (including revisions) of + this Agreement from time to time. No one other than the Agreement + Steward has the right to modify this Agreement. The Eclipse Foundation + is the initial Agreement Steward. The Eclipse Foundation may assign the + responsibility to serve as the Agreement Steward to a suitable separate + entity. Each new version of the Agreement will be given a distinguishing + version number. The Program (including Contributions) may always be + Distributed subject to the version of the Agreement under which it was + received. In addition, after a new version of the Agreement is published, + Contributor may elect to Distribute the Program (including its + Contributions) under the new version. + + Except as expressly stated in Sections 2(a) and 2(b) above, Recipient + receives no rights or licenses to the intellectual property of any + Contributor under this Agreement, whether expressly, by implication, + estoppel or otherwise. All rights in the Program not expressly granted + under this Agreement are reserved. Nothing in this Agreement is intended + to be enforceable by any entity that is not a Contributor or Recipient. + No third-party beneficiary rights are created under this Agreement. + + Exhibit A - Form of Secondary Licenses Notice + + "This Source Code may also be made available under the following + Secondary Licenses when the conditions for such availability set forth + in the Eclipse Public License, v. 2.0 are satisfied: {name license(s), + version(s), and exceptions or additional permissions here}." + + Simply including a copy of this Agreement, including this Exhibit A + is not sufficient to license the Source Code under Secondary Licenses. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to + look for such a notice. + + You may add additional accurate notices of copyright ownership. + +--- + +## The GNU General Public License (GPL) Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1335 + USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your freedom to + share and change it. By contrast, the GNU General Public License is + intended to guarantee your freedom to share and change free software--to + make sure the software is free for all its users. This General Public + License applies to most of the Free Software Foundation's software and + to any other program whose authors commit to using it. (Some other Free + Software Foundation software is covered by the GNU Library General + Public License instead.) You can apply it to your programs, too. + + When we speak of free software, we are referring to freedom, not price. + Our General Public Licenses are designed to make sure that you have the + freedom to distribute copies of free software (and charge for this + service if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it in new + free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid anyone + to deny you these rights or to ask you to surrender the rights. These + restrictions translate to certain responsibilities for you if you + distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether gratis + or for a fee, you must give the recipients all the rights that you have. + You must make sure that they, too, receive or can get the source code. + And you must show them these terms so they know their rights. + + We protect your rights with two steps: (1) copyright the software, and + (2) offer you this license which gives you legal permission to copy, + distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain + that everyone understands that there is no warranty for this free + software. If the software is modified by someone else and passed on, we + want its recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the original + authors' reputations. + + Finally, any free program is threatened constantly by software patents. + We wish to avoid the danger that redistributors of a free program will + individually obtain patent licenses, in effect making the program + proprietary. To prevent this, we have made it clear that any patent must + be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and + modification follow. + + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains a + notice placed by the copyright holder saying it may be distributed under + the terms of this General Public License. The "Program", below, refers + to any such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: that is + to say, a work containing the Program or a portion of it, either + verbatim or with modifications and/or translated into another language. + (Hereinafter, translation is included without limitation in the term + "modification".) Each licensee is addressed as "you". + + Activities other than copying, distribution and modification are not + covered by this License; they are outside its scope. The act of running + the Program is not restricted, and the output from the Program is + covered only if its contents constitute a work based on the Program + (independent of having been made by running the Program). Whether that + is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's source + code as you receive it, in any medium, provided that you conspicuously + and appropriately publish on each copy an appropriate copyright notice + and disclaimer of warranty; keep intact all the notices that refer to + this License and to the absence of any warranty; and give any other + recipients of the Program a copy of this License along with the Program. + + You may charge a fee for the physical act of transferring a copy, and + you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion of + it, thus forming a work based on the Program, and copy and distribute + such modifications or work under the terms of Section 1 above, provided + that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any part + thereof, to be licensed as a whole at no charge to all third parties + under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this License. + (Exception: if the Program itself is interactive but does not + normally print such an announcement, your work based on the Program + is not required to print an announcement.) + + These requirements apply to the modified work as a whole. If + identifiable sections of that work are not derived from the Program, and + can be reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply to those + sections when you distribute them as separate works. But when you + distribute the same sections as part of a whole which is a work based on + the Program, the distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to the entire + whole, and thus to each and every part regardless of who wrote it. + + Thus, it is not the intent of this section to claim rights or contest + your rights to work written entirely by you; rather, the intent is to + exercise the right to control the distribution of derivative or + collective works based on the Program. + + In addition, mere aggregation of another work not based on the Program + with the Program (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other work under the + scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, + under Section 2) in object code or executable form under the terms of + Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections 1 + and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your cost + of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to + distribute corresponding source code. (This alternative is allowed + only for noncommercial distribution and only if you received the + program in object code or executable form with such an offer, in + accord with Subsection b above.) + + The source code for a work means the preferred form of the work for + making modifications to it. For an executable work, complete source code + means all the source code for all modules it contains, plus any + associated interface definition files, plus the scripts used to control + compilation and installation of the executable. However, as a special + exception, the source code distributed need not include anything that is + normally distributed (in either source or binary form) with the major + components (compiler, kernel, and so on) of the operating system on + which the executable runs, unless that component itself accompanies the + executable. + + If distribution of executable or object code is made by offering access + to copy from a designated place, then offering equivalent access to copy + the source code from the same place counts as distribution of the source + code, even though third parties are not compelled to copy the source + along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program + except as expressly provided under this License. Any attempt otherwise + to copy, modify, sublicense or distribute the Program is void, and will + automatically terminate your rights under this License. However, parties + who have received copies, or rights, from you under this License will + not have their licenses terminated so long as such parties remain in + full compliance. + + 5. You are not required to accept this License, since you have not + signed it. However, nothing else grants you permission to modify or + distribute the Program or its derivative works. These actions are + prohibited by law if you do not accept this License. Therefore, by + modifying or distributing the Program (or any work based on the + Program), you indicate your acceptance of this License to do so, and all + its terms and conditions for copying, distributing or modifying the + Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the + Program), the recipient automatically receives a license from the + original licensor to copy, distribute or modify the Program subject to + these terms and conditions. You may not impose any further restrictions + on the recipients' exercise of the rights granted herein. You are not + responsible for enforcing compliance by third parties to this License. + + 7. If, as a consequence of a court judgment or allegation of patent + infringement or for any other reason (not limited to patent issues), + conditions are imposed on you (whether by court order, agreement or + otherwise) that contradict the conditions of this License, they do not + excuse you from the conditions of this License. If you cannot distribute + so as to satisfy simultaneously your obligations under this License and + any other pertinent obligations, then as a consequence you may not + distribute the Program at all. For example, if a patent license would + not permit royalty-free redistribution of the Program by all those who + receive copies directly or indirectly through you, then the only way you + could satisfy both it and this License would be to refrain entirely from + distribution of the Program. + + If any portion of this section is held invalid or unenforceable under + any particular circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in other + circumstances. + + It is not the purpose of this section to induce you to infringe any + patents or other property right claims or to contest validity of any + such claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which is implemented + by public license practices. Many people have made generous + contributions to the wide range of software distributed through that + system in reliance on consistent application of that system; it is up to + the author/donor to decide if he or she is willing to distribute + software through any other system and a licensee cannot impose that choice. + + This section is intended to make thoroughly clear what is believed to be + a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in + certain countries either by patents or by copyrighted interfaces, the + original copyright holder who places the Program under this License may + add an explicit geographical distribution limitation excluding those + countries, so that distribution is permitted only in or among countries + not thus excluded. In such case, this License incorporates the + limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new + versions of the General Public License from time to time. Such new + versions will be similar in spirit to the present version, but may + differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the Program + specifies a version number of this License which applies to it and "any + later version", you have the option of following the terms and + conditions either of that version or of any later version published by + the Free Software Foundation. If the Program does not specify a version + number of this License, you may choose any version ever published by the + Free Software Foundation. + + 10. If you wish to incorporate parts of the Program into other free + programs whose distribution conditions are different, write to the + author to ask for permission. For software which is copyrighted by the + Free Software Foundation, write to the Free Software Foundation; we + sometimes make exceptions for this. Our decision will be guided by the + two goals of preserving the free status of all derivatives of our free + software and of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO + WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. + EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR + OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, + EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE + ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH + YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL + NECESSARY SERVICING, REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN + WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY + AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR + DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL + DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM + (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED + INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF + THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR + OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest + possible use to the public, the best way to achieve this is to make it + free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest to + attach them to the start of each source file to most effectively convey + the exclusion of warranty; and each file should have at least the + "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA + + Also add information on how to contact you by electronic and paper mail. + + If the program is interactive, make it output a short notice like this + when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type + `show w'. This is free software, and you are welcome to redistribute + it under certain conditions; type `show c' for details. + + The hypothetical commands `show w' and `show c' should show the + appropriate parts of the General Public License. Of course, the commands + you use may be called something other than `show w' and `show c'; they + could even be mouse-clicks or menu items--whatever suits your program. + + You should also get your employer (if you work as a programmer) or your + school, if any, to sign a "copyright disclaimer" for the program, if + necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (which makes passes at compilers) written by + James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + + This General Public License does not permit incorporating your program + into proprietary programs. If your program is a subroutine library, you + may consider it more useful to permit linking proprietary applications + with the library. If this is what you want to do, use the GNU Library + General Public License instead of this License. + +--- + +## CLASSPATH EXCEPTION + + Linking this library statically or dynamically with other modules is + making a combined work based on this library. Thus, the terms and + conditions of the GNU General Public License version 2 cover the whole + combination. + + As a special exception, the copyright holders of this library give you + permission to link this library with independent modules to produce an + executable, regardless of the license terms of these independent + modules, and to copy and distribute the resulting executable under + terms of your choice, provided that you also meet, for each linked + independent module, the terms and conditions of the license of that + module. An independent module is a module which is not derived from or + based on this library. If you modify this library, you may extend this + exception to your version of the library, but you are not obligated to + do so. If you do not wish to do so, delete this exception statement + from your version. diff --git a/licenses/license-org.jboss.spec.javax.xml.bind-jboss-jaxb-api-2.3-spec.txt b/licenses/license-org.jboss.spec.javax.xml.bind-jboss-jaxb-api-2.3-spec.txt new file mode 100644 index 0000000..6fb337c --- /dev/null +++ b/licenses/license-org.jboss.spec.javax.xml.bind-jboss-jaxb-api-2.3-spec.txt @@ -0,0 +1,29 @@ + + Copyright (c) 2017, 2018 Oracle and/or its affiliates. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + - Neither the name of the Eclipse Foundation, Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/licenses/license-org.jboss.threads-jboss-threads.txt b/licenses/license-org.jboss.threads-jboss-threads.txt new file mode 100644 index 0000000..f433b1a --- /dev/null +++ b/licenses/license-org.jboss.threads-jboss-threads.txt @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS diff --git a/licenses/license-org.lionsoul-ip2region.txt b/licenses/license-org.lionsoul-ip2region.txt new file mode 100644 index 0000000..b67090c --- /dev/null +++ b/licenses/license-org.lionsoul-ip2region.txt @@ -0,0 +1 @@ +License: {Name: The Apache Software License, Version 2.0, URL: http://www.apache.org/licenses/LICENSE-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-org.postgresql-postgresql.txt b/licenses/license-org.postgresql-postgresql.txt new file mode 100644 index 0000000..daa7e32 --- /dev/null +++ b/licenses/license-org.postgresql-postgresql.txt @@ -0,0 +1,33 @@ +Copyright (c) 1997, PostgreSQL Global Development Group +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +Additional License files can be found in the 'licenses' folder located in the same directory as the LICENSE file (i.e. this file) + +- Software produced outside the ASF which is available under other licenses (not Apache-2.0) + +BSD-2-Clause +* com.ongres.scram:client:2.1 +* com.ongres.scram:common:2.1 +* com.ongres.stringprep:saslprep:1.1 +* com.ongres.stringprep:stringprep:1.1 diff --git a/licenses/license-org.quartz-scheduler-quartz.txt b/licenses/license-org.quartz-scheduler-quartz.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-org.quartz-scheduler-quartz.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/licenses/license-org.reactivestreams-reactive-streams.txt b/licenses/license-org.reactivestreams-reactive-streams.txt new file mode 100644 index 0000000..5417901 --- /dev/null +++ b/licenses/license-org.reactivestreams-reactive-streams.txt @@ -0,0 +1 @@ +License: {Name: CC0, URL: http://creativecommons.org/publicdomain/zero/1.0/, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-org.slf4j-slf4j-api.txt b/licenses/license-org.slf4j-slf4j-api.txt new file mode 100644 index 0000000..e69de29 diff --git a/licenses/license-org.wildfly.common-wildfly-common.txt b/licenses/license-org.wildfly.common-wildfly-common.txt new file mode 100644 index 0000000..36f8fe1 --- /dev/null +++ b/licenses/license-org.wildfly.common-wildfly-common.txt @@ -0,0 +1 @@ +License: {Name: Apache License 2.0, URL: http://repository.jboss.org/licenses/apache-2.0.txt, Distribution: repo, Comments: , } \ No newline at end of file diff --git a/licenses/license-org.yaml-snakeyaml.txt b/licenses/license-org.yaml-snakeyaml.txt new file mode 100644 index 0000000..5456b5a --- /dev/null +++ b/licenses/license-org.yaml-snakeyaml.txt @@ -0,0 +1 @@ +http://www.apache.org/licenses/LICENSE-2.0.txt \ No newline at end of file diff --git a/mvnw b/mvnw new file mode 100755 index 0000000..8d937f4 --- /dev/null +++ b/mvnw @@ -0,0 +1,308 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.2.0 +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /usr/local/etc/mavenrc ] ; then + . /usr/local/etc/mavenrc + fi + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "$(uname)" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME + else + JAVA_HOME="/Library/Java/Home"; export JAVA_HOME + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=$(java-config --jre-home) + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --unix "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --unix "$CLASSPATH") +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] && + JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="$(which javac)" + if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=$(which readlink) + if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then + if $darwin ; then + javaHome="$(dirname "\"$javaExecutable\"")" + javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac" + else + javaExecutable="$(readlink -f "\"$javaExecutable\"")" + fi + javaHome="$(dirname "\"$javaExecutable\"")" + javaHome=$(expr "$javaHome" : '\(.*\)/bin') + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=$(cd "$wdir/.." || exit 1; pwd) + fi + # end of workaround + done + printf '%s' "$(cd "$basedir" || exit 1; pwd)" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + # Remove \r in case we run on Windows within Git Bash + # and check out the repository with auto CRLF management + # enabled. Otherwise, we may read lines that are delimited with + # \r\n and produce $'-Xarg\r' rather than -Xarg due to word + # splitting rules. + tr -s '\r\n' ' ' < "$1" + fi +} + +log() { + if [ "$MVNW_VERBOSE" = true ]; then + printf '%s\n' "$1" + fi +} + +BASE_DIR=$(find_maven_basedir "$(dirname "$0")") +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR +log "$MAVEN_PROJECTBASEDIR" + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +if [ -r "$wrapperJarPath" ]; then + log "Found $wrapperJarPath" +else + log "Couldn't find $wrapperJarPath, downloading it ..." + + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + else + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + else + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" + fi + else + log "Falling back to using Java to download" + javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java" + javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") + fi + if [ -e "$javaSource" ]; then + if [ ! -e "$javaClass" ]; then + log " - Compiling MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/javac" "$javaSource") + fi + if [ -e "$javaClass" ]; then + log " - Running MavenWrapperDownloader.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +# If specified, validate the SHA-256 sum of the Maven wrapper jar file +wrapperSha256Sum="" +while IFS="=" read -r key value; do + case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; + esac +done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +if [ -n "$wrapperSha256Sum" ]; then + wrapperSha256Result=false + if command -v sha256sum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + elif command -v shasum > /dev/null; then + if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then + wrapperSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." + echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties." + exit 1 + fi + if [ $wrapperSha256Result = false ]; then + echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2 + echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2 + echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2 + exit 1 + fi +fi + +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$JAVA_HOME" ] && + JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME") + [ -n "$CLASSPATH" ] && + CLASSPATH=$(cygpath --path --windows "$CLASSPATH") + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR") +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +# shellcheck disable=SC2086 # safe args +exec "$JAVACMD" \ + $MAVEN_OPTS \ + $MAVEN_DEBUG_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/mvnw.cmd b/mvnw.cmd new file mode 100644 index 0000000..c805ace --- /dev/null +++ b/mvnw.cmd @@ -0,0 +1,219 @@ +rem Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +rem +rem Licensed under the Apache License, Version 2.0 (the "License"); +rem you may not use this file except in compliance with the License. +rem You may obtain a copy of the License at +rem +rem http://www.apache.org/licenses/LICENSE-2.0 +rem +rem Unless required by applicable law or agreed to in writing, software +rem distributed under the License is distributed on an "AS IS" BASIS, +rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +rem See the License for the specific language governing permissions and +rem limitations under the License. + +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.2.0 +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %* +if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %* +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %WRAPPER_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file +SET WRAPPER_SHA_256_SUM="" +FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B +) +IF NOT %WRAPPER_SHA_256_SUM%=="" ( + powershell -Command "&{"^ + "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^ + "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^ + " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^ + " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^ + " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^ + " exit 1;"^ + "}"^ + "}" + if ERRORLEVEL 1 goto error +) + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% ^ + %JVM_CONFIG_MAVEN_PROPS% ^ + %MAVEN_OPTS% ^ + %MAVEN_DEBUG_OPTS% ^ + -classpath %WRAPPER_JAR% ^ + "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^ + %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat" +if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%"=="on" pause + +if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE% + +cmd /C exit /B %ERROR_CODE% diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..1cba57d --- /dev/null +++ b/pom.xml @@ -0,0 +1,262 @@ + + + + + 4.0.0 + ao.space + space-gateway + 1.0.0-SNAPSHOT + + 3.11.0 + 17 + UTF-8 + UTF-8 + quarkus-bom + io.quarkus.platform + 3.2.4.Final + true + 3.1.2 + + + + + ${quarkus.platform.group-id} + ${quarkus.platform.artifact-id} + ${quarkus.platform.version} + pom + import + + + + + + io.quarkus + quarkus-smallrye-openapi + + + io.quarkus + quarkus-config-yaml + + + io.quarkus + quarkus-resteasy-reactive + + + io.quarkus + quarkus-resteasy-reactive-jackson + + + io.quarkus + quarkus-smallrye-jwt + + + io.quarkus + quarkus-hibernate-validator + + + io.quarkus + quarkus-arc + + + org.projectlombok + lombok + 1.18.24 + provided + + + com.google.guava + guava + + + com.squareup.okhttp3 + okhttp + + + io.quarkus + quarkus-scheduler + + + io.quarkus + quarkus-resteasy-reactive-jaxb + + + com.belerweb + pinyin4j + 2.5.0 + + + io.quarkus + quarkus-smallrye-reactive-messaging + + + io.quarkus + quarkus-junit5 + test + + + io.rest-assured + rest-assured + test + + + io.quarkus + quarkus-rest-client-reactive + + + io.quarkus + quarkus-rest-client-reactive-jackson + + + io.quarkus + quarkus-quartz + + + io.quarkus + quarkus-hibernate-orm-panache + + + io.quarkus + quarkus-jdbc-postgresql + + + io.quarkus + quarkus-flyway + + + io.quarkus + quarkus-jdbc-h2 + test + + + org.apache.commons + commons-lang3 + + + javax.servlet + javax.servlet-api + 3.1.0 + compile + + + io.quarkus + quarkus-redis-client + + + org.lionsoul + ip2region + 1.7.2 + + + io.quarkus + quarkus-vertx + + + com.google.code.findbugs + jsr305 + 3.0.2 + + + commons-codec + commons-codec + 1.15 + + + com.sun.mail + jakarta.mail + 2.0.1 + + + dev.samstevens.totp + totp + 1.7.1 + + + + + + ${quarkus.platform.group-id} + quarkus-maven-plugin + ${quarkus.platform.version} + true + + + + build + generate-code + generate-code-tests + + + + + + maven-compiler-plugin + ${compiler-plugin.version} + + + -parameters + + + + + maven-surefire-plugin + ${surefire-plugin.version} + + + org.jboss.logmanager.LogManager + + ${maven.home} + + + + + maven-failsafe-plugin + ${surefire-plugin.version} + + + + integration-test + verify + + + + ${project.build.directory}/${project.build.finalName}-runner + org.jboss.logmanager.LogManager + + ${maven.home} + + + + + + + + + + native + + + native + + + + false + native + + + + diff --git a/src/main/java/space/ao/services/GreetingResource.java b/src/main/java/space/ao/services/GreetingResource.java new file mode 100644 index 0000000..e28cc2f --- /dev/null +++ b/src/main/java/space/ao/services/GreetingResource.java @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services; + +import com.google.common.io.ByteStreams; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.jboss.resteasy.reactive.PartType; +import space.ao.services.support.log.Logged; + +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; + +@Tag(name = "Space Gateway Hello Service", + description = "Provides gateway service hello helper APIs(used for testing).") +@Path("/hello") +public class GreetingResource { + + @GET + @Produces(MediaType.TEXT_PLAIN) + @Logged + public String hello() { + return "Hello"; + } + + @POST + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.TEXT_PLAIN) + @Path("/upload") + public String upload(MultipartBody mtp) throws Exception { + final var file = mtp.file; + try (file) { + return new String(ByteStreams.toByteArray(file), StandardCharsets.UTF_8); + } + } + + @POST + @Consumes(MediaType.APPLICATION_OCTET_STREAM) + @Produces(MediaType.TEXT_PLAIN) + @Path("/upload-one") + public String uploadOne(@QueryParam("FileName") String fileName, InputStream file) { + try (file) { + return fileName + ", " + new String(ByteStreams.toByteArray(file), StandardCharsets.UTF_8); + } catch (IOException e) { + return ""; + } + } + + @GET + @Produces(MediaType.APPLICATION_OCTET_STREAM) + @Path("/download") + public Response download(@QueryParam("file") String file, @QueryParam("content") String content) { + byte[] bytes = content.getBytes(StandardCharsets.UTF_8); + Response.ResponseBuilder response = Response.ok( + (StreamingOutput) output -> { + try (output; var input = new ByteArrayInputStream(bytes)) { + ByteStreams.copy(input, output); + } + }); + response.header("Content-Disposition", "attachment;filename=" + file); + return response.build(); + } + + public static class MultipartBody { + @FormParam("file") + @PartType(MediaType.APPLICATION_OCTET_STREAM) + public InputStream file; + + @FormParam("fileName") + @PartType(MediaType.TEXT_PLAIN) + public String fileName; + } +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/StatusResource.java b/src/main/java/space/ao/services/StatusResource.java new file mode 100644 index 0000000..6082745 --- /dev/null +++ b/src/main/java/space/ao/services/StatusResource.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.StatusResult; + +import jakarta.inject.Inject; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Tag(name = "Space Gateway Status Service", + description = "Provides gateway service status related APIs.") +@Path("/status") +public class StatusResource { + + @Inject + ApplicationProperties properties; + @GET + @Logged + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "Try to ask the current status of server.") + public StatusResult status() { + return StatusResult.of("ok", properties.version(), "I am good.", StatusResult.PlatformInfo.of( + properties.ssplatformUrl() + )); + } +} diff --git a/src/main/java/space/ao/services/account/authorizedterminalinfo/dto/AuthorizedTerminalInfo.java b/src/main/java/space/ao/services/account/authorizedterminalinfo/dto/AuthorizedTerminalInfo.java new file mode 100644 index 0000000..54156cb --- /dev/null +++ b/src/main/java/space/ao/services/account/authorizedterminalinfo/dto/AuthorizedTerminalInfo.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.authorizedterminalinfo.dto; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +public record AuthorizedTerminalInfo(@Schema(description = "用户userId") String userId, + @NotBlank @Schema(description = "授权终端的uuid") String uuid, + @Schema(description = "授权终端型号") String terminalMode, + @Schema(description = "超时时间") long expireAt, + @Schema(description = "登录地址") String address, + @Schema(description = "授权终端类型") String terminalType){ + + public static AuthorizedTerminalInfo of(String userId, String uuid, String terminalMode, + long expireAt, String address, String terminalType) { + return new AuthorizedTerminalInfo(userId, uuid, terminalMode, expireAt,address,terminalType); + } + +} diff --git a/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/AuthorizedTerminalEntity.java b/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/AuthorizedTerminalEntity.java new file mode 100644 index 0000000..c8c3d07 --- /dev/null +++ b/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/AuthorizedTerminalEntity.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.authorizedterminalinfo.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import lombok.Getter; +import lombok.Setter; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import java.time.OffsetDateTime; + +/** + * 用户表数据结构 + * @author suqin + * @date 2021-11-22 21:39:57 + **/ +@Entity +@Getter +@Setter +@Table(name = "authorized_terminal_info") +public class AuthorizedTerminalEntity extends PanacheEntityBase { + @Id + @Column(name = "terminal_id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "userid") + @NotNull + @JsonIgnore + private Long userid; + + @Column(length = 64, name = "aoid") + @NotNull + private String aoid; + + @Column(length = 64, name = "uuid") + @NotNull + private String uuid; + + @Column(length = 64, name = "terminal_mode") + @NotNull + private String terminalMode; + + @Column(name = "address") + private String address; + + @Column(length = 64, name = "terminal_type") + private String terminalType; + + /** + * 创建时间 create_at + * /登录时间 login_at + * 自动登录有效期 expire_at + * 刷新 + */ + @Column(name = "create_at") + @NotNull + private OffsetDateTime createAt; + + @Column(name = "expire_at") + @NotNull + private OffsetDateTime expireAt; + + @Column(name = "login_at") + @NotNull + private OffsetDateTime loginAt; + +} diff --git a/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/AuthorizedTerminalResult.java b/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/AuthorizedTerminalResult.java new file mode 100644 index 0000000..db42b2c --- /dev/null +++ b/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/AuthorizedTerminalResult.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.authorizedterminalinfo.entity; + +import java.time.OffsetDateTime; + +public record AuthorizedTerminalResult(String aoid, String uuid, String terminalModel, + String terminalType, OffsetDateTime loginTime, + String address, Boolean online){ + public static AuthorizedTerminalResult of(String aoid, String clientUUID, String terminalMode, String terminalType, + OffsetDateTime loginAt, String address, Boolean online){ + return new AuthorizedTerminalResult(aoid, clientUUID, terminalMode, terminalType, loginAt, address, online); + } +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/TerminalType.java b/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/TerminalType.java new file mode 100644 index 0000000..3f769ed --- /dev/null +++ b/src/main/java/space/ao/services/account/authorizedterminalinfo/entity/TerminalType.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.authorizedterminalinfo.entity; + +public enum TerminalType { + android, ios, web, ANDROID, IOS, WEB, UNKNOWN +} diff --git a/src/main/java/space/ao/services/account/authorizedterminalinfo/repository/AuthorizedTerminalRepository.java b/src/main/java/space/ao/services/account/authorizedterminalinfo/repository/AuthorizedTerminalRepository.java new file mode 100644 index 0000000..7f71905 --- /dev/null +++ b/src/main/java/space/ao/services/account/authorizedterminalinfo/repository/AuthorizedTerminalRepository.java @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.authorizedterminalinfo.repository; + +import io.quarkus.hibernate.orm.panache.PanacheRepository; +import java.util.Objects; + +import space.ao.services.account.authorizedterminalinfo.dto.AuthorizedTerminalInfo; +import space.ao.services.account.authorizedterminalinfo.entity.AuthorizedTerminalEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.support.log.Logged; + +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.transaction.Transactional; +import java.time.OffsetDateTime; +import java.util.List; + +@Singleton +public class AuthorizedTerminalRepository implements PanacheRepository { + + private static final String BY_USERID_AND_UUID = "userid=?1 and uuid=?2"; + + @Inject + UserInfoRepository userInfoRepository; + /** + * 根据userid查询授权端信息 + * @author suqin + * @param userId userId + * @date 2021-11-22 16:39:57 + **/ + @Transactional + public List findByUserid(Long userId){ + return find("userid", userId).list(); + } + + /** + * 查询所有非管理员角色的授权信息 + * @author suqin + * @date 2021-11-22 16:39:57 + **/ + public List findByAoid(String aoId){ + return find("aoid", aoId).list(); + } + + /** + * 根据userid和uuid查询授权端信息 + * @author suqin + * @param userId userId userId + * @param uuid uuid + * @date 2021-11-22 16:39:57 + **/ + @Transactional + public AuthorizedTerminalEntity findByUseridAndUuid(Long userId, String uuid) { + return find(BY_USERID_AND_UUID, userId, uuid).firstResult(); + } + + /** + * 根据 uuid查询授权端信息 + * @param uuid clientUUID + * @return AuthorizedTerminalEntity + */ + public AuthorizedTerminalEntity findByUuid(String uuid) { + return find("uuid=?1", uuid).firstResult(); + } + + public AuthorizedTerminalEntity findByAoidAndUuid(String aoId, String uuid) { + return find("aoid=?1 and uuid=?2", aoId, uuid).firstResult(); + } + + /** + * 根据userId + * @author suqin + * @param userId userId + * @date 2021-11-22 16:39:57 + **/ + @Transactional + public void delete(Long userId){ + delete("userid", userId); + } + + /** + * 根据userId和uuid删除相关授权信息 + * @author suqin + * @param userId userId + * @date 2021-11-22 16:39:57 + **/ + @Transactional + public void delete(Long userId, String uuid){ + delete(BY_USERID_AND_UUID, userId, uuid); + } + + /** + * 插入授权终端信息 + * @author suqin + * @param authorizedTerminalInfo 授权端信息 + * @date 2021-11-22 16:39:57 + **/ + @Transactional + @Logged + public AuthorizedTerminalEntity insert(AuthorizedTerminalInfo authorizedTerminalInfo){ + var userEntity = userInfoRepository.findByUserId(Long.valueOf(authorizedTerminalInfo.userId())); + var authorizedTerminalEntity = new AuthorizedTerminalEntity(); + var authorizedTerminal = findByUseridAndUuid(Long.valueOf(authorizedTerminalInfo.userId()), authorizedTerminalInfo.uuid()); + + if(Objects.nonNull(authorizedTerminal)){ + authorizedTerminalEntity = authorizedTerminal; + } + authorizedTerminalEntity.setTerminalMode(authorizedTerminalInfo.terminalMode()); + authorizedTerminalEntity.setTerminalType(authorizedTerminalInfo.terminalType()); + + authorizedTerminalEntity.setUserid(Long.valueOf(authorizedTerminalInfo.userId())); + authorizedTerminalEntity.setAoid(userEntity.getAoId()); + authorizedTerminalEntity.setUuid(authorizedTerminalInfo.uuid()); + authorizedTerminalEntity.setCreateAt(OffsetDateTime.now()); + authorizedTerminalEntity.setLoginAt(OffsetDateTime.now()); + authorizedTerminalEntity.setExpireAt(OffsetDateTime.now().plusSeconds(authorizedTerminalInfo.expireAt())); + authorizedTerminalEntity.setAddress(authorizedTerminalInfo.address()); + save(authorizedTerminalEntity); + + var list = find(BY_USERID_AND_UUID, authorizedTerminalEntity.getUserid(), authorizedTerminalEntity.getUuid()).list(); + + for (var i=1;i findAllTerminal(){ + List all = findAll().list(); + return all.stream().distinct().toList(); + } + + @Transactional + @Logged + public void save(AuthorizedTerminalEntity terminalEntity) { + persist(terminalEntity); + } +} diff --git a/src/main/java/space/ao/services/account/authorizedterminalinfo/rest/AuthorizedTerminalResource.java b/src/main/java/space/ao/services/account/authorizedterminalinfo/rest/AuthorizedTerminalResource.java new file mode 100644 index 0000000..3eefc85 --- /dev/null +++ b/src/main/java/space/ao/services/account/authorizedterminalinfo/rest/AuthorizedTerminalResource.java @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.authorizedterminalinfo.rest; + +import java.util.ArrayList; +import java.util.Objects; + +import io.smallrye.openapi.runtime.util.StringUtil; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.authorizedterminalinfo.service.AuthorizedTerminalService; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.authorizedterminalinfo.entity.AuthorizedTerminalResult; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.push.dto.Message; +import space.ao.services.push.dto.NotificationEnum; +import space.ao.services.push.services.RedisService; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; + +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import java.time.OffsetDateTime; +import java.util.List; + +@Path("/v1/api/terminal") +@Tag(name = "Terminal authorization Service", description = "Provides authorized terminal services.") +public class AuthorizedTerminalResource { + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + @Inject + AuthorizedTerminalService authorizedTerminalService; + + @Inject + UserInfoRepository userInfoRepository; + + @Inject + RedisService redisService; + + @Inject + OperationUtils utils; + + /** + * 查询被授权终端相关信息 + * @author suqin + * @date 2021-11-22 17:53:57 + * @param userId userId + * @param requestId requestId + **/ + @GET + @Logged + @Path("/info") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to get authorized terminal information by userId.") + public ResponseBase get(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @QueryParam("aoid") String aoid, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @QueryParam("clientUUID") String clientUUID) { + var terminal = authorizedTerminalRepository.findByAoidAndUuid(aoid, clientUUID); + if(Objects.isNull(terminal)){ + return ResponseBase.of("ACC-404", "no authorized terminal corresponding to client uuid",requestId,null); + } + var authorizedTerminalResult = AuthorizedTerminalResult.of(terminal.getAoid(), terminal.getUuid(), + terminal.getTerminalMode(), terminal.getTerminalMode(), terminal.getLoginAt(), terminal.getAddress(), null); + return ResponseBase.okACC(requestId, authorizedTerminalResult); + + + } + + /** + * 查询在线状态的被授权终端相关信息 + * @author suqin + * @date 2021-11-22 17:53:57 + * @param userId userId + * @param requestId requestId + **/ + @GET + @Logged + @Path("/all/info") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to get authorized terminal information by userId.") + public ResponseBase> authorizedTerminalInfoByUserid(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @QueryParam("aoid") String aoid, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId) { + + List result = new ArrayList<>(); + var terminalList = StringUtil.isNotEmpty(aoid)? + authorizedTerminalRepository.findByAoid(aoid):authorizedTerminalRepository.findByUserid(Long.valueOf(userId)); + for(var terminal:terminalList) { + var online = terminal.getExpireAt().isAfter(OffsetDateTime.now()); + if(online) { + result.add(AuthorizedTerminalResult.of(terminal.getAoid(), terminal.getUuid(), + terminal.getTerminalMode(), terminal.getTerminalType(), terminal.getLoginAt(), + terminal.getAddress(), true)); + } + } + return ResponseBase.okACC(requestId, result); + } + + + + /** + * 删除终端授权信息 + * @author suqin + * @date 2021-11-22 17:53:57 + **/ + @DELETE + @Logged + @Path("/info/delete") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Transactional + @Operation(description = "Tries to get authorized terminal information by userId.") + public ResponseBase delAuthorizedTerminalInfo(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @QueryParam("aoid") String aoid, + @Valid @NotBlank @QueryParam("clientUUID") String clientUUID) { + return authorizedTerminalLogout(requestId, userId, "", aoid, clientUUID); + } + + /** + * 兼容 IOS 代码生成插件 + */ + @POST + @Logged + @Path("/info/delete") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Transactional + @Operation(description = "Tries to get authorized terminal information by userId.") + public ResponseBase delAuthorizedTerminalInfoIOS(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @QueryParam("aoid") String aoid, + @Valid @NotBlank @QueryParam("clientUUID") String clientUUID) { + return delAuthorizedTerminalInfo(requestId, userId, aoid, clientUUID); + } + + + /** + * 终端下线 + */ + @POST + @Logged + @Path("/logout") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Transactional + @Operation(description = "Tries to get authorized terminal information by userId.") + public ResponseBase authorizedTerminalLogout(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @NotBlank @QueryParam("userId") String userId, @QueryParam("AccessToken-clientUUID") String accessTokenClientUUID, + @Valid @NotBlank @QueryParam("aoid") String aoid, + @Valid @NotBlank @QueryParam("clientUUID") String clientUUID) { + var authorizedTerminalEntity= authorizedTerminalRepository.findByAoidAndUuid(aoid, clientUUID); + if(authorizedTerminalEntity == null){ + throw new ServiceOperationException(ServiceError.INVALID_AUTHORIZED_CLIENT); + } + var userInfo = userInfoRepository.findByUserId(Long.valueOf(userId)); + if(userInfo == null || userInfo.getClientUUID() == null || Objects.equals( + userInfo.getClientUUID(), clientUUID)){ + throw new ServiceOperationException(ServiceError.INVALID_AUTHORIZED_CLIENT); + } + + if(userId.equals("1") || userId.equals(authorizedTerminalEntity.getUserid().toString())) { + + var terminalEntity = authorizedTerminalService.logoutAuthorizedTerminalInfo(requestId, userId, clientUUID); + + var authorizedTerminalResult = AuthorizedTerminalResult.of( + terminalEntity.getAoid(), terminalEntity.getUuid(), + terminalEntity.getTerminalMode(), terminalEntity.getTerminalType(), + terminalEntity.getLoginAt(), + terminalEntity.getAddress(), false); + + if(!Objects.equals(clientUUID, accessTokenClientUUID)){ + redisService.pushMessage(Message.of(userId, authorizedTerminalEntity.getUuid(), + NotificationEnum.LOGOUT.getType(), requestId, + utils.objectToJson(authorizedTerminalResult))); + } + + return ResponseBase.okACC(requestId, authorizedTerminalResult); + } + throw new ServiceOperationException(ServiceError.NO_MODIFY_RIGHTS); + } + +} diff --git a/src/main/java/space/ao/services/account/authorizedterminalinfo/service/AuthorizedTerminalService.java b/src/main/java/space/ao/services/account/authorizedterminalinfo/service/AuthorizedTerminalService.java new file mode 100644 index 0000000..3aa5fda --- /dev/null +++ b/src/main/java/space/ao/services/account/authorizedterminalinfo/service/AuthorizedTerminalService.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.authorizedterminalinfo.service; + +import com.google.common.base.Stopwatch; +import io.quarkus.scheduler.Scheduled; +import java.time.Duration; +import java.util.Objects; +import java.util.concurrent.TimeUnit; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import org.jboss.logging.Logger; +import space.ao.services.account.authorizedterminalinfo.dto.AuthorizedTerminalInfo; +import space.ao.services.account.authorizedterminalinfo.entity.AuthorizedTerminalEntity; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.member.service.PlatformRegistryService; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.config.ApplicationProperties; + +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import java.time.OffsetDateTime; +import space.ao.services.push.services.RedisService; +import space.ao.services.support.StringUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.info.registry.ClientRegistryInfo; +import space.ao.services.support.platform.info.registry.RegistryTypeEnum; + +@ApplicationScoped +public class AuthorizedTerminalService { + private static final Logger LOG = Logger.getLogger("app.log"); + + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + + @Inject + UserInfoRepository userInfoRepository; + @Inject + ApplicationProperties properties; + + @Inject + PlatformRegistryService platformRegistryService; + + /** + * 插入终端授权信息 + * @author suqin + * @date 2021-11-22 17:53:57 + * @param authorizedTerminalInfo 终端授权信息 + **/ + @Transactional + @Logged + public AuthorizedTerminalEntity insertAuthorizedTerminalInfo(@Valid @NotBlank String requestId, + @Valid AuthorizedTerminalInfo authorizedTerminalInfo) { + if(authorizedTerminalRepository.findByUseridAndUuid( + Long.valueOf(authorizedTerminalInfo.userId()), authorizedTerminalInfo.uuid()) != null){ + return updateAuthorizedTerminalValidTime(requestId, authorizedTerminalInfo); + } + if(userInfoRepository.findByUserId(Long.valueOf(authorizedTerminalInfo.userId())).getClientUUID().equals(authorizedTerminalInfo.uuid())){ + throw new ServiceOperationException(ServiceError.CLIENT_HAS_REGISTERED); + } + + var authorizedTerminalEntity = authorizedTerminalRepository.insert(authorizedTerminalInfo); + platformRegistryService.registryClient(requestId, ClientRegistryInfo.of( + authorizedTerminalInfo.uuid(), RegistryTypeEnum.CLIENT_AUTH.getName()), authorizedTerminalEntity.getAoid()); + + + return authorizedTerminalEntity; + } + + /** + * 更新终端授权信息 + * @author suqin + * @date 2021-11-22 17:53:57 + * @param authorizedTerminalInfo 终端授权信息 TerminalMode 不为空字符串时, 更新型号TerminalMode、类型TerminalType、地址Address + **/ + @Transactional + @Logged + public AuthorizedTerminalEntity updateAuthorizedTerminalValidTime(@Valid @NotBlank String requestId, + @Valid AuthorizedTerminalInfo authorizedTerminalInfo) { + var authorizedTerminalEntity = authorizedTerminalRepository.findByUseridAndUuid + (Long.valueOf(authorizedTerminalInfo.userId()), authorizedTerminalInfo.uuid()); + if (authorizedTerminalEntity == null) { + LOG.error("requestId: " + requestId + ": No authorized terminal info found"); + return null; // "No authorized terminal info found" + } + + if(!StringUtils.isBlank(authorizedTerminalInfo.terminalMode())){ + authorizedTerminalEntity.setTerminalMode(authorizedTerminalInfo.terminalMode()); + authorizedTerminalEntity.setTerminalType(authorizedTerminalInfo.terminalType()); + if(!authorizedTerminalInfo.address().contains("内网IP")){ + authorizedTerminalEntity.setAddress(authorizedTerminalInfo.address()); + } + } + authorizedTerminalEntity.setLoginAt(OffsetDateTime.now()); + authorizedTerminalEntity.setExpireAt(OffsetDateTime.now().plusSeconds(authorizedTerminalInfo.expireAt())); + authorizedTerminalEntity.persist(); + return authorizedTerminalEntity; + } + + /** + * 删除终端授权信息 + * @author suqin + * @date 2021-11-22 17:53:57 + * @param authorizedTerminalInfo 终端授权信息 + **/ + + @Transactional + public void delAuthorizedTerminalInfo(@Valid @NotBlank String requestId, + @Valid AuthorizedTerminalInfo authorizedTerminalInfo) { + var authorizedTerminalEntity= authorizedTerminalRepository.findByUseridAndUuid(Long.valueOf(authorizedTerminalInfo.userId()), authorizedTerminalInfo.uuid()); + if(authorizedTerminalEntity == null){ + throw new ServiceOperationException(ServiceError.INVALID_AUTHORIZED_CLIENT); + } + platformRegistryService.platformRegistryClientReset(requestId, authorizedTerminalEntity.getAoid(), + authorizedTerminalInfo.uuid()); + authorizedTerminalEntity.delete(); + } + + + /** + * 下线终端授权信息 + * @author suqin + * @date 2021-11-22 17:53:57 + * @param userId clientUUID 终端授权信息 + **/ + + @Transactional + public AuthorizedTerminalEntity logoutAuthorizedTerminalInfo(@Valid @NotBlank String requestId, + @Valid String userId, String clientUUID) { + RedisService.setClientStatus(clientUUID+userId, OffsetDateTime.now().minusSeconds(Duration.parse(properties.pushTimeout()).getSeconds())); + return updateAuthorizedTerminalValidTime(requestId, AuthorizedTerminalInfo.of( + userId, clientUUID, "", -Duration.parse(properties.pushTimeout()).getSeconds()*2,"","")); + } + + /** + * 更新终端授权有效时间 + **/ + @Transactional + @Logged + public void updateAuthorizedTerminalValidTime(@Valid @NotBlank String requestId, + @Valid String userId, String clientUUID) { + var authorizedTerminalEntity = authorizedTerminalRepository.findByUseridAndUuid + (Long.valueOf(userId), clientUUID); + if (authorizedTerminalEntity == null) { + LOG.error("requestId: " + requestId + ": No authorized terminal info found"); + return; // "No authorized terminal info found" + } + if(Objects.equals(authorizedTerminalEntity.getTerminalType(), "web") + && authorizedTerminalEntity.getExpireAt().isBefore(OffsetDateTime.now().minusSeconds(Duration.parse(properties.pushTimeout()).getSeconds()))){ + return; + } + if(authorizedTerminalEntity.getExpireAt().isBefore(OffsetDateTime.now()) + && authorizedTerminalEntity.getExpireAt().isAfter(OffsetDateTime.now().minusSeconds(Duration.parse(properties.pushTimeout()).getSeconds()*2))){ + authorizedTerminalEntity.setExpireAt(OffsetDateTime.now().plusSeconds(Duration.parse(properties.pushTimeout()).getSeconds())); + } + authorizedTerminalEntity.persist(); + } + + + @Scheduled(cron = "0 0 0 1 * ? *") + @SuppressWarnings("unused") + void cleanTerminal(){ + Stopwatch stopwatch = Stopwatch.createStarted(); + + var authorizedTerminals = authorizedTerminalRepository.findAll().list(); + for (var authorizedTerminal: authorizedTerminals){ + if(authorizedTerminal.getExpireAt().isBefore( + OffsetDateTime.now().minusSeconds(Duration.parse(properties.timeOfAllowLogin()).toSeconds()))){ + // 有效期三十天之前 + delAuthorizedTerminalInfo("", AuthorizedTerminalInfo.of(authorizedTerminal.getUserid().toString(), + authorizedTerminal.getUuid(),"",0,"","")); + LOG.info("regularly clean invalid authorizedTerminal - " + authorizedTerminal); + } + } + LOG.info("regularly clean invalid authorizedTerminal completed - " + stopwatch.elapsed(TimeUnit.SECONDS)); + } +} diff --git a/src/main/java/space/ao/services/account/backupandrestore/rest/BackupAndRestoreResource.java b/src/main/java/space/ao/services/account/backupandrestore/rest/BackupAndRestoreResource.java new file mode 100644 index 0000000..c9eb8fa --- /dev/null +++ b/src/main/java/space/ao/services/account/backupandrestore/rest/BackupAndRestoreResource.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.backupandrestore.rest; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.support.log.Logged; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.personalinfo.entity.UserEntity; + +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import java.util.List; + +@Path("/v1/api") +@Tag(name = "Backup and restore service", description = "Provides account backup and restore.") +public class BackupAndRestoreResource { + + @Inject + MemberManageService memberManageService; + + /** + * 空间成员创建接口。 + * + * @return 空间成员创建结果。 + * @since 0.3.0 + */ + @GET + @Logged + @Path("/accountinfo") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Transactional + @Operation(description = "Tries to get all member info. Provide only for file service") + public ResponseBase> getAccountMember(@Valid @NotBlank @HeaderParam("Request-Id") String requestId){ + List userList = memberManageService.findAll().list(); + return ResponseBase.okACC(requestId, userList); + } +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/AdminRevokeInfo.java b/src/main/java/space/ao/services/account/deviceinfo/dto/AdminRevokeInfo.java new file mode 100644 index 0000000..91d1019 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/AdminRevokeInfo.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class AdminRevokeInfo { + @NotBlank + @Schema(description = "encryptedClientUUID") + private final String encryptedClientUUID; + + @NotBlank + @Schema(description = "encryptedPasscode") + private final String encryptedPasscode; +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/AdminRevokeResult.java b/src/main/java/space/ao/services/account/deviceinfo/dto/AdminRevokeResult.java new file mode 100644 index 0000000..d7ad6e7 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/AdminRevokeResult.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data(staticConstructor = "of") +public class AdminRevokeResult { + @Schema(description = "返回码") + private final String code; + + @Schema(description = "返回信息") + private final String message; +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/DeviceInfoResult.java b/src/main/java/space/ao/services/account/deviceinfo/dto/DeviceInfoResult.java new file mode 100644 index 0000000..7978c8d --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/DeviceInfoResult.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + + +/** + * 盒子容量总信息 + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +@Data(staticConstructor = "of") +public class DeviceInfoResult { + @Schema(description = "requestId") + private final String requestId; + + @Schema(description = "总容量") + private final String spaceSizeTotal; + + @Schema(description = "已用容量") + private final String spaceSizeUsed; + + @Schema(description = "绑定设备类型") + private final String phoneModel; +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/DeviceStorageInfo.java b/src/main/java/space/ao/services/account/deviceinfo/dto/DeviceStorageInfo.java new file mode 100644 index 0000000..25038fa --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/DeviceStorageInfo.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.dto; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 返回盒子总容量信息 + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor(staticName = "of") +public class DeviceStorageInfo { + private String used; + private String free; + private String total; +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/HardwareInfoRsp.java b/src/main/java/space/ao/services/account/deviceinfo/dto/HardwareInfoRsp.java new file mode 100644 index 0000000..b025ef2 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/HardwareInfoRsp.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data(staticConstructor = "of") +public class HardwareInfoRsp { + @Schema(description = "设备的 btid") + private final String btid; +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/MemberUsedStorageResult.java b/src/main/java/space/ao/services/account/deviceinfo/dto/MemberUsedStorageResult.java new file mode 100644 index 0000000..a64ac40 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/MemberUsedStorageResult.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.dto; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import java.util.Map; + +/** + * 成员所占用盒子空间信息 + * + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +public record MemberUsedStorageResult(@Schema(description = "返回码") String code, + @Schema(description = "message信息") String message, + @Schema(description = "requestId") String requestId, + @Schema(description = "用户") Map results) { + public static MemberUsedStorageResult of(String code, String message, String requestId, Map results) { + return new MemberUsedStorageResult(code, message, requestId, results); + } +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/NetworkChannelInfo.java b/src/main/java/space/ao/services/account/deviceinfo/dto/NetworkChannelInfo.java new file mode 100644 index 0000000..eccde91 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/NetworkChannelInfo.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.account.deviceinfo.dto; + +public class NetworkChannelInfo { + private Boolean lan; + private Boolean p2p; + private Boolean wan; + private String userDomain; + + public static NetworkChannelInfo of(Boolean lan, Boolean p2p, Boolean wan) { + NetworkChannelInfo networkChannelInfo = new NetworkChannelInfo(); + networkChannelInfo.lan = lan; + networkChannelInfo.p2p = p2p; + networkChannelInfo.wan = wan; + return networkChannelInfo; + } + + public void setUserDomain(String userDomain) { + this.userDomain = userDomain; + } + + @Override + public String toString() { + return "NetworkChannelInfo{" + + "lan=" + lan + + ", p2p=" + p2p + + ", wan=" + wan + + ", userDomain=" + userDomain + + '}'; + } +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/SettingInfo.java b/src/main/java/space/ao/services/account/deviceinfo/dto/SettingInfo.java new file mode 100644 index 0000000..47bfeab --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/SettingInfo.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.account.deviceinfo.dto; + +import space.ao.services.account.authorizedterminalinfo.entity.AuthorizedTerminalResult; +import space.ao.services.account.personalinfo.dto.AccountInfoResult; + +import java.util.List; + +public class SettingInfo { + private NetworkChannelInfo networkChannelInfo; + private DeviceInfoResult deviceInfo; + private List memberList; + private List authorizedTerminalResults; + private AccountInfoResult binderInfoResult; + + public void setNetworkChannelInfo(NetworkChannelInfo networkChannelInfo) { + this.networkChannelInfo = networkChannelInfo; + } + + public void setDeviceInfo(DeviceInfoResult deviceInfo) { + this.deviceInfo = deviceInfo; + } + + public void setAccountInfoResults(List memberList) { + this.memberList = memberList; + } + + public void setAuthorizedTerminalResults(List authorizedTerminalResults) { + this.authorizedTerminalResults = authorizedTerminalResults; + } + + public void setBinderInfoResult(AccountInfoResult binderInfoResult) { + this.binderInfoResult = binderInfoResult; + } + + @Override + public String toString() { + return "SettingInfo{" + + "networkChannelInfo=" + networkChannelInfo + + ", deviceInfo=" + deviceInfo + + ", memberList=" + memberList + + ", authorizedTerminalResults=" + authorizedTerminalResults + + ", binderInfoResult=" + binderInfoResult + + '}'; + } +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/UserStorageInfo.java b/src/main/java/space/ao/services/account/deviceinfo/dto/UserStorageInfo.java new file mode 100644 index 0000000..0a08810 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/UserStorageInfo.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.dto; + +public class UserStorageInfo { + private String userStorage; + private String totalStorage; + + public void setUserStorage(String userStorage) { + this.userStorage = userStorage; + } + + public void setTotalStorage(String totalStorage) { + this.totalStorage = totalStorage; + } + + public String getUserStorage() { + return userStorage; + } + + public String getTotalStorage() { + return totalStorage; + } +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/dto/WanChannelSettingInfo.java b/src/main/java/space/ao/services/account/deviceinfo/dto/WanChannelSettingInfo.java new file mode 100644 index 0000000..4d67e18 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/dto/WanChannelSettingInfo.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.account.deviceinfo.dto; + +public record WanChannelSettingInfo(boolean wan) { +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java b/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java new file mode 100644 index 0000000..667a026 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/rest/DeviceInfoResource.java @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.rest; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; + +import org.eclipse.microprofile.rest.client.inject.RestClient; +import space.ao.services.account.deviceinfo.dto.*; +import space.ao.services.account.deviceinfo.service.DeviceStorageService; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.deviceinfo.service.DeviceInfoService; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.AccessToken; + +import java.util.Objects; + +@Path("/v1/api/device") +@Tag(name = "Device storage Service", description = "Provides overall device requests.") +public class DeviceInfoResource{ + @Inject + MemberManageService memberManageService; + + @Inject + @RestClient + DeviceStorageService deviceService; + + @Inject + ApplicationProperties properties; + + @Inject + UserInfoRepository userInfoRepository; + @Inject + DeviceInfoService deviceInfoService; + + /** + * 查询盒子容量信息接口 + * @author suqin + * @date 2021-10-08 21:39:57 + * @param userId userId + * @param requestId requestId + **/ + @GET + @Logged + @Path("/storage/info") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to get storage information and terminal type.") + public DeviceInfoResult deviceInfoResult(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId) { + var userEntity = memberManageService.findByUserId(userId); + if(userEntity == null) {throw new ServiceOperationException(ServiceError.USER_NOT_FOUND);} + ResponseBase rsp = deviceService.getStorageInfo(requestId); + var adminEntity = userInfoRepository.findByRole(UserEntity.Role.ADMINISTRATOR); + return DeviceInfoResult.of(requestId, rsp.results().getTotal(),rsp.results().getUsed(), adminEntity.getPhoneModel()); + } + + /** + * 查询硬件信息接口 (since 1.0.7) + * @param userId userId + * @param requestId requestId + * @return 设备硬件信息 + */ + @GET + @Logged + @Path("/hardware/info") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "获取设备硬件信息 (since 1.0.7)") + public ResponseBase hardwareInfo(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid) { + var hardwareInfoRsp = HardwareInfoRsp.of(properties.boxBtid()); + return ResponseBase.okACC(requestId, hardwareInfoRsp); + } + + @POST + @Logged + @Path("/network/channel/wan") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "网络通道信息") + public ResponseBase setNetworkChannel(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + WanChannelSettingInfo wanChannelSettingInfo) { + var userEntity = memberManageService.findByUserId(userId); + if (userEntity.getRole() == UserEntity.Role.ADMINISTRATOR && Objects.equals(clientUUid, userEntity.getClientUUID())) { + var networkChannelInfo = deviceInfoService.setInternetAccess(requestId, wanChannelSettingInfo.wan()); + networkChannelInfo.setUserDomain(userEntity.getUserDomain()); + return ResponseBase.okACC(requestId, networkChannelInfo); + } else { + throw new ServiceOperationException(ServiceError.NO_MODIFY_RIGHTS); + } + } + + /** + * 盒子&用户 设置信息 + */ + @GET + @Logged + @Path("/setting/info") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "盒子&用户 设置信息") + public ResponseBase settingInfo(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid) { + UserEntity userinfo = memberManageService.findByUserId(userId); + if (userinfo == null) { + throw new ServiceOperationException(ServiceError.INVALID_USER_ID); + } + SettingInfo settingInfo = new SettingInfo(); + settingInfo.setNetworkChannelInfo(deviceInfoService.getNetworkChannelInfo()); + settingInfo.setDeviceInfo(deviceInfoService.getDeviceInfo(userId)); + settingInfo.setAccountInfoResults(deviceInfoService.getMemberList(requestId)); + settingInfo.setAuthorizedTerminalResults(deviceInfoService.getAuthorizedTerminal(userinfo)); + settingInfo.setBinderInfoResult(deviceInfoService.getBinderInfo(requestId, userinfo)); + return ResponseBase.okACC(requestId, settingInfo); + } +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java b/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java new file mode 100644 index 0000000..ef34af7 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/service/DeviceInfoService.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.account.deviceinfo.service; + +import org.eclipse.microprofile.rest.client.inject.RestClient; +import space.ao.services.account.authorizedterminalinfo.entity.AuthorizedTerminalResult; +import space.ao.services.account.deviceinfo.dto.DeviceInfoResult; +import space.ao.services.account.deviceinfo.dto.DeviceStorageInfo; +import space.ao.services.account.deviceinfo.dto.NetworkChannelInfo; +import space.ao.services.account.personalinfo.dto.AccountInfoResult; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.temp.TempInfoHandleService; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@ApplicationScoped +public class DeviceInfoService { + @Inject + MemberManageService memberManageService; + + @Inject + @RestClient + DeviceStorageService deviceStorageService; + + @Inject + UserInfoRepository userInfoRepository; + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + @Inject + OperationUtils operationUtils; + @Inject + TempInfoHandleService tempInfoHandleService; + @Logged + public DeviceInfoResult getDeviceInfo(String requestId){ + ResponseBase rsp = deviceStorageService.getStorageInfo(requestId); + var adminEntity = userInfoRepository.findByRole(UserEntity.Role.ADMINISTRATOR); + return DeviceInfoResult.of(requestId, rsp.results().getTotal(), rsp.results().getUsed(), adminEntity.getPhoneModel()); + } + + public List getMemberList(String requestId){ + return memberManageService.getMemberList(requestId); + } + + public List getAuthorizedTerminal(UserEntity userInfo) { + List result = new ArrayList<>(); + for (var terminal: authorizedTerminalRepository.findByUserid(userInfo.getId())){ + if(terminal.getExpireAt().isAfter(OffsetDateTime.now())) { + result.add(AuthorizedTerminalResult.of(terminal.getAoid(), terminal.getUuid(), terminal.getTerminalMode(), + terminal.getTerminalType(), terminal.getLoginAt(), terminal.getAddress(), true)); + } + } + return result; + } + + public AccountInfoResult getBinderInfo(String requestId, UserEntity userInfo) { + return memberManageService.getMemberInfo(requestId, userInfo); + } + + public NetworkChannelInfo getNetworkChannelInfo() { + var internetAccess = operationUtils.getEnableInternetAccess(); + return NetworkChannelInfo.of(true, false, internetAccess); + } + + @Transactional + public NetworkChannelInfo setInternetAccess(String requestId, boolean enableInternetAccess) { + operationUtils.loadInternetServiceConfig(requestId); + var internetAccess = operationUtils.getEnableInternetAccess(); + if (!Objects.equals(internetAccess, enableInternetAccess)) { + throw new ServiceOperationException(ServiceError.INIT_UTIL_FAILED); + } + if (enableInternetAccess){ + tempInfoHandleService.handleTempInfo(); + } + return NetworkChannelInfo.of(true, false, internetAccess); + } +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/service/DeviceStorageService.java b/src/main/java/space/ao/services/account/deviceinfo/service/DeviceStorageService.java new file mode 100644 index 0000000..e24016a --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/service/DeviceStorageService.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.service; + +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.HeaderParam; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.deviceinfo.dto.DeviceStorageInfo; + +@RegisterRestClient(configKey="device-storage-api") +public interface DeviceStorageService { + @GET + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + ResponseBase getStorageInfo(@HeaderParam("Request-Id") @NotBlank String requestId); +} diff --git a/src/main/java/space/ao/services/account/deviceinfo/service/FileOperatorService.java b/src/main/java/space/ao/services/account/deviceinfo/service/FileOperatorService.java new file mode 100644 index 0000000..dc2cc27 --- /dev/null +++ b/src/main/java/space/ao/services/account/deviceinfo/service/FileOperatorService.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.deviceinfo.service; +import jakarta.validation.constraints.NotNull; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.*; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.deviceinfo.dto.UserStorageInfo; + +@RegisterRestClient(configKey="file-api") +public interface FileOperatorService { + @GET + @Path("/user/storage") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + ResponseBase getUserStorageInfo(@HeaderParam("Request-Id") @NotBlank String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + @Valid @NotBlank @QueryParam("targetUserId") String targetUserId); + + + @POST + @Path("/user/init") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + ResponseBase fileUserInitial(@HeaderParam("Request-Id") @NotBlank String requestId, + @Valid @NotNull @QueryParam("userId") Long userid, + @QueryParam("spaceLimit") Long spaceLimit); + + @POST + @Path("/user/delete") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + ResponseBase fileUserDelete(@HeaderParam("Request-Id") @NotBlank String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + String targetUserId); +} diff --git a/src/main/java/space/ao/services/account/member/AdminCallOnly.java b/src/main/java/space/ao/services/account/member/AdminCallOnly.java new file mode 100644 index 0000000..22d6207 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/AdminCallOnly.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member; + +import jakarta.interceptor.InterceptorBinding; +import java.lang.annotation.Documented; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 该注解用于标示和拦截基于网关 call 调用的的请求 method,使其调用仅限 + * 于管理员。 + */ +@Target({ TYPE, METHOD }) +@Retention(RUNTIME) +@Documented +@Inherited +@InterceptorBinding +public @interface AdminCallOnly { + /** + * 用户 id 在参数列表的位置(index),默认为 1。 + * @return 返回用户 id 在参数列表中的位置(index)。 + */ + int userIdAt() default 1; +} diff --git a/src/main/java/space/ao/services/account/member/AdminCallOnlyInterceptor.java b/src/main/java/space/ao/services/account/member/AdminCallOnlyInterceptor.java new file mode 100644 index 0000000..d91ba4b --- /dev/null +++ b/src/main/java/space/ao/services/account/member/AdminCallOnlyInterceptor.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member; + +import org.jboss.logging.Logger; + +import jakarta.interceptor.AroundInvoke; +import jakarta.interceptor.Interceptor; +import jakarta.interceptor.InvocationContext; +import jakarta.ws.rs.ForbiddenException; + +/** + * 该拦截器用于拦截和验证被 {@link AdminCallOnly} 标识的方法是否 + * 具有管理用户 id 的参数,如果是非管理的用户 id 则直接抛出 {@link ForbiddenException} + * 的异常。 + */ +@AdminCallOnly +@Interceptor +@SuppressWarnings("unused") // Used by the framework +public class AdminCallOnlyInterceptor { + + private static final String ADMIN_ID = "1"; + + private static final Logger LOG = Logger.getLogger("app.log"); + + @AroundInvoke + Object logInvocation(InvocationContext ctx) throws Exception { + int at = ctx.getMethod().getAnnotation(AdminCallOnly.class).userIdAt(); + String userId = (String) ctx.getParameters()[at]; + if (!ADMIN_ID.equals(userId)) { + throw new ForbiddenException("It is for administrator use only"); + } + return ctx.proceed(); + } +} diff --git a/src/main/java/space/ao/services/account/member/dto/AdminBindInfo.java b/src/main/java/space/ao/services/account/member/dto/AdminBindInfo.java new file mode 100644 index 0000000..f7b38c8 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/AdminBindInfo.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import jakarta.validation.constraints.Pattern; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data +@AllArgsConstructor(staticName = "of") +@NoArgsConstructor +public class AdminBindInfo { + @NotBlank + @Schema(description = "clientUUID") + private String clientUUID; + + @NotBlank + @Schema(description = "phoneModel") + private String phoneModel; + + @Schema(description = "applyEmail") + private String applyEmail; + + @Schema(description = "spaceName") + @Pattern(regexp = Const.SPACE_NAME_REG) + private String spaceName; + + @NotBlank + @Schema(description = "管理员密码") + private String password; + + @Schema(description = "enableInternetAccess") + private Boolean enableInternetAccess; +} diff --git a/src/main/java/space/ao/services/account/member/dto/AdminBindResult.java b/src/main/java/space/ao/services/account/member/dto/AdminBindResult.java new file mode 100644 index 0000000..5c6e82b --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/AdminBindResult.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record AdminBindResult(@Schema(description = "随机32位密钥") String authKey, + @Schema(description = "userdomain") String userDomain, + @Schema(description = "boxuuid") String boxUuid, + @Schema(description = "用户clientUUID") String clientUUID, + @Schema(description = "boxname") String boxName, + @Schema(description = "用户aoId") String aoId, + @Schema(description = "空间标识") String spaceName, + @Schema(description = "头像 url") String avatarUrl) { + public static AdminBindResult of(String authKey, String userDomain, String boxUuid, String clientUUID, String boxName, String aoId, String spaceName, String avatarUrl) { + return new AdminBindResult(authKey, userDomain, boxUuid, clientUUID, boxName, aoId, spaceName, avatarUrl); + } +} diff --git a/src/main/java/space/ao/services/account/member/dto/AdminPasswdInfo.java b/src/main/java/space/ao/services/account/member/dto/AdminPasswdInfo.java new file mode 100644 index 0000000..91a848c --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/AdminPasswdInfo.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data +@NoArgsConstructor +public class AdminPasswdInfo { + @NotBlank + @Schema(description = "管理员密码") + private String password; +} diff --git a/src/main/java/space/ao/services/account/member/dto/ClientPairStatusEnum.java b/src/main/java/space/ao/services/account/member/dto/ClientPairStatusEnum.java new file mode 100644 index 0000000..b10b4ea --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/ClientPairStatusEnum.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.account.member.dto; + +/** + * @author zhichuang + **/ +public enum ClientPairStatusEnum { + + CLIENT_PAIRED("0", "已经配对"), + CLIENT_UNPAIRED_NEW_BOX("1", "新盒子"), + CLIENT_UNPAIRED_UNBIND("2", "已解绑"); + + private final String status; + private final String description; + + ClientPairStatusEnum(String status, String description) { + this.status = status; + this.description = description; + } + + public String getStatus() { + return status; + } + + public String getDescription() { + return description; + } + +} diff --git a/src/main/java/space/ao/services/account/member/dto/Const.java b/src/main/java/space/ao/services/account/member/dto/Const.java new file mode 100644 index 0000000..9c1fdd7 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/Const.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +public final class Const { + private Const() {} + + public static final class Admin { + private Admin() {} + public static final String ADMIN_AOID = "aoid-1"; + public static final String ADMIN_ID = "1"; + } + + public static final String SPACE_NAME_REG = "^[a-zA-Z0-9\\u4e00-\\u9fa5\\`~!@#$%^&*()-_+=|{}':;',\\\\[\\\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]{1,24}$"; + +} diff --git a/src/main/java/space/ao/services/account/member/dto/DevOptionsSwitch.java b/src/main/java/space/ao/services/account/member/dto/DevOptionsSwitch.java new file mode 100644 index 0000000..183d0d0 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/DevOptionsSwitch.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +public class DevOptionsSwitch { + public static DevOptionsSwitch of(String status) { + if (!"on".equalsIgnoreCase(status) && !"off".equalsIgnoreCase(status)) { + throw new IllegalArgumentException("status can only be 'on' or 'off'"); + } + var s = new DevOptionsSwitch(); + { + s.status = status.toLowerCase(); + } + return s; + } + + @NotBlank @Schema(enumeration = {"on", "off"}, description = "开关状态: on, off") public String status; +} diff --git a/src/main/java/space/ao/services/account/member/dto/MemberCreateInfo.java b/src/main/java/space/ao/services/account/member/dto/MemberCreateInfo.java new file mode 100644 index 0000000..a45cc36 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/MemberCreateInfo.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +/** + * 创建成员的信息. + * + * @author suqin + * @date 2021-10-12 21:40:10 + **/ +@RegisterForReflection +public record MemberCreateInfo(@NotBlank @Schema(description = "用户绑定盒子邀请码") String inviteCode, + @NotBlank @Schema(description = "用户绑定盒子clientUUID") String clientUUID, + @NotBlank @Schema(description = "绑定手机的型号") String phoneModel, + @Schema(description = "绑定手机的类型") String phoneType, + @NotBlank @Schema(description = "用户昵称") String nickName, + @Schema(description = "用户申请邮箱") String applyEmail) { + public static MemberCreateInfo of(@NotBlank String inviteCode, + @NotBlank String clientUUID, + @NotBlank String phoneModel, + String phoneType, + @NotBlank String nickName, + String applyEmail) { + return new MemberCreateInfo(inviteCode, clientUUID, phoneModel, phoneType, nickName, applyEmail); + } +} diff --git a/src/main/java/space/ao/services/account/member/dto/MemberCreateResult.java b/src/main/java/space/ao/services/account/member/dto/MemberCreateResult.java new file mode 100644 index 0000000..6a231a6 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/MemberCreateResult.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +/** + * 成员创建后的返回信息. + * @author suqin + * @date 2021-10-12 21:40:10 + **/ +public record MemberCreateResult(@Schema(description = "随机32位密钥") String authKey, + @Schema(description = "用户userid") String userid, + @Schema(description = "用户clientUUID") String clientUUID, + @Schema(description = "用户aoId") String aoId, + @Schema(description = "用户userdomain") String userDomain, + @JsonIgnore String phoneModel, @JsonIgnore String phoneType) { + + public static MemberCreateResult of(String authKey, String userid, String clientUUID, String aoId, String userDomain) { + return new MemberCreateResult(authKey, userid, clientUUID, aoId, userDomain, null, null); + } + + public MemberCreateResult setPhoneModel(String phoneModel) { + return new MemberCreateResult(authKey(), userid(), clientUUID(), aoId(), userDomain(), phoneModel, phoneType()); + } +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/account/member/dto/MemberDeleteResult.java b/src/main/java/space/ao/services/account/member/dto/MemberDeleteResult.java new file mode 100644 index 0000000..b0f57f2 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/MemberDeleteResult.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data(staticConstructor = "of") +@RegisterForReflection +public class MemberDeleteResult { + @Schema(description = "用户clientUUID") + private final String clientUUID; + @Schema(description = "用户aoId") + private final String aoId; + @Schema(description = "用户userdomain") + private final String userDomain; +} diff --git a/src/main/java/space/ao/services/account/member/dto/MemberNameUpdateInfo.java b/src/main/java/space/ao/services/account/member/dto/MemberNameUpdateInfo.java new file mode 100644 index 0000000..b31772c --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/MemberNameUpdateInfo.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.account.member.dto; + +import jakarta.validation.constraints.Pattern; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +/** + * 管理员修改成员信息. + * + * @author suqin + * @date 2021-10-12 21:40:10 + **/ +public record MemberNameUpdateInfo(@NotBlank @Schema(description = "被修改者的aoId") String aoId, + @NotBlank @Pattern(regexp = Const.SPACE_NAME_REG) @Schema(description = "需要修改的昵称") String nickName) { + public static MemberNameUpdateInfo of(String aoId, String nickName) { + return new MemberNameUpdateInfo(aoId, nickName); + } +} + diff --git a/src/main/java/space/ao/services/account/member/dto/PasswdTryInfo.java b/src/main/java/space/ao/services/account/member/dto/PasswdTryInfo.java new file mode 100644 index 0000000..b5abc8a --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/PasswdTryInfo.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class PasswdTryInfo { + @NotBlank + @Schema(description = "boxUUID") + private final String boxUUID; + + @NotBlank + @Schema(description = "失败次数") + private final int errorTimes; + + @NotBlank + @Schema(description = "剩余尝试次数") + private final int leftTryTimes; + + @NotBlank + @Schema(description = "用户剩余时间") + private final long tryAfterSeconds; +} diff --git a/src/main/java/space/ao/services/account/member/dto/PlatformInfo.java b/src/main/java/space/ao/services/account/member/dto/PlatformInfo.java new file mode 100644 index 0000000..1ce5383 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/PlatformInfo.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +public record PlatformInfo(String ssplatformUrl) { + public static PlatformInfo of(String ssplatformUrl) { + return new PlatformInfo(ssplatformUrl); + } +} diff --git a/src/main/java/space/ao/services/account/member/dto/SpaceBootstrapTypeEnum.java b/src/main/java/space/ao/services/account/member/dto/SpaceBootstrapTypeEnum.java new file mode 100644 index 0000000..665605e --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/SpaceBootstrapTypeEnum.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public enum SpaceBootstrapTypeEnum { + SpaceBootstrapTypeBox("box"), + SpaceBootstrapTypePc("pc"), + SpaceBootstrapTypeOnline("online"); + + private final String name; + + /** + * -100 到 -199 当前 -100 虚拟机版本 + * -200 到 -299 当前 -200 云试用容器版本 + * -300 到 -399 当前 -300 PC容器版本 + * 100 到 199 当前 100 一代树莓派 + * 200 到 209 当前 200 二代开发板 + * 210 到 299当 前 210 二代正式板 + * @param boxDeviceModelNumber 设备种类编号 + */ + public static SpaceBootstrapTypeEnum getSpaceBootstrapType(Long boxDeviceModelNumber){ + if(boxDeviceModelNumber > 0){ + return SpaceBootstrapTypeBox; + } + + if(boxDeviceModelNumber <= -200 && boxDeviceModelNumber >= -299){ + return SpaceBootstrapTypeOnline; + } + + return SpaceBootstrapTypeBox; + } + +} diff --git a/src/main/java/space/ao/services/account/member/dto/migration/BoxMigrationInfo.java b/src/main/java/space/ao/services/account/member/dto/migration/BoxMigrationInfo.java new file mode 100644 index 0000000..582306d --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/migration/BoxMigrationInfo.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto.migration; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import java.util.List; + +/** + * 盒子割接信息 + */ +public record BoxMigrationInfo( + @Schema(description = "network client id;传参为空时将由平台重新生成") String networkClientId, + @Valid @NotEmpty @Schema(description = "用户列表") List userInfos) { + public static BoxMigrationInfo of(String networkClientId, List userInfos) { + return new BoxMigrationInfo(networkClientId, userInfos); + } +} diff --git a/src/main/java/space/ao/services/account/member/dto/migration/ClientMigrationInfo.java b/src/main/java/space/ao/services/account/member/dto/migration/ClientMigrationInfo.java new file mode 100644 index 0000000..e13fed7 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/migration/ClientMigrationInfo.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto.migration; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.platform.info.registry.RegistryTypeEnum; +import space.ao.services.support.validator.ValueOfEnum; + +import jakarta.validation.constraints.NotBlank; + +/** + * 客户端割接信息 + */ +public record ClientMigrationInfo(@NotBlank @Schema(description = "客户端的 UUID") String clientUUID, + @NotBlank @Schema(description = "客户端类型(绑定、扫码授权),取值:client_bind、client_auth") @ValueOfEnum(enumClass = RegistryTypeEnum.class, valueMethod = "getName") String clientType) { + public static ClientMigrationInfo of(String clientUUID, String clientType) { + return new ClientMigrationInfo(clientUUID, clientType); + } +} diff --git a/src/main/java/space/ao/services/account/member/dto/migration/UserMigrationInfo.java b/src/main/java/space/ao/services/account/member/dto/migration/UserMigrationInfo.java new file mode 100644 index 0000000..41f310f --- /dev/null +++ b/src/main/java/space/ao/services/account/member/dto/migration/UserMigrationInfo.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.dto.migration; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.platform.info.registry.RegistryTypeEnum; +import space.ao.services.support.validator.ValueOfEnum; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import java.util.List; + +/** + * 用户割接信息 + */ +public record UserMigrationInfo(@NotBlank @Schema(description = "用户的 ID") String userId, + @NotBlank @Schema(description = "用户被指定的用户域名字段") String userDomain, + @Schema(description = "用户类型(管理员、普通成员),取值:user_admin、user_member") + @ValueOfEnum(enumClass = RegistryTypeEnum.class, valueMethod = "getName") String userType, + @Valid @Schema(description = "Client 列表") List clientInfos) { + public static UserMigrationInfo of(String userId, String userDomain, String userType, List clientInfos) { + return new UserMigrationInfo(userId, userDomain, userType, clientInfos); + } +} diff --git a/src/main/java/space/ao/services/account/member/entity/BoxInfoEntity.java b/src/main/java/space/ao/services/account/member/entity/BoxInfoEntity.java new file mode 100644 index 0000000..585e29f --- /dev/null +++ b/src/main/java/space/ao/services/account/member/entity/BoxInfoEntity.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.entity; + +import lombok.*; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; + +import jakarta.persistence.*; + +@Entity +@Getter +@Setter +@Table(name = "box_info") +@ToString +public class BoxInfoEntity extends PanacheEntityBase{ + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + /** + * 平台切换到 v2 接口废弃此参数,强制升级 APP 之后删除 + */ + @Column(name = "box_regkey") + private String boxRegKey; + + @Column(name = "passcode") + private String passcode; + + @Column(name = "security_email") + private String securityEmail; + + @Column(name = "security_email_host") + private String securityEmailHost; + + @Column(name = "security_email_port") + private String securityEmailPort; + + @Column(name = "security_email_ssl_enable") + private Boolean securityEmailSslEnable; +} diff --git a/src/main/java/space/ao/services/account/member/respository/BoxInfoRepository.java b/src/main/java/space/ao/services/account/member/respository/BoxInfoRepository.java new file mode 100644 index 0000000..6ac633f --- /dev/null +++ b/src/main/java/space/ao/services/account/member/respository/BoxInfoRepository.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.respository; + +import io.quarkus.hibernate.orm.panache.PanacheRepository; +import org.jboss.logging.Logger; +import space.ao.services.account.member.entity.BoxInfoEntity; +import space.ao.services.support.log.Logged; + +import jakarta.inject.Singleton; +import jakarta.transaction.Transactional; + + +@Singleton +public class BoxInfoRepository implements PanacheRepository { + private static final Logger LOG = Logger.getLogger("app.log"); + + /** + * 插入boxregkey和passcode的记录,该记录有且只有一条 + * @author suqin + * @param boxRegKey 盒子注册密钥 + * @param passcode 盒子密码 + * @date 2021-10-08 21:39:57 + **/ + @Transactional + public BoxInfoEntity insertOrUpdate(String boxRegKey, String passcode) { + var boxInfo = new BoxInfoEntity(); + boxInfo.setBoxRegKey(boxRegKey); + boxInfo.setPasscode(passcode); + + if(findAll().list().isEmpty()){ + boxInfo.persist(); + } else { + this.update("set boxRegKey=?1, passcode=?2", boxRegKey, passcode); + } + return boxInfo; + } + + @Transactional + public BoxInfoEntity create() { + var boxInfo = new BoxInfoEntity(); + if(findAll().list().isEmpty()){ + boxInfo.persist(); + } else { + boxInfo = findById(1L); + } + return boxInfo; + } + + @Transactional + public int update(String email, String host, String port, boolean securityEmailSslEnable){ + return this.update("set securityEmail=?1, securityEmailHost=?2, " + + "securityEmailPort=?3, securityEmailSslEnable=?4", email, host, port, securityEmailSslEnable); + } + + @Logged + @Transactional + public String getAnyBoxRegKey() { + var boxInfo = findAll().firstResult(); + return boxInfo != null ? boxInfo.getBoxRegKey() : null; + } + + + public String getEmail(){ + var boxInfo = findAll().firstResult(); + return boxInfo != null ? boxInfo.getSecurityEmail() : null; + } + + @Logged + public boolean setPasscode(String requestId, String password){ + LOG.infov("requestId: {0} , set passcode: {1}", requestId, password); + return 1 == update("passcode = ?1 where id=1", password); + } + @Logged + public String getPasscode(String requestId){ + var boxInfo = findById(1L); + LOG.infov("requestId: {0} , get boxInfo: {1}", requestId, boxInfo); + return boxInfo.getPasscode(); + } +} diff --git a/src/main/java/space/ao/services/account/member/rest/AdminUserResource.java b/src/main/java/space/ao/services/account/member/rest/AdminUserResource.java new file mode 100644 index 0000000..c423fb6 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/rest/AdminUserResource.java @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.rest; + +import jakarta.validation.constraints.NotNull; +import org.apache.commons.codec.digest.DigestUtils; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.jboss.logging.Logger; +import space.ao.services.account.member.AdminCallOnly; +import space.ao.services.account.member.dto.*; +import space.ao.services.account.member.service.DevOptionsService; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.account.security.utils.SecurityPasswordUtils; +import space.ao.services.account.support.service.MemberBasicAttribute; +import space.ao.services.account.support.service.ServiceDefaultVar; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.FileUtils; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.member.entity.BoxInfoEntity; +import space.ao.services.account.member.respository.BoxInfoRepository; +import space.ao.services.account.personalinfo.entity.UserEntity; + +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import java.io.File; +import java.io.FileInputStream; +import java.util.Map; +import java.util.Objects; + +@Path("/v1/api") +@Tag(name = "Admin user service", description = "Provide admin user revoke/bind requests.") +public class AdminUserResource { + @Inject + ApplicationProperties properties; + + @Inject + OperationUtils utils; + @Inject + SecurityPasswordUtils securityPasswordUtils; + @Inject + BoxInfoRepository boxInfoRepository; + + @Inject + MemberManageService memberManageService; + + @Inject + UserInfoRepository userInfoRepository; + + @Inject + DevOptionsService devOptionsService; + + static final Logger LOG = Logger.getLogger("app.log"); + + + /** + * 创建密码。 + * @param requestId 请求id + * @param adminPasswdInfo 管理员密码信息 + * @return 管理员创建结果。 + * @since 0.3.0 + */ + @POST + @Logged + @Path("/admin/passwd/set") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Transactional + @Operation(description = "Tries to create administrator into database.") + public ResponseBase adminPasswdCreate(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid AdminPasswdInfo adminPasswdInfo) { + var boxInfo = boxInfoRepository.findAll().firstResult(); + if(Objects.nonNull(boxInfo)){ + securityPasswordUtils.doModifyPasscode(requestId, adminPasswdInfo.getPassword()); + } else { + return ResponseBase.forbidden(requestId, null); + } + return ResponseBase.okACC(requestId, null); + } + + /** + * 查询盒子信息和安全密码 + * @param requestId 请求id + * @return 管理员创建结果。 + * @since 0.3.0 + */ + @GET + @Logged + @Path("/admin/passwd/get") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Transactional + @Operation(description = "Tries to create administrator into database.") + public ResponseBase adminPasswdGet(@Valid @NotBlank @HeaderParam("Request-Id") String requestId) { + var boxInfo = boxInfoRepository.findAll().firstResult(); + return ResponseBase.okACC(requestId, boxInfo); + } + + /** + * 校验盒子信息和安全密码 + * @param requestId 请求 id + * @return 管理员创建结果。 + * @since 0.3.0 + */ + @GET + @Logged + @Path("/admin/passwd/check") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Transactional + @Operation(description = "Tries to create administrator into database.") + public ResponseBase adminPasswdCheck(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @NotBlank @FormParam("passcode") String passCode) { + if(securityPasswordUtils.doVerifyPasscode(requestId, passCode)){ + return ResponseBase.okACC(requestId, true); + }else{ + return ResponseBase.forbidden("passcode error", requestId); + } + } + + /** + * 初始话成功标志 + * @param requestId 请求id + * @param flag 初始话成功标志 + * @return 管理员创建结果。 + * @since 0.8.0 + */ + @POST + @Logged + @Path("/admin/inital/status") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Transactional + @Operation(description = "admin initial status") + public ResponseBase adminStatus(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @NotNull @FormParam("flag") Boolean flag, + @Valid @NotBlank @FormParam("password") String password) { + + if(!securityPasswordUtils.doVerifyPasscode(requestId, password)){ + return ResponseBase.forbidden("passcode error", requestId); + } + + Map adminInfo = utils.readFromFile(new File(properties.accountDataLocation() + ServiceDefaultVar.DEFAULT_DATA_FILE)); + + if(Boolean.FALSE.equals(flag)){ // 初始化成功标志 + boolean resetResult = false; + if(adminInfo.get(MemberBasicAttribute.STATUS.toString()).equals("1")){ //盒子第一次初始化失败了 + resetResult = securityPasswordUtils.doResetPasscode(requestId); //重置安全密码 + } + return ResponseBase.forbidden("initial failed, reset passcode: " + resetResult, requestId); + } else { + var userEntityAdmin = userInfoRepository.findByRole(UserEntity.Role.ADMINISTRATOR); + + if(adminInfo.get(MemberBasicAttribute.STATUS.toString()).equals("1") && userEntityAdmin == null) { + var userEntity = new UserEntity(UserEntity.Role.ADMINISTRATOR, + "ao_" + adminInfo.get(MemberBasicAttribute.USERDOMAIN.toString()).split("\\.")[0], + adminInfo.get(MemberBasicAttribute.USERDOMAIN.toString()), Const.Admin.ADMIN_AOID); + + //创建管理员头像路径 + var adminImageFile = new File(properties.accountImageLocation() + Const.Admin.ADMIN_AOID); + if(adminImageFile.exists() || adminImageFile.mkdirs()) { + var imagePath = ServiceDefaultVar.DEFAULT_IMAGE_PATH + ServiceDefaultVar.DEFAULT_AVATAR_FILE.toString(); + var defaultImage = new File(adminImageFile, ServiceDefaultVar.DEFAULT_AVATAR_FILE.toString()); + FileUtils.saveFileToLocal(imagePath, defaultImage); + try{ + userEntity.setImageMd5(DigestUtils.md5Hex(new FileInputStream(defaultImage))); + } catch (Exception e) { + LOG.error("get admin default image md5 failed"); + userEntity.setImageMd5(null); + } + userEntity.setImage(defaultImage.getPath()); + } else { + throw new ServiceOperationException(ServiceError.PROFILE_PHOTO_INIT_FAILED); + } + userInfoRepository.insertAdminUser(userEntity); + } + if(adminInfo.containsKey(MemberBasicAttribute.APPLYEMAIL.toString())) { + userInfoRepository.update("set clientUUID=?1, phoneModel=?2, authKey=?3, userDomain=?4, applyEmail=?5 where id=1", + adminInfo.get(MemberBasicAttribute.CIENTUUID.toString()), + adminInfo.get(MemberBasicAttribute.PHONEMODEL.toString()), + adminInfo.get(MemberBasicAttribute.AUTHKEY.toString()), + adminInfo.get(MemberBasicAttribute.USERDOMAIN.toString()), + adminInfo.get(MemberBasicAttribute.APPLYEMAIL.toString())); + }else{ + userInfoRepository.update("set clientUUID=?1, phoneModel=?2, authKey=?3, userDomain=?4 where id=1", + adminInfo.get(MemberBasicAttribute.CIENTUUID.toString()), + adminInfo.get(MemberBasicAttribute.PHONEMODEL.toString()), + adminInfo.get(MemberBasicAttribute.AUTHKEY.toString()), + adminInfo.get(MemberBasicAttribute.USERDOMAIN.toString())); + } + + adminInfo.put(MemberBasicAttribute.STATUS.toString(), "0"); + utils.writeToFile(new File(properties.accountDataLocation() + ServiceDefaultVar.DEFAULT_DATA_FILE), adminInfo); + return ResponseBase.okACC(requestId, true); + } + } + + /** + * 撤回对于指定用户的客户端授权信息。该接口支持对任意已存在的用户进行操作(包括管理员)。 + * + * @param requestId 请求 id + * @param userId userId 指定的用户 id + * @return 请求响应,ACC-200:请求成功,ACC-404:用户不存在,ACC-500:内部状态错误(可重试)。 + * @since 0.4.0 + */ + @Logged + @POST + @Path("/user/client/revoke") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_FORM_URLENCODED) + @Operation(description = "撤回对于指定用户的客户端授权信息。该接口支持对任意已存在的用户进行操作(包括管理员)。") + @Transactional + public ResponseBase revokeUserClientInfo( + @Valid @NotBlank @Schema(description = "请求 id") @HeaderParam("Request-Id") String requestId, + @Valid @NotBlank @Schema(description = "指定撤回的用户 id") @FormParam ("userid") String userId, + @Valid @Schema(description = "passcode") @FormParam ("passcode") String passcode, + @Valid @Schema(description = "clientUUID") @FormParam ("clientUUID") String clientUUID) { + UserEntity userInfo = memberManageService.findByUserId(userId); + if (userInfo == null) { + return ResponseBase.of(ServiceDefaultVar.ACCOUNT_USER_NOT_FOUND.toString(), ServiceError.USER_NOT_FOUND.getMessage(), requestId, null); + } + return memberManageService.revokeUserClientInfo(userId, requestId, passcode, clientUUID); + } + + @GET + @Path("/admin/dev-options/switch") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "获得当前开发者选项开关状态") + @AdminCallOnly + public ResponseBase getDevOptionsSwitch( + @NotBlank @Schema(description = "请求 id") @HeaderParam("Request-Id") String requestId, + @NotBlank @Schema(description = "用户 id(客户端无需提供)") @QueryParam("userId") String userId) { + return ResponseBase.okACC(requestId, DevOptionsSwitch.of(devOptionsService.getPermissionStatus())); + } + + @POST + @Path("/admin/dev-options/switch") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "修改当前开发者选项开关状态") + @AdminCallOnly + public ResponseBase updateDevOptionsSwitch( + @NotBlank @Schema(description = "请求 id") @HeaderParam("Request-Id") String requestId, + @NotBlank @Schema(description = "用户 id(客户端无需提供)") @QueryParam("userId") String userId, + @Valid @Schema(description = "修改开关信息") DevOptionsSwitch devOptionsSwitch) { + devOptionsService.setPermissionStatus(devOptionsSwitch.status); + return ResponseBase.okACC(requestId, true); + } + +} diff --git a/src/main/java/space/ao/services/account/member/rest/MemberManageResource.java b/src/main/java/space/ao/services/account/member/rest/MemberManageResource.java new file mode 100644 index 0000000..8962163 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/rest/MemberManageResource.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.rest; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import space.ao.services.account.deviceinfo.dto.UserStorageInfo; +import space.ao.services.account.deviceinfo.service.DeviceStorageService; +import space.ao.services.account.member.dto.MemberCreateResult; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.support.log.Logged; + + +@Path("/v1/api") +@Tag(name = "Member manage service", description = "Provides member create/delete requests.") +public class MemberManageResource { + + @Inject + MemberManageService memberManageService; + + @Inject + @RestClient + DeviceStorageService deviceStorageService; + + /** + * 查询账户接口. + * @author suqin + * @date 2021-10-12 21:40:10 + * @param clientUUID 客户端id + **/ + @GET + @Logged + @Path("/user") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to get member info from database.") + public ResponseBase userQueryInfo(@Valid @QueryParam("client_uuid") String clientUUID, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId){ + + UserEntity userInfo = memberManageService.findByClientUUID(clientUUID); + if(userInfo == null){ + return ResponseBase.of("ACC-403", ServiceError.USER_NOT_FOUND.getMessage(), requestId, null); + } + return ResponseBase.of("ACC-200","OK", requestId, + MemberCreateResult.of(userInfo.getAuthKey(),String.valueOf(userInfo.getId()), clientUUID, userInfo.getAoId(), userInfo.getUserDomain())); + } + + /** + * 根据userId查询clientUUID. + * @author suqin + * @date 2021-10-12 21:40:10 + * @param userId userId + **/ + @GET + @Logged + @Path("/user/clientuuid") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to get member info from database.") + public ResponseBase userQueryByUserId(@Valid @NotBlank @QueryParam("userid") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId){ + UserEntity userInfo = memberManageService.findByUserId(userId); + if(userInfo == null){ + return ResponseBase.of("ACC-403", ServiceError.USER_NOT_FOUND.getMessage(), requestId, null); + } + return ResponseBase.of("ACC-200","OK", requestId, + MemberCreateResult.of(userInfo.getAuthKey(),String.valueOf(userInfo.getId()), + userInfo.getClientUUID(),userInfo.getAoId(), userInfo.getUserDomain())); + } + + + + /** + * 查询各用户占用空间信息 + * @author suqin + * @date 2021-10-08 21:39:57 + * @param userId userId + * @param requestId 请求id + * @param aoid aoId + **/ + @GET + @Logged + @Path("/member/used/storage") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "获取各个用户所占用空间") + public ResponseBase memberUsedStorageResult(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @NotBlank @QueryParam("aoid") String aoid){ + var user = memberManageService.findByUserId(userId); + var userEntity = memberManageService.findByAoId(aoid); + if(userEntity == null || user == null){ + throw new ServiceOperationException(ServiceError.USER_NOT_FOUND); + }else if(!userId.equals("1") && !userId.equals(String.valueOf(userEntity.getId()))){ + throw new ServiceOperationException(ServiceError.NO_MODIFY_RIGHTS); + } + + // 对于用户总的存储空间:如果邀请时设置的空间配额,则为该配额;如果没有设置,则为设备的总存储大小。 + var result = memberManageService.fileStorageInfo(requestId, userId, String.valueOf(userEntity.getId())); + if (user.getSpaceLimit() != null) { + result.results().setTotalStorage(String.valueOf(user.getSpaceLimit())); + } else { + var resp = deviceStorageService.getStorageInfo(requestId); + result.results().setTotalStorage(resp.results().getTotal()); + } + return result; + } + +} diff --git a/src/main/java/space/ao/services/account/member/rest/MigrationResource.java b/src/main/java/space/ao/services/account/member/rest/MigrationResource.java new file mode 100644 index 0000000..bb203e4 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/rest/MigrationResource.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.rest; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.member.service.MigrationService; +import space.ao.services.support.log.Logged; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.member.dto.migration.BoxMigrationInfo; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; + +@Path("/v1/api") +@Tag(name = "Member manage service", description = "Provides member migration requests.") +public class MigrationResource { + + @Inject + MigrationService migrationService; + + @GET + @Logged + @Path("/user/migration") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "获取 migration 信息") + public ResponseBase migration(@Valid @NotBlank @HeaderParam("Request-Id") String requestId) { + return ResponseBase.okACC(requestId, migrationService.getMigrationInfo(requestId)); + } + + @PUT + @Logged + @Path("/user/migration") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "migration 更新域名信息") + public ResponseBase migrationRoutes(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid BoxMigrationInfo boxMigrationInfo) { + return migrationService.updateUserInfos(boxMigrationInfo, requestId); + } + +} diff --git a/src/main/java/space/ao/services/account/member/rest/SpaceResource.java b/src/main/java/space/ao/services/account/member/rest/SpaceResource.java new file mode 100644 index 0000000..abaf81f --- /dev/null +++ b/src/main/java/space/ao/services/account/member/rest/SpaceResource.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.rest; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.member.dto.*; +import space.ao.services.account.member.service.AdminUserService; +import space.ao.services.account.member.service.PlatformRegistryService; +import space.ao.services.account.support.response.ResponseBaseEnum; +import space.ao.services.support.StringUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.response.ResponseBase; + +@Path("/v1/api") +@Tag(name = "Admin user service", description = "Provide admin user revoke/bind requests.") +public class SpaceResource { + + @Inject + AdminUserService adminUserService; + @Inject + PlatformRegistryService platformRegistryService; + @Path("/space/admin") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "create space own admin") + @Logged + public ResponseBase createAdmin(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid AdminBindInfo adminBindInfo) { + if(!adminUserService.checkPasscodeOrNew(requestId, adminBindInfo.getPassword())){ + return ResponseBase.forbidden("password is not correct", requestId); + } + if(!StringUtils.isBlank(adminBindInfo.getSpaceName()) && adminUserService.isPersonalNameUsed(adminBindInfo.getSpaceName(), Const.Admin.ADMIN_ID)){ + return ResponseBaseEnum.SPACE_NAME_IS_USED.getResponseBase(requestId); + } + return ResponseBase.okACC(requestId, adminUserService.createAdmin(requestId, adminBindInfo)); + } + + @Path("/space/platform") + @POST + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "change platform url") + @Logged + public ResponseBase changePlatform(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid PlatformInfo platformInfo) { + return ResponseBase.ok(requestId, platformRegistryService.setPlatform(platformInfo.ssplatformUrl())).build(); + } +} diff --git a/src/main/java/space/ao/services/account/member/service/AdminUserService.java b/src/main/java/space/ao/services/account/member/service/AdminUserService.java new file mode 100644 index 0000000..3df1fd0 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/service/AdminUserService.java @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.service; + +import org.apache.commons.codec.digest.DigestUtils; +import org.jboss.logging.Logger; +import space.ao.services.account.member.dto.*; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.account.security.utils.SecurityPasswordUtils; +import space.ao.services.account.support.service.ServiceDefaultVar; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.FileUtils; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.agent.AgentService; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.info.registry.ClientRegistryInfo; +import space.ao.services.support.platform.info.registry.RegistryTypeEnum; +import space.ao.services.support.platform.info.registry.UserRegistryInfo; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.account.member.respository.BoxInfoRepository; +import space.ao.services.account.personalinfo.entity.UserEntity; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import java.io.File; +import java.io.FileInputStream; +import java.util.Objects; + +@ApplicationScoped +public class AdminUserService { + + @Inject + UserInfoRepository userInfoRepository; + @Inject + BoxInfoRepository boxInfoRepository; + @Inject + PlatformRegistryService platformRegistryService; + @Inject + ApplicationProperties properties; + @Inject + OperationUtils utils; + @Inject + MemberManageService memberManageService; + @Inject + SecurityUtils securityUtils; + @Inject + SecurityPasswordUtils securityPasswordUtils; + @Inject + AgentService agentService; + + static final Logger LOG = Logger.getLogger("app.log"); + + public boolean checkPasscodeOrNew(String requestId, String passcode) { + var userEntityAdmin = userInfoRepository.findByRole(UserEntity.Role.ADMINISTRATOR); + if(Objects.isNull(userEntityAdmin)) { + return true; + } + return securityPasswordUtils.doVerifyPasscode(requestId, passcode); + } + + @Transactional + public AdminBindResult createAdmin(String requestId, AdminBindInfo adminBindInfo) { + var userEntityAdmin = userInfoRepository.findByRole(UserEntity.Role.ADMINISTRATOR); + if(Objects.isNull(userEntityAdmin)){ + userEntityAdmin = bindAdminUser(requestId, adminBindInfo); + } else { + userEntityAdmin = rebindAdminUser(requestId, adminBindInfo, userEntityAdmin); + } + + String boxName = "EulixBox"; + if(Objects.nonNull(userEntityAdmin.getUserDomain())) { + boxName = boxName + "-" + userEntityAdmin.getUserDomain().split("\\.")[0]; + } + memberManageService.writeToAdminFile(adminBindInfo, userEntityAdmin.getAuthKey(), userEntityAdmin.getUserDomain(), boxName, ClientPairStatusEnum.CLIENT_PAIRED); + securityUtils.loadAdminClientPublicFile(); + String avatar; + if(Objects.isNull(userEntityAdmin.getUserDomain())) { + var boxInfo = agentService.getBoxLanInfo(requestId); + avatar = boxInfo.getLanIp() + boxInfo.getPort() + "/space/image/" + userEntityAdmin.getImage().substring(properties.accountImageLocation().length()); + } else { + avatar = userEntityAdmin.getUserDomain() + "/space/image/" + userEntityAdmin.getImage().substring(properties.accountImageLocation().length()); + } + return AdminBindResult.of(userEntityAdmin.getAuthKey(), userEntityAdmin.getUserDomain(), properties.boxUuid(), adminBindInfo.getClientUUID(), + boxName, Const.Admin.ADMIN_AOID, userEntityAdmin.getPersonalName(), avatar); + } + + /** + * 初次绑定 + */ + @Logged + public UserEntity bindAdminUser(String requestId, AdminBindInfo adminBindInfo) { + var userEntity = new UserEntity(); + + var userRegistryResult = platformRegistryService.registryUser(requestId, UserRegistryInfo.of(Const.Admin.ADMIN_AOID, null, + RegistryTypeEnum.USER_ADMIN.getName(), adminBindInfo.getClientUUID()), adminBindInfo.getEnableInternetAccess()); + + String authKey = utils.unifiedRandomCharters(32); + + //创建管理员头像路径 + var adminImageFile = new File(properties.accountImageLocation() + Const.Admin.ADMIN_AOID); + if(adminImageFile.exists() || adminImageFile.mkdirs()) { + var imagePath = ServiceDefaultVar.DEFAULT_IMAGE_PATH + ServiceDefaultVar.DEFAULT_AVATAR_FILE.toString(); + var defaultImage = new File(adminImageFile, ServiceDefaultVar.DEFAULT_AVATAR_FILE.toString()); + FileUtils.saveFileToLocal(imagePath, defaultImage); + try{ + userEntity.setImageMd5(DigestUtils.md5Hex(new FileInputStream(defaultImage))); + } catch (Exception e) { + LOG.error("get admin default image md5 failed"); + userEntity.setImageMd5(null); + } + userEntity.setImage(defaultImage.getPath()); + } else { + LOG.errorv("create admin image path failed, path: {0}", adminImageFile.getPath()); + } + + userEntity.setPhoneModel(adminBindInfo.getPhoneModel()); + userEntity.setClientUUID(adminBindInfo.getClientUUID()); + userEntity.setApplyEmail(adminBindInfo.getApplyEmail()); + userEntity.setPersonalName(adminBindInfo.getSpaceName()); + userEntity.setUserDomain(userRegistryResult.userDomain()); + userEntity.setAuthKey(authKey); + userInfoRepository.insertAdminUser(userEntity); + boxInfoRepository.create(); + securityPasswordUtils.doModifyPasscodeNotChangeDidDocument(requestId, adminBindInfo.getPassword()); + utils.loadInternetServiceConfig(requestId); + return userEntity; + } + + /** + * 重新绑定 + */ + @Logged + public UserEntity rebindAdminUser(String requestId, AdminBindInfo adminBindInfo, UserEntity userEntityAdmin) { + platformRegistryService.registryClient(requestId, ClientRegistryInfo.of(adminBindInfo.getClientUUID(), + RegistryTypeEnum.CLIENT_BIND.getName()), userEntityAdmin.getAoId()); + String authKey = utils.unifiedRandomCharters(32); + userEntityAdmin.setAuthKey(authKey); + userInfoRepository.updateClient(adminBindInfo.getPhoneModel(), adminBindInfo.getClientUUID(), authKey, userEntityAdmin.getId()); + return userEntityAdmin; + } + + public boolean isPersonalNameUsed(String spaceName, String adminId) { + return userInfoRepository.isPersonalNameUsed(spaceName, adminId); + } +} diff --git a/src/main/java/space/ao/services/account/member/service/DevOptionsService.java b/src/main/java/space/ao/services/account/member/service/DevOptionsService.java new file mode 100644 index 0000000..2446e07 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/service/DevOptionsService.java @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.service; + +import io.quarkus.runtime.Startup; +import space.ao.services.applet.repository.AppletPermissionRepository; + +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +@ApplicationScoped +@Startup +public class DevOptionsService { + + @Inject + AppletPermissionRepository permissions; + + private static final String APP_ID = "DEV-OPTIONS-SPECIFIC-APP-ID-XYZ"; + private static final String AO_ID = "aoid-1"; + + @PostConstruct + public void init() { + var p = permissions.findByAoidAndAppletid(AO_ID, APP_ID); + if (p == null) { + permissions.setAppletPermission(AO_ID, APP_ID, false); + } + } + + public String getPermissionStatus() { + var p = permissions.findByAoidAndAppletid(AO_ID, APP_ID); + return p.getPermission() ? "on" : "off"; + } + + public void setPermissionStatus(String status) { + permissions.updateAppletPermission(AO_ID, APP_ID, "ON".equalsIgnoreCase(status)); + } + +} diff --git a/src/main/java/space/ao/services/account/member/service/MemberManageService.java b/src/main/java/space/ao/services/account/member/service/MemberManageService.java new file mode 100644 index 0000000..32393a2 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/service/MemberManageService.java @@ -0,0 +1,396 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.service; + +import io.quarkus.hibernate.orm.panache.PanacheQuery; +import io.quarkus.panache.common.Sort; +import io.quarkus.runtime.Startup; + +import java.nio.charset.StandardCharsets; +import java.util.*; + +import io.smallrye.openapi.runtime.util.StringUtil; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.logging.Logger; +import space.ao.services.account.deviceinfo.dto.UserStorageInfo; +import space.ao.services.account.deviceinfo.service.DeviceStorageService; +import space.ao.services.account.member.dto.*; +import space.ao.services.account.personalinfo.dto.AccountInfoResult; +import space.ao.services.account.security.utils.SecurityPasswordUtils; +import space.ao.services.account.support.service.AdminInfoFileDTO; +import space.ao.services.account.support.service.ServiceDefaultVar; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.support.agent.AgentServiceRestClient; +import space.ao.services.support.agent.info.DidDoc; +import space.ao.services.support.agent.info.DidDocResult; +import space.ao.services.support.file.FileServiceRestClient; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.PlatformOpstageServiceRestClient; +import space.ao.services.support.platform.PlatformUtils; +import space.ao.services.support.redis.RedisTokenService; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.push.dto.Message; +import space.ao.services.push.dto.NotificationEnum; +import space.ao.services.push.services.RedisService; +import space.ao.services.support.OperationUtils; + +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import java.io.*; + +@ApplicationScoped +@Startup +public class MemberManageService { + @Inject + ApplicationProperties properties; + + @Inject + @RestClient + FileServiceRestClient fileServiceRestClient; + + @Inject + OperationUtils utils; + + @Inject + UserInfoRepository userInfoRepository; + + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + + @Inject + RedisService redisService; + + @Inject + PlatformRegistryService platformRegistryService; + + @Inject + SecurityPasswordUtils securityPasswordUtils; + @Inject + RedisTokenService redisTokenService; + @Inject + PlatformUtils platformUtils; + @Inject + @RestClient + AgentServiceRestClient agentServiceRestClient; + + @Inject + @RestClient + PlatformOpstageServiceRestClient platformOpstageServiceRestClient; + @Inject + @RestClient + DeviceStorageService deviceStorageService; + private static int count = 0; // 该变量用于记录密码输入次数。通过成员变量在不同的请求中共享,其正确性的前提是该服务只会单实例部署,如果多实例部署,需要重构该变量的共享方式。 + + private static Long timeTicket = System.currentTimeMillis(); // 该变量用于记录密码输入次数超过限制之后,再次允许验证密码的时间。通过成员变量在不同的请求中共享,其正确性的前提是该服务只会单实例部署,如果多实例部署,需要重构该变量的共享方式。 + private static Long windowsTicket = System.currentTimeMillis(); // 密码输入窗口 + static final Logger LOG = Logger.getLogger("app.log"); + + /** + * 查询用户所占用的空间信息 + * @author suqin + * @date 2021-10-12 21:38:33 + * @param userId userId + * @param targetUserId 目标用户信息 + * @return 返回空间结果 + **/ + @Logged + public ResponseBase fileStorageInfo(String requestId, String userId, String targetUserId){ + return fileServiceRestClient.getUserStorageInfo(requestId, userId, targetUserId); + } + + + /** + * 数据库根据clientUUID查找用户信息 + * @author suqin + * @date 2021-10-12 21:38:33 + * @param clientUUID 客户端id + * @return 用户信息 + **/ + public UserEntity findByClientUUID(String clientUUID){ + return userInfoRepository.findByClientUUID(clientUUID); + } + + + /** + * 数据库查找所有用户 + * @author suqin + * @date 2021-10-12 21:38:33 + * @return 查询所有用户结果 + **/ + public PanacheQuery findAll(){ + return userInfoRepository.findAll(); + } + + @Logged + public List getMemberList(String requestId){ + ArrayList personalList = new ArrayList<>(); + List userList = findAll(Sort.by("id")).list(); + for(UserEntity userEntity :userList){ + personalList.add(getMemberInfo(requestId, userEntity)); + } + return personalList; + } + + public AccountInfoResult getMemberInfo(String requestId, UserEntity userEntity){ + // 对于用户总的存储空间:如果邀请时设置的空间配额,则为该配额;如果没有设置,则为设备的总存储大小。 + var fileStorageInfo = fileStorageInfo(requestId, userEntity.getId().toString(), String.valueOf(userEntity.getId())); + if (userEntity.getSpaceLimit() != null) { + fileStorageInfo.results().setTotalStorage(String.valueOf(userEntity.getSpaceLimit())); + } else { + var resp = deviceStorageService.getStorageInfo(requestId); + fileStorageInfo.results().setTotalStorage(resp.results().getTotal()); + } + var did = getDid(requestId, null, userEntity.getAoId()); + return AccountInfoResult.of(userEntity.getRole().name(), userEntity.getPersonalName(), userEntity.getPersonalSign(), + userEntity.getCreateAt(),userEntity.getAoId(), userEntity.getClientUUID(), userEntity.getPhoneModel(), + userEntity.getUserDomain(), userEntity.getImageMd5(), fileStorageInfo.results().getUserStorage(), + fileStorageInfo.results().getTotalStorage(), did); + } + + public String getDid(String requestId, String did, String aoid){ + ResponseBase didDocResult = null; + String didDocString = null; + DidDoc didDoc = null; + try { + didDocResult = agentServiceRestClient.getDidDocument(requestId, did, aoid); + didDocString = new String(Base64.getDecoder().decode(didDocResult.results().didDoc()), StandardCharsets.UTF_8); + didDoc = utils.jsonToObject(didDocString, DidDoc.class); + did = didDoc.id(); + } catch (Exception e){ + LOG.errorv("did obtain failed, requestId: {0}, did: {1}, aoid: {2}, didDocResult: {3}, didDocString: {4}, " + + "didDoc: {5}, exception: {6}", requestId, did, aoid, didDocResult, didDocString, didDoc, e.getMessage()); + } + return did; + } + /** + * 数据库查找所有用户,并按照指定顺序排列 + * @author suqin + * @date 2021-10-12 21:38:33 + * @param sort 指定顺序排列 + * @return 按 sort 查询所有用户结果 + **/ + public PanacheQuery findAll(Sort sort){ + return userInfoRepository.findAll(sort); + } + + /** + * 数据库根据userId查找用户 + * @author suqin + * @date 2021-10-12 21:38:33 + * @param userId userId + * @return 用户信息 + **/ + public UserEntity findByUserId(String userId){ + return userInfoRepository.findByUserId(Long.valueOf(userId)); + } + + /** + * 数据库根据aoId查找用户 + * @author suqin + * @date 2021-10-12 21:38:33 + * @param aoid aoId + * @return 用户信息 + **/ + public UserEntity findByAoId(String aoid){ + return userInfoRepository.findByAoId(aoid); + } + + /** + * 撤销指定用户的客户端授权信息。 + * + * @param userId userId 指定的用户 id + * @return 撤销是否成功,0:成功,1:向平台解邦失败, 2: 密码错误, 3:输入密码次数过多, 4:管理员已被解绑。 + */ + @Logged + @Transactional + public ResponseBase revokeUserClientInfo(String userId, String requestId, String passcode, String clientUUID) { + var userEntity = findByUserId(userId); + if(userId.equals("1")){ + if(timeTicket > System.currentTimeMillis()){ + return ResponseBase.of(ServiceDefaultVar.ACCOUNT_PASSWD_EXCEED.toString(), "too much password tries", requestId, + PasswdTryInfo.of(properties.boxUuid(), count, 0, timeTicket-System.currentTimeMillis())); + } else { + if (!securityPasswordUtils.doVerifyPasscode(requestId, passcode)) { + return passcodeError(requestId, properties.boxUuid()); + } + count = 0; + if (userEntity.getClientUUID() == null){//如果数据库查询clientUUID为null,判断成员/管理员已经被解绑过 + return ResponseBase.of(ServiceDefaultVar.ACCOUNT_ADMIN_REVOKED.toString(), "admin has been revoked", requestId, + PasswdTryInfo.of(properties.boxUuid(), 0, 0, 0L)); + } else { + Map mapInfo =utils.readFromFile(new File(properties.accountDataLocation()+ ServiceDefaultVar.DEFAULT_DATA_FILE)); + mapInfo.put("status", "2"); + mapInfo.put("clientUUID", null); + mapInfo.put("phoneModel", null); + mapInfo.put("authKey", null); + utils.writeToFile(new File(properties.accountDataLocation() + ServiceDefaultVar.DEFAULT_DATA_FILE), mapInfo); + } + } + } + + var authorizedTerminals = authorizedTerminalRepository.findByUserid(Long.valueOf(userId)); + + for (var auth: authorizedTerminals){ + authorizedTerminalRepository.delete(auth.getUserid(), auth.getUuid()); + + try { + //向平台解注册授权端 + platformRegistryService.platformRegistryClientReset(requestId, auth.getAoid(), auth.getUuid()); + } catch (Exception e) { + LOG.warn("platformRegistryClientReset error", e); + } + + if(!Objects.equals(auth.getUuid(), clientUUID)){ // 自己解绑自己时不发送通知给自己 + redisService.pushMessage(Message.of( + String.valueOf(auth.getUserid()), auth.getUuid(), NotificationEnum.REVOKE.getType(), requestId, + utils.objectToJson( + MemberDeleteResult.of(auth.getUuid(), auth.getAoid(), userEntity.getUserDomain())))); + } + redisService.del(auth.getUserid().toString(), auth.getUuid()); + } + // 目前预期只有一条记录被成功修改。 + userInfoRepository.revokeUserClientInfo(Long.valueOf(userId)); + redisTokenService.deleteByAoid(userEntity.getAoId()); + return ResponseBase.of("ACC-200", "revoke user success", requestId, null); + } + + private static ResponseBase passcodeError(String requestId, String boxUUID) { + count++; + if(windowsTicket < System.currentTimeMillis() - 60 * 1000){ // 上次输入错误 在一分钟之外 + windowsTicket = System.currentTimeMillis(); + count = 1; + } + if(count <= 3 && windowsTicket > System.currentTimeMillis() - 60 * 1000){ // 上次输入错误 在一分钟之内 且三次之内 + return ResponseBase.of(ServiceDefaultVar.ACCOUNT_PASSWD_ERROR.toString(), "password error", requestId, + PasswdTryInfo.of(boxUUID, count, 3-count, 0)); + } + count = 0; + timeTicket = System.currentTimeMillis() + 1000*60; + return ResponseBase.of(ServiceDefaultVar.ACCOUNT_PASSWD_ERROR.toString(), "password error, please try again after one minute", requestId, + PasswdTryInfo.of(boxUUID, 3, 0, 0)); + + } + + @Logged + public void writeToAdminFile(AdminBindInfo adminBindInfo, String authKey, String userDomain, String boxName, ClientPairStatusEnum clientPairStatus){ + writeToAdminFile( + AdminInfoFileDTO.of(adminBindInfo.getClientUUID(), authKey, adminBindInfo.getPhoneModel(), boxName, + clientPairStatus.getStatus(), null, userDomain) + ); + } + + + @Logged + public void writeUserDomainToAdminFile(String userDomain){ + var adminInfo = readFromAdminFile(); + adminInfo.setUserDomain(userDomain); + this.writeToAdminFile(adminInfo); + } + + @Logged + public void writeToAdminFile(AdminInfoFileDTO adminInfoFileDTO){ + var adminInfo = readFromAdminFile(); + if (Objects.nonNull(adminInfoFileDTO.getStatus())){ + adminInfo.setStatus(adminInfoFileDTO.getStatus()); + } + if (Objects.nonNull(adminInfoFileDTO.getApplyEmail())){ + adminInfo.setApplyEmail(adminInfoFileDTO.getApplyEmail()); + } + if (Objects.nonNull(adminInfoFileDTO.getBoxName())){ + adminInfo.setBoxName(adminInfoFileDTO.getBoxName()); + } + if (Objects.nonNull(adminInfoFileDTO.getClientUUID())){ + adminInfo.setClientUUID(adminInfoFileDTO.getClientUUID()); + } + if (Objects.nonNull(adminInfoFileDTO.getPhoneModel())){ + adminInfo.setPhoneModel(adminInfoFileDTO.getPhoneModel()); + } + if (Objects.nonNull(adminInfoFileDTO.getAuthKey())){ + adminInfo.setAuthKey(adminInfoFileDTO.getAuthKey()); + } + if (Objects.nonNull(adminInfoFileDTO.getUserDomain())){ + adminInfo.setUserDomain(adminInfoFileDTO.getUserDomain()); + } + utils.writeToFile(new File(properties.accountDataLocation() + ServiceDefaultVar.DEFAULT_DATA_FILE), utils.objectToMap(adminInfoFileDTO)); + } + + @Logged + public AdminInfoFileDTO readFromAdminFile(){ + Map adminInfo = utils.readFromFile(new File(properties.accountDataLocation() + ServiceDefaultVar.DEFAULT_DATA_FILE)); + return utils.mapToObject(adminInfo, AdminInfoFileDTO.class); + } + + /** + * 开机自启动,写管理员信息 + */ + @PostConstruct + @SuppressWarnings("unused") // 开机自启动,写管理员信息 + public void createAdminFile() throws IOException { + var file = new File(properties.accountDataLocation()); + if(file.exists() || file.mkdirs()) { + LOG.error(ServiceError.CREATE_ADMIN_INIT_FAILED); + } + var data = new File(properties.accountDataLocation() + ServiceDefaultVar.DEFAULT_DATA_FILE); + if(!data.exists()) { + LOG.info("admin file create"); + if(!data.createNewFile()){ + LOG.error(ServiceError.CREATE_ADMIN_INIT_FAILED); + } + Map mapInfo = new HashMap<>(); + mapInfo.put("status", "1"); + utils.writeToFile(data, mapInfo); + } + + var allUsers = userInfoRepository.findAll().list(); + //创建成员通讯录collection + //试用用户填写applyEmail + var requestId = utils.createRandomType4UUID(); + String boxRegKey; + if(utils.getEnableInternetAccess() && platformUtils.isRegistryPlatformAvailable(requestId)){ + boxRegKey = platformUtils.createOpstageBoxRegKey(requestId); + } else { + boxRegKey = null; + } + var spaceBootstrapType = SpaceBootstrapTypeEnum.getSpaceBootstrapType(properties.boxDeviceModelNumber()); + userInfoRepository.findAll().list().forEach( p -> { + if(Objects.nonNull(boxRegKey)){ + if(spaceBootstrapType.equals(SpaceBootstrapTypeEnum.SpaceBootstrapTypePc) && + p.getRole().equals(UserEntity.Role.ADMINISTRATOR) && + !StringUtil.isNotEmpty(p.getApplyEmail())) { + var res = platformOpstageServiceRestClient.trailUser(requestId, boxRegKey, SpaceBootstrapTypeEnum.SpaceBootstrapTypePc.getName(), properties.boxUuid(), null); + if(!Objects.isNull(res) && !Objects.isNull(res.getEmail())) { + userInfoRepository.updateApplyEmail(res.getEmail(),p.getId()); + } + } else if(spaceBootstrapType.equals(SpaceBootstrapTypeEnum.SpaceBootstrapTypeOnline) && + p.getRole().equals(UserEntity.Role.GUEST) && + !StringUtil.isNotEmpty(p.getApplyEmail())) { + var res = platformOpstageServiceRestClient.trailUser(requestId, boxRegKey, SpaceBootstrapTypeEnum.SpaceBootstrapTypeOnline.getName(), properties.boxUuid(), p.getAoId()); + if(!Objects.isNull(res) && !Objects.isNull(res.getEmail())) { + userInfoRepository.updateApplyEmail(res.getEmail(),p.getId()); + } + } + } + }); + + } +} diff --git a/src/main/java/space/ao/services/account/member/service/MigrationService.java b/src/main/java/space/ao/services/account/member/service/MigrationService.java new file mode 100644 index 0000000..cd1fb38 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/service/MigrationService.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.service; + +import org.jboss.logging.Logger; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.info.registry.RegistryTypeEnum; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.member.dto.migration.BoxMigrationInfo; +import space.ao.services.account.member.dto.migration.ClientMigrationInfo; +import space.ao.services.account.member.dto.migration.UserMigrationInfo; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import java.util.ArrayList; +import java.util.Objects; + +@ApplicationScoped +public class MigrationService { + private static final Logger LOG = Logger.getLogger("app.log"); + @Inject + UserInfoRepository userInfoRepository; + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + @Logged + public BoxMigrationInfo getMigrationInfo(String requestId) { + LOG.infov("start get migration info: {0}", requestId); + var userInfos = new ArrayList(); + var allUserEntity = userInfoRepository.findAll().list(); + LOG.infov("get all user: {0}", allUserEntity); + for (var userEntity: allUserEntity){ + var clientInfos = new ArrayList(); + var allClientEntity = authorizedTerminalRepository.findByUserid(userEntity.getId()); + LOG.infov("get user: {0}, all client: {1}", userEntity.getId(), allClientEntity); + for (var clientEntity: allClientEntity){ + if (clientEntity.getUuid().equals(userEntity.getClientUUID())){ + clientInfos.add(ClientMigrationInfo.of(clientEntity.getUuid(), RegistryTypeEnum.CLIENT_BIND.getName())); + } else { + clientInfos.add(ClientMigrationInfo.of(clientEntity.getUuid(), RegistryTypeEnum.CLIENT_AUTH.getName())); + } + } + if(userEntity.getRole().equals(UserEntity.Role.ADMINISTRATOR)){ + userInfos.add(UserMigrationInfo.of(userEntity.getAoId(), userEntity.getUserDomain(), RegistryTypeEnum.USER_ADMIN.getName(), + clientInfos)); + } else { + userInfos.add(UserMigrationInfo.of(userEntity.getAoId(), userEntity.getUserDomain(), RegistryTypeEnum.USER_MEMBER.getName(), + clientInfos)); + } + } + LOG.infov("get all migration info: {0}", requestId); + return BoxMigrationInfo.of(null, userInfos); + } + + @Transactional + @Logged + public ResponseBase updateUserInfos(BoxMigrationInfo boxMigrationInfo, String requestId) { + for (var userInfo: boxMigrationInfo.userInfos()) { + var userEntity = userInfoRepository.findByAoId(userInfo.userId()); + if(Objects.isNull(userEntity)){ + return ResponseBase.of("ACC-404", "user : " + userInfo.userId() + " not exits", + requestId, null); + } + userEntity.setUserDomain(userInfo.userDomain()); + userEntity.persist(); + } + return ResponseBase.okACC(requestId, boxMigrationInfo); + } +} diff --git a/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java new file mode 100644 index 0000000..eef91a2 --- /dev/null +++ b/src/main/java/space/ao/services/account/member/service/PlatformRegistryService.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.member.service; + +import io.quarkus.rest.client.reactive.QuarkusRestClientBuilder; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response.Status; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.logging.Logger; +import space.ao.services.account.member.dto.PlatformInfo; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.StringUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.PlatformRegistryServiceRestClient; +import space.ao.services.support.platform.PlatformUtils; +import space.ao.services.support.platform.info.registry.*; +import space.ao.services.support.platform.temp.RequestTypeEnum; +import space.ao.services.support.platform.temp.TempRegistryInfoEntity; +import space.ao.services.support.platform.temp.TempRegistryInfoRepository; + +import java.net.URI; +import java.time.OffsetDateTime; +import java.util.Objects; + +@ApplicationScoped +public class PlatformRegistryService { + + @Inject + PlatformUtils platformUtils; + @Inject + ApplicationProperties properties; + @Inject + OperationUtils utils; + @Inject + TempRegistryInfoRepository tempRegistryInfoRepository; + static final Logger LOG = Logger.getLogger("app.log"); + + @Inject + @RestClient + PlatformRegistryServiceRestClient platformRegistryServiceRestClient; + static String ssplatformUrl; + + public void createRestClient() { + if(StringUtils.isBlank(ssplatformUrl)){ + ssplatformUrl = properties.ssplatformUrl(); + } + platformRegistryServiceRestClient = QuarkusRestClientBuilder.newBuilder() + .baseUri(URI.create(ssplatformUrl)) + .build(PlatformRegistryServiceRestClient.class); + } + + public PlatformInfo setPlatform(String ssplatformUrl){ + if(!StringUtils.isBlank(ssplatformUrl)){ + PlatformRegistryService.ssplatformUrl = ssplatformUrl; + createRestClient(); + platformUtils.setRegistryServiceRestClient(platformRegistryServiceRestClient); + } + return PlatformInfo.of(ssplatformUrl); + } + + /** + * 向平台注册用户 + * + * @param requestId 请求id + * @param userRegistryInfo 向平台注册用户信息 + * @return 注册结果 + * @author suqin + * @date 2021-10-12 21:38:33 + **/ + @Logged + @Transactional + public UserRegistryResult registryUser(String requestId, UserRegistryInfo userRegistryInfo, Boolean platformRegistry) { + if (Boolean.TRUE.equals(platformRegistry) && platformUtils.isRegistryPlatformAvailable(requestId)) { + var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); + return platformRegistryServiceRestClient.platformRegistryUser(userRegistryInfo, requestId, boxRegKey, properties.boxUuid()); + } else { + TempRegistryInfoEntity tempRegistryInfoEntity = new TempRegistryInfoEntity(); + tempRegistryInfoEntity.setRequestId(requestId); + tempRegistryInfoEntity.setClientUUID(userRegistryInfo.clientUUID()); + tempRegistryInfoEntity.setUserId(Long.valueOf(userRegistryInfo.userId().split("-")[1])); + tempRegistryInfoEntity.setType(RequestTypeEnum.REGISTRY_USER.getName()); + tempRegistryInfoEntity.setTempInfo(utils.objectToJson(userRegistryInfo)); + tempRegistryInfoEntity.setCreateAt(OffsetDateTime.now()); + tempRegistryInfoRepository.insert(tempRegistryInfoEntity); + LOG.warnv("registry user failed, Unable to connect to the platform, delay registration to connectable platform, userRegistryInfo: {0}", userRegistryInfo); + return new UserRegistryResult(properties.boxUuid(), userRegistryInfo.userId(), null, RegistryTypeEnum.USER_ADMIN.getName(), userRegistryInfo.clientUUID()); + } + + } + + /** + * 向平台解注册用户 + * + * @param requestId 请求id + * @param aoid 解注册用户 aoid + * @author suqin + * @date 2021-10-12 21:38:33 + **/ + @Logged + public void platformRegistryUserReset(String requestId, String aoid) { + var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); + try { + platformRegistryServiceRestClient.platformResetUser(requestId, boxRegKey, properties.boxUuid(), aoid); + } catch (WebApplicationException e) { + if(Objects.equals(Status.NOT_FOUND.getStatusCode(), e.getResponse().getStatusInfo().getStatusCode())){ + LOG.errorv("platform Registry User Reset: {0}", utils.getErrorInfoFromException(e)); + } else { + throw e; + } + } + } + + + /** + * 向平台注册客户端 + * + * @param requestId 请求id + * @param clientRegistryInfo 向平台注册客户端信息 + * @param aoid 客户端对应 aoid + * @return 注册结果 + * @author suqin + * @date 2021-10-12 21:38:33 + **/ + @Logged + @Transactional + public ClientRegistryResult registryClient(String requestId, ClientRegistryInfo clientRegistryInfo, String aoid) { + + if(Boolean.TRUE.equals(utils.getEnableInternetAccess()) && platformUtils.isRegistryPlatformAvailable(requestId)){ + var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); + return platformRegistryServiceRestClient.platformRegistryClient(clientRegistryInfo, requestId, boxRegKey, properties.boxUuid(), aoid); + } else { + TempRegistryInfoEntity tempRegistryInfoEntity = new TempRegistryInfoEntity(); + tempRegistryInfoEntity.setRequestId(requestId); + tempRegistryInfoEntity.setClientUUID(clientRegistryInfo.clientUUID()); + tempRegistryInfoEntity.setUserId(Long.valueOf(aoid.split("-")[1])); + tempRegistryInfoEntity.setType(RequestTypeEnum.REGISTRY_AUTH_CLIENT.getName()); + tempRegistryInfoEntity.setTempInfo(utils.objectToJson(clientRegistryInfo)); + tempRegistryInfoEntity.setCreateAt(OffsetDateTime.now()); + tempRegistryInfoRepository.insert(tempRegistryInfoEntity); + LOG.warnv("registry client failed, Unable to connect to the platform, delay registration to connectable platform, " + + "clientRegistryInfo: {0}", clientRegistryInfo); + return null; + } + } + + /** + * 向平台解注册客户端 + * + * @param requestId 请求id + * @param aoid 客户端对应 aoid + * @param clientUUID 客户端 clientUUID + * @author suqin + * @date 2021-10-12 21:38:33 + **/ + @Logged + public void platformRegistryClientReset(String requestId, String aoid, String clientUUID) { + if(Boolean.TRUE.equals(utils.getEnableInternetAccess()) && platformUtils.isRegistryPlatformAvailable(requestId)){ + var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); + try { + platformRegistryServiceRestClient.platformRestClient(requestId, boxRegKey, properties.boxUuid(), aoid, clientUUID); + } catch (WebApplicationException e){ + LOG.errorv("platform Registry Client Reset: {0}", utils.getErrorInfoFromException(e)); + if(Objects.equals(Status.NOT_FOUND.getStatusCode(), e.getResponse().getStatusInfo().getStatusCode())){ + LOG.errorv("platform Registry Client Reset not found, clientUUID : {0}", clientUUID); + } else { + throw e; + } + } + } else { + TempRegistryInfoEntity tempRegistryInfoEntity = new TempRegistryInfoEntity(); + tempRegistryInfoEntity.setRequestId(requestId); + tempRegistryInfoEntity.setClientUUID(clientUUID); + tempRegistryInfoEntity.setUserId(Long.valueOf(aoid.split("-")[1])); + tempRegistryInfoEntity.setType(RequestTypeEnum.RESET_AUTH_CLIENT.getName()); + tempRegistryInfoEntity.setTempInfo(utils.objectToJson(ClientRegistryInfo.of(clientUUID, aoid))); + tempRegistryInfoEntity.setCreateAt(OffsetDateTime.now()); + tempRegistryInfoRepository.insert(tempRegistryInfoEntity); + LOG.warnv("reset client failed, Unable to connect to the platform, delay registration to connectable platform, " + + "clientUUID: {0}", clientUUID); + } + } + + public void checkRegistryPlatformAvailable(String requestId) { + if (!platformUtils.isRegistryPlatformAvailable(requestId)) { + throw new ServiceOperationException(ServiceError.PLATFORM_REGISTRY_NOT_AVAILABLE); + } + } +} diff --git a/src/main/java/space/ao/services/account/personalinfo/dto/AccountInfoResult.java b/src/main/java/space/ao/services/account/personalinfo/dto/AccountInfoResult.java new file mode 100644 index 0000000..6d509c4 --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/dto/AccountInfoResult.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import java.time.OffsetDateTime; + +/** + * 成员基本信息 + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +@Data(staticConstructor = "of") +public class AccountInfoResult { + + @Schema(description = "用户是admin还是guest") + private final String role; + + @Schema(description = "用户昵称") + private final String personalName; + + @Schema(description = "用户签名") + private final String personalSign; + + @Schema(description = "用户创建时间") + private final OffsetDateTime createAt; + + @Schema(description = "用户实际上的aoid") + private final String aoId; + + @Schema(description = "用户clientUUID") + private final String clientUUID; + + @Schema(description = "绑定手机型号") + private final String phoneModel; + + @Schema(description = "用户域名") + private final String userDomain; + + @Schema(description = "用户image的md5值") + private final String imageMd5; + + @Schema(description = "用户已用空间") + private final String userStorage; + + @Schema(description = "用户总空间") + private final String totalStorage; + + @Schema(description = "didDoc 分布式身份标识信息") + private final String did; +} diff --git a/src/main/java/space/ao/services/account/personalinfo/dto/MultiPersonalInfo.java b/src/main/java/space/ao/services/account/personalinfo/dto/MultiPersonalInfo.java new file mode 100644 index 0000000..504293a --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/dto/MultiPersonalInfo.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.dto; + +import jdk.jfr.Description; +import org.jboss.resteasy.reactive.PartType; + +import jakarta.validation.constraints.NotNull; +import jakarta.ws.rs.FormParam; +import jakarta.ws.rs.core.MediaType; +import java.io.InputStream; + +/** + * 上传的成员头像信息 + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +public class MultiPersonalInfo { + @FormParam("param") + @Description("文件参数,json格式,包括filename,例如{'filename':'profile.png'}") + @PartType(MediaType.APPLICATION_JSON) + public @NotNull String param; + + @FormParam("file") + @Description("文件的二进制流") + @PartType(MediaType.APPLICATION_OCTET_STREAM) + public @NotNull InputStream inputStream; +} diff --git a/src/main/java/space/ao/services/account/personalinfo/dto/PersonalCallResult.java b/src/main/java/space/ao/services/account/personalinfo/dto/PersonalCallResult.java new file mode 100644 index 0000000..797c3fa --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/dto/PersonalCallResult.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.dto; + +import lombok.Data; + +/** + * 成员头像上传成功,返回的信息 + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +@Data(staticConstructor = "of") +public class PersonalCallResult { + private final Integer code; + private final String clientUUID; +} diff --git a/src/main/java/space/ao/services/account/personalinfo/dto/PersonalInfo.java b/src/main/java/space/ao/services/account/personalinfo/dto/PersonalInfo.java new file mode 100644 index 0000000..d4c9457 --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/dto/PersonalInfo.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.Pattern; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.account.member.dto.Const; + +/** + * 修改用户名称和签名信息 + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +@Data +public class PersonalInfo { + @Schema(description = "用户名") + @Pattern(regexp = Const.SPACE_NAME_REG) + private String personalName; + + @Schema(description = "用户签名") + private String personalSign; + private String aoId; + private String userDomain; + private String phoneModel; + + @JsonCreator + public PersonalInfo(@JsonProperty("personalName") String personalName, + @JsonProperty("personalSign") String personalSign, + @JsonProperty("aoId") String aoId, + @JsonProperty("userDomain") String userDomain, + @JsonProperty("phoneModel") String phoneModel) { + this.personalName = personalName; + this.personalSign = personalSign; + this.aoId = aoId; + this.userDomain = userDomain; + this.phoneModel = phoneModel; + } +} diff --git a/src/main/java/space/ao/services/account/personalinfo/dto/PersonalInfoResult.java b/src/main/java/space/ao/services/account/personalinfo/dto/PersonalInfoResult.java new file mode 100644 index 0000000..ec0a3cf --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/dto/PersonalInfoResult.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.dto; + +import java.util.List; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +/** + * 修改用户名称和签名信息 + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +@Data(staticConstructor = "of") +public class PersonalInfoResult { + + final boolean success; + @Schema(description = "域名修改失败时,推荐的域名") + final List domainList; +} diff --git a/src/main/java/space/ao/services/account/personalinfo/dto/SubdomainUpdateResult.java b/src/main/java/space/ao/services/account/personalinfo/dto/SubdomainUpdateResult.java new file mode 100644 index 0000000..d78a49f --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/dto/SubdomainUpdateResult.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.dto; + +import java.util.List; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data(staticConstructor = "of") +public class SubdomainUpdateResult { + @Schema(description = "是否成功") + private Boolean success; + + @Schema(description = "盒子的 UUID") + private String boxUUID; + @Schema(description = "用户id") + private String userId; + @Schema(description = "全局唯一的 subdomain") + private String subdomain; + @Schema(description = "错误码, success为false时返回") + private Integer code; + @Schema(description = "错误消息, success为false时返回") + private String error; + @Schema(description = "推荐的subdomain, success为false时返回") + private List recommends; +} diff --git a/src/main/java/space/ao/services/account/personalinfo/entity/UserEntity.java b/src/main/java/space/ao/services/account/personalinfo/entity/UserEntity.java new file mode 100644 index 0000000..59828d1 --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/entity/UserEntity.java @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.entity; + +import lombok.Getter; +import lombok.Setter; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import lombok.ToString; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; + +import java.time.OffsetDateTime; + +/** + * 用户表数据结构 + * @author suqin + * @date 2021-10-08 21:39:57 + **/ +@Entity +@Getter +@Setter +@ToString +@Table(name = "userinfo") +public class UserEntity extends PanacheEntityBase { + @Id + @Column(name = "userid") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "role") + @NotNull + @Enumerated(EnumType.STRING) + private Role role; + + @Column(length = 24, name = "personal_name") + @NotNull + private String personalName; + + @Column(name = "personal_sign", length = 120) + private String personalSign; + + @Column(name = "image") + private String image; + + @Column(name = "aoid") + @NotNull + private String aoId; + + @Column(name = "authkey") + private String authKey; + + @Column(name = "userdomain") + private String userDomain; + + @Column(name = "client_uuid") + private String clientUUID; + + @Column(name = "create_at") + @NotNull + private OffsetDateTime createAt; + + @Column(name = "image_md5") + private String imageMd5; + + @Column(name = "phone_model") + private String phoneModel; + + @Column(name = "phone_type") + private String phoneType; + + @Column(name = "apply_email") + private String applyEmail; + + @Column(name = "space_limit") + private Long spaceLimit; + + public UserEntity() { + + } + + + @Getter + public enum Role { + ADMINISTRATOR, + GUEST + } + + public UserEntity(Role role, String name, String domain, String aoId) { + this.role = role; + this.aoId = aoId; + this.personalName = name; + this.userDomain = domain ; + } +} diff --git a/src/main/java/space/ao/services/account/personalinfo/repository/UserInfoRepository.java b/src/main/java/space/ao/services/account/personalinfo/repository/UserInfoRepository.java new file mode 100644 index 0000000..5fd10a2 --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/repository/UserInfoRepository.java @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.repository; + +import io.quarkus.hibernate.orm.panache.PanacheRepository; +import space.ao.services.account.member.dto.Const; +import space.ao.services.support.log.Logged; +import space.ao.services.account.personalinfo.entity.UserEntity; + +import jakarta.inject.Singleton; +import jakarta.transaction.Transactional; +import java.time.OffsetDateTime; +import java.util.List; +import java.util.Optional; + +@Singleton +public class UserInfoRepository implements PanacheRepository { + + private static final String UPDATE_USER_DOMAIN_BY_USERID = "userDomain=?1 where id=?2"; + private static final String UPDATE_CLIENT_BY_USERID = "phoneModel=?1, clientUUID=?2, authKey=?3 where id=?4"; + + /** + * 根据角色查询用户 + * @author suqin + * @param role 角色 + * @date 2021-10-08 21:39:57 + **/ + @Transactional + public UserEntity findByRole(UserEntity.Role role) { + return find("role", role).firstResult(); + } + + /** + * 根据userid查询用户 + * @author suqin + * @param userId userId 用户id + * @date 2021-10-08 21:39:57 + **/ + @Transactional + public UserEntity findByUserId(Long userId){ + return find("id", userId).firstResult(); + } + + /** + * 根据clientUUID查询用户 + * @author suqin + * @param clientUUID 客户端id + * @date 2021-10-08 21:39:57 + **/ + public UserEntity findByClientUUID(String clientUUID) { + return find("clientUUID", clientUUID).firstResult(); + } + + + /** + * 根据aoid查询用户 + * @author suqin + * @param aoid aoid + * @date 2021-10-08 21:39:57 + **/ + public UserEntity findByAoId(String aoid) { + return find("aoId", aoid).firstResult(); + } + + /** + * 根据userdomain查询用户 + * @author suqin + * @param domain 客户domain + * @date 2021-10-08 21:39:57 + **/ + public Optional findByDomain(String domain) { + return find("userDomain", domain).firstResultOptional(); + } + + /** + * 根据 personal_name 查询用户 + * @author zhichuang + * @param personalName 客户domain + * @date 2023-03-10 15:39:11 + **/ + public List findByPersonalName(String personalName) { + return find("personalName", personalName).list(); + } + + + @Transactional + @Logged + public UserEntity insertAdminUser(UserEntity userEntity) { + userEntity.setAoId(Const.Admin.ADMIN_AOID); + userEntity.setCreateAt(OffsetDateTime.now()); + userEntity.setRole(UserEntity.Role.ADMINISTRATOR); + this.persist(userEntity); + this.update("set id=1 where role = ?1", UserEntity.Role.ADMINISTRATOR); + return userEntity; + } + + public void revokeUserClientInfo(Long userId) { + if (userId == 1L){ + this.update( + "set phoneModel=null, authKey=null where id=?1", userId); + } else { + this.update( + "set clientUUID=null, phoneModel=null where id=?1", userId); + } + + } + + @Transactional + public void updatePhoneTypeByUserId(String phoneType, Long userid){ + this.update("set phoneType = ?1 where id = ?2", phoneType, userid); + } + + + @Transactional + public void updateApplyEmail(String email, Long id) { + this.update("applyEmail=?1 where id=?2", email, id); + } + + @Transactional + public boolean isPersonalNameUsed(String personalName, String userid) { + var userEntities = this.findByPersonalName(personalName); + if(userEntities.isEmpty()){ + return false; + } else { + return userEntities.stream().map(UserEntity::getId).noneMatch(Long.valueOf(userid)::equals); + } + } + + @Transactional + public void updateUserDomainByUserid(String userDomain, Long id) { + this.update(UPDATE_USER_DOMAIN_BY_USERID, userDomain, id); + } + + public void updateClient(String phoneModel, String clientUUID, String authKey, Long userid) { + this.update(UPDATE_CLIENT_BY_USERID, phoneModel, clientUUID, authKey, userid); + } +} diff --git a/src/main/java/space/ao/services/account/personalinfo/rest/PersonalInfoResource.java b/src/main/java/space/ao/services/account/personalinfo/rest/PersonalInfoResource.java new file mode 100644 index 0000000..6a78735 --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/rest/PersonalInfoResource.java @@ -0,0 +1,333 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.rest; + +import static space.ao.services.account.support.service.ServiceDefaultVar.*; + +import java.util.*; + +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import org.apache.commons.codec.digest.DigestUtils; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.jboss.logging.Logger; +import space.ao.services.account.member.dto.MemberNameUpdateInfo; +import space.ao.services.account.personalinfo.service.PersonalInfoService; +import space.ao.services.gateway.auth.member.client.ResponseCodeConstant; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.personalinfo.dto.MultiPersonalInfo; +import space.ao.services.account.personalinfo.dto.PersonalCallResult; +import space.ao.services.account.personalinfo.dto.PersonalInfo; +import space.ao.services.account.personalinfo.dto.PersonalInfoResult; +import space.ao.services.account.personalinfo.dto.AccountInfoResult; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.support.response.ResponseBaseEnum; +import space.ao.services.support.FileUtils; +import space.ao.services.support.StringUtils; +import space.ao.services.support.log.Logged; +import org.eclipse.microprofile.openapi.annotations.Operation; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.ResourceUtils; + +import java.io.*; + +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceDefaultVar; + +@Path("/v1/api") +@Tag(name = "Account service Personal Info Resource", description = "Provides account info requests.") +public class PersonalInfoResource { + @Inject + ApplicationProperties properties; + + @Inject + OperationUtils utils; + + @Inject + MemberManageService memberManageService; + + @Inject + PersonalInfoService personalInfoService; + + private static final Logger LOG = Logger.getLogger("personalInfo.log"); + + /** + * 查询用户个人信息 + * @author suqin + * @param userId userId + * @param requestId 请求id + * @date 2021-10-08 21:39:57 + **/ + @GET + @Logged + @Path("/personal/info") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to get personal information.") + public ResponseBase> messageInfoResult(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId) { + UserEntity userinfo = memberManageService.findByUserId(userId); + if (userinfo == null) { + throw new ServiceOperationException(ServiceError.INVALID_USER_ID); + } else { + var accountInfoResult = memberManageService.getMemberInfo(requestId, userinfo); + ArrayList personalList = new ArrayList<>(); + personalList.add(accountInfoResult); + return ResponseBase.of(ResponseCodeConstant.ACC_200, "get personalinfo of "+userinfo.getId(), requestId, personalList); + } + } + + /** + * 查询所有用户信息 + * @author suqin + * @param userId userId + * @param requestId requestId + * @date 2021-10-08 21:39:57 + **/ + @GET + @Logged + @Path("/member/list") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to all user information.") + public ResponseBase> accountInfoResult(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId) { + UserEntity userInfo = memberManageService.findByUserId(userId); + if (userInfo == null) { + throw new ServiceOperationException(ServiceError.INVALID_USER_ID); + } + List personalList = memberManageService.getMemberList(requestId); + return ResponseBase.of(ResponseCodeConstant.ACC_200, "get all user info", requestId, personalList); + } + + /** + * 更新个人用户信息 + * @author suqin + * @param userId userId + * @param requestId requestId + * @param personalInfo 用户个人信息 + * @date 2021-10-08 21:39:57 + **/ + @Logged + @POST + @Transactional + @Path("/personal/info/update") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to update personal name and sign information.") + public ResponseBase> updatePersonalInfo(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @Schema(description = "用户信息") PersonalInfo personalInfo) { + if (!StringUtils.isBlank(personalInfo.getUserDomain())) { + return ResponseBase.of("ACC-4022", "domain name cannot be modified", requestId, + null); + } + var userEntity = memberManageService.findByUserId(userId); + + if (userEntity == null) { + throw new ServiceOperationException(ServiceError.USER_NOT_FOUND); + } + + if (personalInfo.getPersonalName()!=null) { + if(!personalInfo.getPersonalName().matches(ServiceDefaultVar.NAME_REGULAR_EXPRESS.toString())){ + throw new ServiceOperationException(ServiceError.WRONG_NAME_FORM); + } + if(personalInfoService.isPersonalNameUsed(personalInfo.getPersonalName(), userId)){ + return ResponseBaseEnum.PERSONAL_NAME_IS_USED.getResponseBase(requestId); + } + } + + personalInfoService.updatePersonalInfo(userEntity, personalInfo); + + ArrayList personalList = new ArrayList<>(); + personalList.add(AccountInfoResult.of(userEntity.getRole().name(), userEntity.getPersonalName(), userEntity.getPersonalSign(), + userEntity.getCreateAt(), userEntity.getAoId(), userEntity.getClientUUID(), userEntity.getPhoneModel(), + userEntity.getUserDomain(), userEntity.getImageMd5(), null, null, null)); + return ResponseBase.of(ResponseCodeConstant.ACC_201, "update user info success", + requestId, personalList); + } + + /** + * 管理员更新成员用户名称信息 + * @author suqin + * @param userId userId + * @param requestId requestId + * @param memberNameUpdateInfo 成员用户名称信息 + * @date 2021-10-08 21:39:57 + **/ + @Logged + @POST + @Transactional + @Path("/member/name/update") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to update member name information, only admin and yourself has right.") + public ResponseBase memberNameUpdateResult(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @Schema(description = "修改者信息和被修改这信息")MemberNameUpdateInfo memberNameUpdateInfo){ + if(personalInfoService.isPersonalNameUsed(memberNameUpdateInfo.nickName(),userId)){ + return ResponseBaseEnum.PERSONAL_NAME_IS_USED.getResponseBase(requestId); + } + UserEntity userInfo = memberManageService.findByUserId(userId); + if(userId.equals("1") || userInfo.getAoId().equals(memberNameUpdateInfo.aoId())){ + UserEntity userModify = memberManageService.findByAoId(memberNameUpdateInfo.aoId()); + userModify.setPersonalName(memberNameUpdateInfo.nickName()); + return ResponseBase.of(ResponseCodeConstant.ACC_201, "Modify nickname success", + requestId, memberNameUpdateInfo); + } else{ + throw new ServiceOperationException(ServiceError.NO_MODIFY_RIGHTS); + } + } + + /** + * 更新个人头像 + * @author suqin + * @param userId userId + * @param requestId requestId + * @param personalImage 用户头像 + * @date 2021-10-08 21:39:57 + **/ + @POST + @Transactional + @Path("/personal/image/update") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.MULTIPART_FORM_DATA) + public PersonalCallResult updatePersonalImage(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid MultiPersonalInfo personalImage) { + var userEntity = memberManageService.findByUserId(userId); + String imageFolder = properties.accountImageLocation()+"aoid-"+userId+"/"; + String imagePath = imageFolder + utils.jsonToObject(personalImage.param, HashMap.class).get("filename"); + FileUtils.createFileIfNotExists(imagePath); + try (FileOutputStream stream = new FileOutputStream(ResourceUtils.getFile(imagePath))) { + byte[] b = personalImage.inputStream.readAllBytes(); + stream.write(b, 0, b.length); + userEntity.setImageMd5(DigestUtils.md5Hex(b)); + userEntity.setImage(imagePath); + } catch (Exception ie) { + LOG.errorv("requestId: {0}, upload file failed: {1}",requestId, ie); + throw new ServiceOperationException(ServiceError.UPLOAD_FILE_FAILED); + } + return PersonalCallResult.of(201, memberManageService.findByUserId(userId).getClientUUID()); + } + + /** + * 成员获取他人头像 + * @author suqin + * @param userId userId + * @param requestId requestId + * @param aoid aoId + * @date 2021-10-08 21:39:57 + **/ + @GET + @Path("/personal/image") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + @Consumes(MediaType.APPLICATION_JSON) + @Transactional + @Operation(description = "Tries to download personal image, you also can get the image of other member by clientUUID") + public Response personalImageResult(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @QueryParam("aoid") String aoid) { + var userEntity = new UserEntity(); + if (!StringUtils.isBlank(aoid)) { + userEntity = memberManageService.findByAoId(aoid); + } else { + userEntity = memberManageService.findByUserId(userId); + } + + if(userEntity == null) { + throw new ServiceOperationException(ServiceError.USER_NOT_FOUND); + } + String imagePath = userEntity.getImage(); + File avatarFile; + + try { + if (StringUtils.isBlank(imagePath)||userEntity.getImage().contains("s.png")) { + imagePath = DEFAULT_IMAGE_PATH + DEFAULT_AVATAR_FILE.toString(); + avatarFile = FileUtils.readDefaultFile(imagePath); + } else { + avatarFile = ResourceUtils.getFile(imagePath); + } + return Response.ok(avatarFile).header("Content-Disposition", "attachment;filename=" + + imagePath.substring(imagePath.lastIndexOf('/') + 1)). + header("Content-Length", avatarFile.length()).build(); + } catch (Exception e) { + LOG.errorv("requestId: {0}, get image failed: {1}", requestId, e); + throw new ServiceOperationException(ServiceError.GET_IMAGE_FAILED); + } + + } + + + /** + * 更新用户信息 + * @author zhichuang + * @param userId userId + * @param requestId requestId + * @date 2021-10-08 21:39:57 + **/ + @Logged + @PUT + @Transactional + @Path("/personal/info") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to update member information, only admin and yourself has right.") + public ResponseBase editUserInfo(@Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Valid @Schema(description = "修改者信息和被修改的信息") PersonalInfo personalInfo) { + return userInfoUpdate(userId, requestId, personalInfo); + } + + + @Logged + public ResponseBase userInfoUpdate(String userId, String requestId, PersonalInfo personalInfo) { + if(!StringUtils.isBlank(personalInfo.getUserDomain())){ + return ResponseBase.of("ACC-4022", "domain name cannot be modified", requestId, + null); + } + if(Objects.nonNull(personalInfo.getPersonalName()) && personalInfoService.isPersonalNameUsed(personalInfo.getPersonalName(), userId)){ + return ResponseBaseEnum.PERSONAL_NAME_IS_USED.getResponseBase(requestId); + } + var userEntity = memberManageService.findByUserId(userId); + if(StringUtils.isBlank(personalInfo.getAoId())){ + throw new ServiceOperationException(ServiceError.INVALID_AO_ID); + } + if (userId.equals("1") || personalInfo.getAoId().equals(userEntity.getAoId())) { + UserEntity userModify = memberManageService.findByAoId(personalInfo.getAoId()); + if (Objects.isNull(userModify)) { + throw new ServiceOperationException(ServiceError.USER_NOT_FOUND); + } + personalInfoService.updatePersonalInfo(userModify, personalInfo); + return ResponseBase.of(ResponseCodeConstant.ACC_201, "The user information is modified successfully.", + requestId, PersonalInfoResult.of(true, null)); + } else { + return ResponseBase.of("ACC-4001", "Failed to modify user information, permission denied", + requestId, PersonalInfoResult.of(false, null)); + } + } +} diff --git a/src/main/java/space/ao/services/account/personalinfo/service/PersonalInfoService.java b/src/main/java/space/ao/services/account/personalinfo/service/PersonalInfoService.java new file mode 100644 index 0000000..8bddb77 --- /dev/null +++ b/src/main/java/space/ao/services/account/personalinfo/service/PersonalInfoService.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.personalinfo.service; + +import java.util.Objects; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import space.ao.services.account.personalinfo.dto.PersonalInfo; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.support.StringUtils; +import space.ao.services.support.log.Logged; + +@ApplicationScoped +public class PersonalInfoService { + @Inject + UserInfoRepository userInfoRepository; + + + /** + * 验证 personalName 是否已使用 + * @param personalName 用户名 + * @return 是否已使用 + */ + @Transactional + public boolean isPersonalNameUsed(String personalName, String userid) { + var userEntities = userInfoRepository.findByPersonalName(personalName); + if(userEntities.isEmpty()){ + return false; + } else { + return userEntities.stream().map(UserEntity::getId).noneMatch(Long.valueOf(userid)::equals); + } + } + + /** + * 验证 personalName 是否已使用 + * @param personalName 用户名 + * @return 是否已使用 + */ + @Transactional + public boolean isPersonalNameUsed(String personalName) { + var userEntities = userInfoRepository.findByPersonalName(personalName); + return !userEntities.isEmpty(); + } + + /** + * 修改用户信息不包括子域名 + * @param userModify 用户信息数据库实体 + * @param personalInfo 要修改的用户信息 + */ + @Transactional + @Logged + public void updatePersonalInfo(UserEntity userModify, PersonalInfo personalInfo){ + if (!StringUtils.isBlank(personalInfo.getPersonalName())){ + userModify.setPersonalName(personalInfo.getPersonalName()); + } + if (!Objects.isNull(personalInfo.getPersonalSign())){ + userModify.setPersonalSign(personalInfo.getPersonalSign()); + } + if (!StringUtils.isBlank(personalInfo.getPhoneModel())){ + userModify.setPhoneModel(personalInfo.getPhoneModel()); + } + } +} diff --git a/src/main/java/space/ao/services/account/security/dto/ApplyInfoNewDeviceReq.java b/src/main/java/space/ao/services/account/security/dto/ApplyInfoNewDeviceReq.java new file mode 100644 index 0000000..cc5822c --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/ApplyInfoNewDeviceReq.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data +public class ApplyInfoNewDeviceReq { + + @Schema(description = "设备类型") + @NotBlank(message = "不可为空") + private String deviceInfo; + + @Schema(description = "新设备的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; + + @Schema(description = "本次申请的id") + private String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/ApplyInfoReq.java b/src/main/java/space/ao/services/account/security/dto/ApplyInfoReq.java new file mode 100644 index 0000000..157638a --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/ApplyInfoReq.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class ApplyInfoReq { + @Schema(description = "设备类型") + @NotBlank(message = "不可为空") + private String deviceInfo; + + @Schema(description = "本次申请的id") + private String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/ApplyPushNotificationRsp.java b/src/main/java/space/ao/services/account/security/dto/ApplyPushNotificationRsp.java new file mode 100644 index 0000000..6593a1c --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/ApplyPushNotificationRsp.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +@RegisterForReflection +public class ApplyPushNotificationRsp { + @NotBlank + @Schema(description = "允许/拒绝时请求参数 token") + private final SecurityTokenRes securityTokenRes; + + @NotBlank + @Schema(description = "授权端 userId") + private final String authUserId; + + @NotBlank + @Schema(description = "授权端 clientUUid") + private final String authClientUUid; + + @NotBlank + @Schema(description = "授权端设备信息") + private final String authDeviceInfo; + + @NotBlank + @Schema(description = "追溯请求 id") + private final String requestId; + + @NotBlank + @Schema(description = "本次申请的id") + private final String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityEmailCheckReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityEmailCheckReq.java new file mode 100644 index 0000000..0ccadf3 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityEmailCheckReq.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityEmailCheckReq { + @Schema(description = "邮箱账户") + @NotBlank(message = "不可为空") + @Email(message = "邮箱格式错误") + private String emailAccount; + + @Schema(description = "邮箱密码,使用16进制Hex编码") + @NotBlank(message = "不可为空") + private String emailPasswd; + + @Schema(description = "邮箱服务器,默认使用 smtp") + private String host; + + @Schema(description = "邮箱端口号") + private String port; + + @Schema(description = "邮箱服务是否启用 ssl") + private Boolean sslEnable; + + @Schema(description = "发起请求者的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityEmailModifyReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityEmailModifyReq.java new file mode 100644 index 0000000..46be4a0 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityEmailModifyReq.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityEmailModifyReq { + @Schema(description = "获取到的 securityToken") + @NotBlank(message = "不可为空") + private String securityToken; + + @Schema(description = "新密保邮箱") + @NotBlank(message = "不可为空") + @Email(message = "邮箱格式错误") + private String emailAccount; + + @Schema(description = "新邮箱密码,使用16进制Hex编码") + @NotBlank(message = "不可为空") + private String emailPasswd; + + @Schema(description = "邮箱服务器,默认使用 smtp") + @NotBlank(message = "不可为空") + private String host; + + @Schema(description = "邮箱端口号") + @NotBlank(message = "不可为空") + private String port; + + @Schema(description = "邮箱服务是否启用 ssl") + private boolean sslEnable; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityEmailSetOrModifyInLocalReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityEmailSetOrModifyInLocalReq.java new file mode 100644 index 0000000..199116e --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityEmailSetOrModifyInLocalReq.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityEmailSetOrModifyInLocalReq { + + @Schema(description = "登录网关后授权令牌") + @NotBlank(message = "不可为空") + private String accessToken; + + @Schema(description = "新密保邮箱") + @NotBlank(message = "不可为空") + @Email(message = "邮箱格式错误") + private String emailAccount; + + @Schema(description = "新邮箱密码,使用16进制Hex编码") + @NotBlank(message = "不可为空") + private String emailPasswd; + + @Schema(description = "邮箱服务器,默认使用 smtp") + @NotBlank(message = "不可为空") + private String host; + + @Schema(description = "邮箱端口号") + @NotBlank(message = "不可为空") + private String port; + + @Schema(description = "邮箱服务是否启用 ssl") + private boolean sslEnable; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityEmailSetReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityEmailSetReq.java new file mode 100644 index 0000000..7e135aa --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityEmailSetReq.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityEmailSetReq { + @Schema(description = "获取到的 securityToken") + @NotBlank(message = "不可为空") + private String securityToken; + + @Schema(description = "新密保邮箱") + @NotBlank(message = "不可为空") + @Email(message = "邮箱格式错误") + private String emailAccount; + + @Schema(description = "新邮箱密码,使用16进制Hex编码") + @NotBlank(message = "不可为空") + private String emailPasswd; + + @Schema(description = "邮箱服务器,默认使用 smtp") + @NotBlank(message = "不可为空") + private String host; + + @Schema(description = "邮箱端口号") + @NotBlank(message = "不可为空") + private String port; + + @Schema(description = "邮箱服务是否启用 ssl") + private boolean sslEnable; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityEmailSettingRsp.java b/src/main/java/space/ao/services/account/security/dto/SecurityEmailSettingRsp.java new file mode 100644 index 0000000..bae20f1 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityEmailSettingRsp.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityEmailSettingRsp { + @Schema(description = "新密保邮箱") + @NotBlank(message = "不可为空") + private final String emailAccount; + + @Schema(description = "邮箱服务器,默认使用 smtp") + @NotBlank(message = "不可为空") + private final String host; + + @Schema(description = "邮箱端口号") + @NotBlank(message = "不可为空") + private final String port; + + @Schema(description = "邮箱服务是否启用 ssl") + private final boolean sslEnable; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityMessagePollReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityMessagePollReq.java new file mode 100644 index 0000000..fd09415 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityMessagePollReq.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityMessagePollReq { + @Schema(description = "发起请求者的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityMessageRsp.java b/src/main/java/space/ao/services/account/security/dto/SecurityMessageRsp.java new file mode 100644 index 0000000..62ee332 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityMessageRsp.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data +@AllArgsConstructor +@RegisterForReflection +public class SecurityMessageRsp { + @Schema(description = "消息类型") + @NotBlank(message = "不可为空") + private String msgType; + + @Schema(description = "获取到的 securityToken") + @NotBlank(message = "不可为空") + private SecurityTokenRes securityTokenRes; + + @Schema(description = "绑定端的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; + + @Schema(description = "true 允许, false 拒绝") + @NotBlank(message = "不可为空") + private boolean accept; + + @Schema(description = "追溯请求 id") + @NotBlank(message = "不可为空") + private String requestId; + + @Schema(description = "本次申请的id") + @NotBlank(message = "不可为空") + private String applyId; + + public static SecurityMessageRsp of(String msgType, + SecurityTokenRes securityTokenRes, + String clientUuid, + boolean accept, + String requestId, + String applyId) { + return new SecurityMessageRsp(msgType, securityTokenRes, clientUuid, accept, requestId, + applyId); + } +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityMessageStore.java b/src/main/java/space/ao/services/account/security/dto/SecurityMessageStore.java new file mode 100644 index 0000000..bccc717 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityMessageStore.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +import java.time.ZonedDateTime; + +@Data +@AllArgsConstructor +@RegisterForReflection +public class SecurityMessageStore { + @NotBlank + @Schema(description = "返回给客户端的消息") + private SecurityMessageRsp securityMessageRsp; + + @NotBlank + @Schema(description = "本消息过期时间") + private ZonedDateTime expiresAt; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdCheckReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdCheckReq.java new file mode 100644 index 0000000..99a1e03 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdCheckReq.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityPasswdCheckReq { + @Schema(description = "原密码") + @NotBlank(message = "不可为空") + private String oldPasswd; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyAutherReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyAutherReq.java new file mode 100644 index 0000000..fb082de --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyAutherReq.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +@Data(staticConstructor = "of") +public class SecurityPasswdModifyAutherReq { + @Schema(description = "获取到的 securityToken") + @NotBlank(message = "不可为空") + private String securityToken; + + @Schema(description = "绑定端的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; + + @Schema(description = "原密码") + @NotBlank(message = "不可为空") + private String oldPasswd; + + @Schema(description = "新密码") + @Size(min = 6, message = "长度必须是6位或以上") + private String newPasswd; + + @Schema(description = "本次申请的id") + private String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyBinderAcceptReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyBinderAcceptReq.java new file mode 100644 index 0000000..26a3f18 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyBinderAcceptReq.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityPasswdModifyBinderAcceptReq { + + @Schema(description = "获取到的 securityToken") + @NotBlank(message = "不可为空") + private String securityToken; + + @Schema(description = "授权端的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; + + @Schema(description = "true 允许, false 拒绝") + private boolean accept; + + @Schema(description = "本次申请的id") + private String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyByBinderReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyByBinderReq.java new file mode 100644 index 0000000..368fa3e --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdModifyByBinderReq.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +@Data(staticConstructor = "of") +public class SecurityPasswdModifyByBinderReq { + @Schema(description = "原密码") + @NotBlank(message = "不可为空") + private String oldPasswd; + + @Schema(description = "新密码") + @Size(min = 6, message = "长度必须是6位或以上") + private String newPasswd; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetAutherInLocalReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetAutherInLocalReq.java new file mode 100644 index 0000000..949057c --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetAutherInLocalReq.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +@Data(staticConstructor = "of") +public class SecurityPasswdResetAutherInLocalReq { + @Schema(description = "登录网关后授权令牌") + @NotBlank(message = "不可为空") + private String accessToken; + + @Schema(description = "绑定端允许拿到的 securityToken") + @NotBlank(message = "不可为空") + private String acceptSecurityToken; + + @Schema(description = "绑定端的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; + + @Schema(description = "新密码") + @Size(min = 6, message = "长度必须是6位或以上") + private String newPasswd; + + @Schema(description = "本次申请的id") + private String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetAutherReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetAutherReq.java new file mode 100644 index 0000000..af01c10 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetAutherReq.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +@Data(staticConstructor = "of") +public class SecurityPasswdResetAutherReq { + + @Schema(description = "绑定端允许拿到的 securityToken") + @NotBlank(message = "不可为空") + private String acceptSecurityToken; + + @Schema(description = "邮箱验证通过拿到的 securityToken") + @NotBlank(message = "不可为空") + private String emailSecurityToken; + + @Schema(description = "绑定端的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; + + @Schema(description = "新密码") + @Size(min = 6, message = "长度必须是6位或以上") + private String newPasswd; + + @Schema(description = "本次申请的id") + private String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetBinderAcceptReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetBinderAcceptReq.java new file mode 100644 index 0000000..4ab5565 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetBinderAcceptReq.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +public class SecurityPasswdResetBinderAcceptReq { + @Schema(description = "获取到的 securityToken") + @NotBlank(message = "不可为空") + private String securityToken; + + @Schema(description = "授权端/新设备的 clientUuid") + @NotBlank(message = "不可为空") + private String clientUuid; + + @Schema(description = "true 允许, false 拒绝") + private boolean accept; + + @Schema(description = "本次申请的id") + private String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetByBinderInLocalReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetByBinderInLocalReq.java new file mode 100644 index 0000000..ec14eda --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetByBinderInLocalReq.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +@Data(staticConstructor = "of") +public class SecurityPasswdResetByBinderInLocalReq { + + @Schema(description = "登录网关后授权令牌") + @NotBlank(message = "不可为空") + private String accessToken; + + @Schema(description = "新密码") + @Size(min = 6, message = "长度必须是6位或以上") + private String newPasswd; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetByBinderReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetByBinderReq.java new file mode 100644 index 0000000..fddd7b0 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetByBinderReq.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +@Data(staticConstructor = "of") +public class SecurityPasswdResetByBinderReq { + + @Schema(description = "获取到的 securityToken") + @NotBlank(message = "不可为空") + private String securityToken; + + @Schema(description = "新密码") + @Size(min = 6, message = "长度必须是6位或以上") + private String newPasswd; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetNewDeviceReq.java b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetNewDeviceReq.java new file mode 100644 index 0000000..8b2f1ae --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityPasswdResetNewDeviceReq.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +@Data +@RegisterForReflection +public class SecurityPasswdResetNewDeviceReq { + @Schema(description = "绑定端允许拿到的 securityToken") + // @NotBlank(message = "不可为空") , 新设备可在绑定端未允许的情况下重置 + private String acceptSecurityToken; + + @Schema(description = "邮箱验证通过拿到的 securityToken") + @NotBlank(message = "不可为空") + private String emailSecurityToken; + + @Schema(description = "绑定端的 clientUuid") + // @NotBlank(message = "不可为空") , 新设备可在绑定端未允许的情况下重置 + private String clientUuid; + + @Schema(description = "新设备的 clientUuid") + @NotBlank(message = "不可为空") + private String newDeviceClientUuid; + + @Schema(description = "新密码") + @Size(min = 6, message = "长度必须是6位或以上") + private String newPasswd; + + @Schema(description = "本次申请的id") + private String applyId; +} diff --git a/src/main/java/space/ao/services/account/security/dto/SecurityTokenRes.java b/src/main/java/space/ao/services/account/security/dto/SecurityTokenRes.java new file mode 100644 index 0000000..5b8f519 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SecurityTokenRes.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + + +@Data +@AllArgsConstructor +@RegisterForReflection +public class SecurityTokenRes { + @Schema(description = "安全密码/邮箱验证/绑定端确认/修改端提交 等等token。") + @NotBlank(message = "不可为空") + private String securityToken; + + @Schema(description = "该 token 失效时间. ") + @NotBlank(message = "不可为空") + private String expiredAt; + + public static SecurityTokenRes of(String securityToken, String expiredAt) { + return new SecurityTokenRes(securityToken, expiredAt); + } +} diff --git a/src/main/java/space/ao/services/account/security/dto/SuccPushNotitificationRsp.java b/src/main/java/space/ao/services/account/security/dto/SuccPushNotitificationRsp.java new file mode 100644 index 0000000..111e592 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/dto/SuccPushNotitificationRsp.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data(staticConstructor = "of") +@RegisterForReflection +public class SuccPushNotitificationRsp { + @Schema(description = "追溯请求 id") + @NotBlank(message = "不可为空") + private final String requestId; + @Schema(description = "修改后的邮箱") + private final String email; +} diff --git a/src/main/java/space/ao/services/account/security/rest/SecurityMessagePoll.java b/src/main/java/space/ao/services/account/security/rest/SecurityMessagePoll.java new file mode 100644 index 0000000..1835c09 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/rest/SecurityMessagePoll.java @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.rest; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.security.service.SecurityMessageService; +import space.ao.services.account.security.utils.SignUtil; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.security.dto.SecurityMessagePollReq; +import space.ao.services.account.security.dto.SecurityMessageRsp; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.AccessToken; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import java.util.List; + +/** + * 密码 http 接口类。 + */ +@Path("/v1/api/security/message") +@Tag(name = "Security Message Service (since 1.0.7)", description = "安全密码相关的消息处理接口。") +public class SecurityMessagePoll { + + @Inject + SecurityMessageService securityMessageService; + + @Inject + SignUtil signUtil; + private static final String INVALID_SIGN = "invalid_sign !"; + + /** + * 消息轮询接口. + */ + @POST + @Logged + @Path("/poll") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "消息轮询接口.") + public ResponseBase> poll(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + @Valid SecurityMessagePollReq req) { + return securityMessageService.poll(requestId, userId, clientUUid, req); + } + + /** + * 消息轮询接口(called by system-agent). + */ + @POST + @Logged + @Path("/poll/local") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "消息轮询接口(called by system-agent).") + public ResponseBase> pollInLocal(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "调用者的 clientUuid") @NotBlank(message = "不可为空") @HeaderParam("clientUuid") String clientUuid, + @Schema(description = "使用盒子私钥对 clientUuid 签名, 签名算法用 sha256.") @NotBlank(message = "不可为空") @HeaderParam("clientUuidSign") String clientUuidSign, + @Valid SecurityMessagePollReq req) { + + if (signUtil.verifySign(requestId, clientUuid, clientUuidSign)) { + return securityMessageService.pollInLocal(requestId, req); + } + return ResponseBase.forbidden(INVALID_SIGN, requestId); + } +} diff --git a/src/main/java/space/ao/services/account/security/rest/SecurityPasswordResource.java b/src/main/java/space/ao/services/account/security/rest/SecurityPasswordResource.java new file mode 100644 index 0000000..538fb15 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/rest/SecurityPasswordResource.java @@ -0,0 +1,360 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.rest; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.security.dto.*; +import space.ao.services.account.security.service.SecurityPasswordAuthorService; +import space.ao.services.account.security.service.SecurityPasswordBinderService; +import space.ao.services.account.security.service.SecurityPasswordNewDeviceService; +import space.ao.services.account.security.utils.SignUtil; +import space.ao.services.account.security.utils.UserRoleUtil; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.limit.LimitReq; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.AccessToken; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; + +/** + * 密码 http 接口类。 + */ +@Path("/v1/api/security/passwd") +@Tag(name = "Security Password Service (since 1.0.7)", description = "密码 http 接口类。提供修改/重置等接口。") +public class SecurityPasswordResource { + @Inject + SecurityPasswordBinderService securityPasswordBinderService; + + @Inject + SecurityPasswordAuthorService securityPasswordAuthorService; + + @Inject + SecurityPasswordNewDeviceService securityPasswordNewDeviceService; + + @Inject + UserRoleUtil userRoleUtil; + + @Inject + SignUtil signUtil; + + @Inject + TokenUtils tokenUtils; + + private static final String USER_ROLE_ERROR = "user role error"; + private static final String INVALID_CLIENTUUID = "invalid_clientuuid !"; + private static final String INVALID_SIGN = "invalid_sign !"; + private static final String ACCESS_TOKEN_ERROR = "access token error"; + + /** + * 验证安全密码(获取 SecurityTokenRes). 其他两步验证需要先调用本接口作为第一步验证. + * @param requestId 请求 id + * @return SecurityToken。 + * @since 1.0.7 + */ + @POST + @Logged + @Path("/verify") + @LimitReq(keyPrefix="SCREQRATE-") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "验证安全密码(获取 SecurityTokenRes). 其他两步验证需要先调用本接口作为第一步验证") + public ResponseBase securityPasswdVerify(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + @Valid SecurityPasswdCheckReq req) { + return securityPasswordBinderService.securityPasswdVerify(requestId, clientUUid, req); + } + + /** + * 绑定端直接修改(使用原密码) + * @param requestId 请求 id + * @return ResponseBase。 + * @since 1.0.7 + */ + @POST + @Logged + @Path("/modify/binder") + @LimitReq(keyPrefix="SCREQRATE-") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "绑定端直接修改(使用原密码)") + public ResponseBase securityPasswdModifyByBinder(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + @Valid SecurityPasswdModifyByBinderReq req) { + if (!userRoleUtil.adminBindRole(clientUUid)) { + return ResponseBase.forbidden("user role error", requestId); + } + + return securityPasswordBinderService.securityPasswdModifyByBinder(requestId, req); + } + + /** + * 绑定端直接重置(called by system-agent) + * @param requestId 请求 id + * @return ResponseBase。 + * @since 1.0.7 + */ + @POST + @Logged + @Path("/reset/binder/local") + @LimitReq(keyPrefix="SCREQRATE-") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "绑定端直接重置(called by system-agent)") + public ResponseBase securityPasswdResetByBinderInLocal(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "配对的 clientUuid") @NotBlank(message = "不可为空") @HeaderParam("clientUuid") String clientUuid, + @Schema(description = "使用盒子私钥对 clientUuid 签名, 签名算法用 sha256.") @NotBlank(message = "不可为空") @HeaderParam("clientUuidSign") String clientUuidSign, + @Valid SecurityPasswdResetByBinderInLocalReq req) { + if (!signUtil.verifySign(requestId, clientUuid, clientUuidSign)) { + return ResponseBase.forbidden(INVALID_SIGN, requestId); + } + if (!userRoleUtil.adminBindRole(clientUuid)) { + return ResponseBase.forbidden(INVALID_CLIENTUUID, requestId); + } + var ak = tokenUtils.verifyAccessToken(requestId, req.getAccessToken()); + if (null==ak) { + return ResponseBase.forbidden(ACCESS_TOKEN_ERROR, requestId); + } + if (!userRoleUtil.adminBindRole(ak.getClientUUID())) { + return ResponseBase.forbidden(USER_ROLE_ERROR, requestId); + } + return securityPasswordBinderService.securityPasswdResetByBinderInLocal(requestId, req); + } + + /** + * 授权端请求修改 + * @param requestId 请求 id + * @return ResponseBase。 + * @since 1.0.7 + */ + @POST + @Logged + @Path("/modify/auther/apply") + @LimitReq(keyPrefix="SCREQRATE-", max = 3) // 上线前改成 3 次! 临时测试方便可以改大. + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "授权端请求修改") + public ResponseBase securityPasswdModifyAutherApply(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + @Valid ApplyInfoReq req) { + if (!userRoleUtil.adminAuthRole(userId, clientUUid)) { + return ResponseBase.forbidden("user role error", requestId); + } + return securityPasswordAuthorService.securityPasswdModifyAuthorApply(requestId, userId, clientUUid, req); + } + + /** + * 绑定端允许修改 + * @param requestId requestId + * @param userId userId + * @param clientUUid clientUUid + * @param req SecurityPasswdModifyBinderAcceptReq + * @return 修改结果 + */ + @POST + @Logged + @Path("/modify/binder/accept") + @LimitReq(keyPrefix="SCREQRATE-") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "绑定端允许修改") + public ResponseBase securityPasswdModifyBinderAccept(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + @Valid SecurityPasswdModifyBinderAcceptReq req) { + if (!userRoleUtil.adminBindRole(clientUUid)) { + return ResponseBase.forbidden("user role error", requestId); + } + return securityPasswordAuthorService.securityPasswdModifyBinderAccept(requestId, userId, clientUUid, req); + } + + /** + * 授权端提交修改 + * @param requestId requestId + * @param userId userId + * @param clientUUid clientUUid + * @param req SecurityPasswdModifyAutherReq + * @return 提交结果 + */ + @POST + @Logged + @Path("/modify/auther") + @LimitReq(keyPrefix="SCREQRATE-") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "授权端提交修改") + public ResponseBase securityPasswdModifyAuther(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + @Valid SecurityPasswdModifyAutherReq req) { + if (!userRoleUtil.adminAuthRole(userId, clientUUid)) { + return ResponseBase.forbidden("user role error", requestId); + } + return securityPasswordAuthorService.securityPasswdModifyAuthor(requestId, userId, clientUUid, req); + } + + /** + * 授权端请求重置 + * @param requestId 请求 id + * @return ResponseBase。 + * @since 1.0.7 + */ + @POST + @Logged + @Path("/reset/auther/apply") + @LimitReq(keyPrefix="SCREQRATE-", max = 3) // 上线前改成 3 次! 临时测试方便可以改大. + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "授权端请求重置") + public ResponseBase securityPasswdResetAutherApply(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + @Valid ApplyInfoReq req) { + if (!userRoleUtil.adminAuthRole(userId, clientUUid)) { + return ResponseBase.forbidden("user role error", requestId); + } + return securityPasswordAuthorService.securityPasswdResetAuthorApply(requestId, userId, clientUUid, req); + } + + /** + * 绑定端允许重置 + * @param requestId requestId + * @param userId userId + * @param clientUUid clientUUid + * @param req SecurityPasswdResetBinderAcceptReq + * @return 重置结果 + */ + @POST + @Logged + @Path("/reset/binder/accept") + @LimitReq(keyPrefix="SCREQRATE-") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "绑定端允许重置") + public ResponseBase securityPasswdResetBinderAccept(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam(AccessToken.AK_CLIENT_UUID) String clientUUid, + @Valid SecurityPasswdResetBinderAcceptReq req) { + if (!userRoleUtil.adminBindRole(clientUUid)) { + return ResponseBase.forbidden("user role error", requestId); + } + return securityPasswordAuthorService.securityPasswdResetBinderAccept(requestId, clientUUid, req); + } + + /** + * 授权端提交重置(called by system-agent) + * @param requestId requestId + * @param clientUuid clientUuid + * @param clientUuidSign clientUuidSign + * @param req SecurityPasswdResetAutherInLocalReq + * @return 重置结果 + */ + @POST + @Logged + @Path("/reset/auther/local") + @LimitReq(keyPrefix="SCREQRATE-") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "授权端提交重置(called by system-agent)") + public ResponseBase securityPasswdResetAutherInLocal(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "配对的 clientUuid") @NotBlank(message = "不可为空") @HeaderParam("clientUuid") String clientUuid, + @Schema(description = "使用盒子私钥对 clientUuid 签名, 签名算法用 sha256.") @NotBlank(message = "不可为空") @HeaderParam("clientUuidSign") String clientUuidSign, + @Valid SecurityPasswdResetAutherInLocalReq req) { + if (!signUtil.verifySign(requestId, clientUuid, clientUuidSign)) { + return ResponseBase.forbidden(INVALID_SIGN, requestId); + } + if (!userRoleUtil.adminBindRole(clientUuid)) { + return ResponseBase.forbidden(INVALID_CLIENTUUID, requestId); + } + var ak = tokenUtils.verifyAccessToken(requestId, req.getAccessToken()); + if (null==ak) { + return ResponseBase.forbidden(ACCESS_TOKEN_ERROR, requestId); + } + if (!userRoleUtil.adminAuthRole("1", ak.getClientUUID())) { + return ResponseBase.forbidden(USER_ROLE_ERROR, requestId); + } + return securityPasswordAuthorService.securityPasswdResetAuthorInLocal(requestId, clientUuid, req); + } + + /** + * 新设备申请重置(called by system-agent) + * @param requestId requestId + * @param clientUuid clientUuid + * @param clientUuidSign clientUuidSign + * @param req ApplyInfoNewDeviceReq + * @return 申请结果 + */ + @POST + @Logged + @Path("/reset/newdevice/apply/local") + @LimitReq(keyPrefix="SCREQRATE-", max = 3) // 上线前改成 3 次! 临时测试方便可以改大. + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "新设备申请重置(called by system-agent)") + public ResponseBase securityPasswdResetNewDeviceApplyInLocal(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "配对的 clientUuid") @NotBlank(message = "不可为空") @HeaderParam("clientUuid") String clientUuid, + @Schema(description = "使用盒子私钥对 clientUuid 签名, 签名算法用 sha256.") @NotBlank(message = "不可为空") @HeaderParam("clientUuidSign") String clientUuidSign, + @Valid ApplyInfoNewDeviceReq req) { + if (!signUtil.verifySign(requestId, clientUuid, clientUuidSign)) { + return ResponseBase.forbidden(INVALID_SIGN, requestId); + } + if (!userRoleUtil.adminBindRole(clientUuid)) { + return ResponseBase.forbidden(INVALID_CLIENTUUID, requestId); + } + return securityPasswordNewDeviceService.securityPasswdResetNewDeviceApplyInLocal(requestId, clientUuid, req); + } + + /** + * 新设备提交重置(called by system-agent) + * @param requestId requestId + * @param btid btid 蓝牙 + * @param btidSign btid 签名 + * @param req SecurityPasswdResetNewDeviceReq + * @return 重置结果 + */ + @POST + @Logged + @Path("/reset/newdevice/local") + @LimitReq(keyPrefix="SCREQRATE-") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "新设备提交重置(called by system-agent)") + public ResponseBase securityPasswdResetNewDeviceInLocal(@Valid @NotBlank @HeaderParam("Request-Id") String requestId, + @Schema(description = "配对的 btid") @HeaderParam("btid") String btid, + @Schema(description = "使用盒子私钥对 btid 签名, 签名算法用 sha256.") @HeaderParam("btidSign") String btidSign, + @Schema(description = "配对的 clientUuid") @HeaderParam("clientUuid") String clientUuid, + @Schema(description = "使用盒子私钥对 clientUuid 签名, 签名算法用 sha256.") @HeaderParam("clientUuidSign") String clientUuidSign, + @Valid SecurityPasswdResetNewDeviceReq req) { + if (!signUtil.verifySign(requestId, btid, btidSign) && !signUtil.verifySign(requestId, clientUuid,clientUuidSign)) { + return ResponseBase.forbidden(INVALID_SIGN, requestId); + } + return securityPasswordNewDeviceService.securityPasswdResetNewDeviceInLocal(requestId, + req.getApplyId(), + req.getNewDeviceClientUuid(), + req); + } + +} diff --git a/src/main/java/space/ao/services/account/security/service/SecurityMessageService.java b/src/main/java/space/ao/services/account/security/service/SecurityMessageService.java new file mode 100644 index 0000000..098cae0 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/service/SecurityMessageService.java @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.service; + +import io.quarkus.logging.Log; +import space.ao.services.support.redis.SecurityMessageRedisService; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.security.dto.SecurityMessagePollReq; +import space.ao.services.account.security.dto.SecurityMessageRsp; +import space.ao.services.account.security.dto.SecurityMessageStore; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import java.time.Duration; +import java.time.ZonedDateTime; +import java.util.ArrayList; +import java.util.List; + +@ApplicationScoped +public class SecurityMessageService { + @Inject + SecurityMessageRedisService securityMessageRedisService; + @Inject + OperationUtils utils; + + @Inject + ApplicationProperties properties; + + private final String redisKeyPrefix = "SCP-"; + +// map> + public void storeMessage(String toClientUUid, SecurityMessageStore securityMessageStore) { + if (toClientUUid==null || toClientUUid.length()<1 || securityMessageStore==null) { + return; + } + + String k = redisKeyPrefix + toClientUUid; + securityMessageRedisService.rpush(k, utils.objectToJson(securityMessageStore)); + + var l= Duration.parse(properties.gatewayTimeOfSecurityPasswdAkLife()).toSeconds(); + securityMessageRedisService.expire(k, l); + } + + public List retriveMessage(String toClientUUid) { + + List lst = new ArrayList<>(); + + String k = redisKeyPrefix+toClientUUid; + securityMessageRedisService.lrange(k,0, -1).forEach((e) -> { + var msg = utils.jsonToObject(e, SecurityMessageStore.class); + lst.add(msg); + }); + + if (lst.size()>0) { + securityMessageRedisService.ltrim(k,lst.size(),-1); + } + + return lst; + } + + public ResponseBase> poll(String requestId, + String userId, + String clientUUid, + SecurityMessagePollReq req) { + + List res = new ArrayList<>(); + + var lst = retriveMessage(clientUUid); + int n = 0; + // redis 中数据为空时, 调用不会阻塞. 所有这里暂时增加重试. + while (lst.size()<1 && n++<5) { + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + Log.infov("security message poll error: {0},\n userid: {1}, clientUUID: {2}, " + + "SecurityMessagePollReq: {3}", e, userId, clientUUid, req); + Thread.currentThread().interrupt(); + } + lst = retriveMessage(clientUUid); + } + + for (SecurityMessageStore msg : lst) { + if (ZonedDateTime.now().isBefore(msg.getExpiresAt())) { + res.add(msg.getSecurityMessageRsp()); + } + } + + return ResponseBase.okACC(requestId, res); + } + + + public ResponseBase> pollInLocal(String requestId, + SecurityMessagePollReq req) { + + return poll( requestId, + "1", + req.getClientUuid(), + req); + } +} diff --git a/src/main/java/space/ao/services/account/security/service/SecurityPasswordAuthorService.java b/src/main/java/space/ao/services/account/security/service/SecurityPasswordAuthorService.java new file mode 100644 index 0000000..8e4686a --- /dev/null +++ b/src/main/java/space/ao/services/account/security/service/SecurityPasswordAuthorService.java @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.service; + +import org.jboss.logging.Logger; +import space.ao.services.account.security.dto.*; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.security.utils.PushUtils; +import space.ao.services.account.security.utils.SecurityPasswordUtils; +import space.ao.services.account.security.utils.token.SecurityTokenType; +import space.ao.services.account.security.utils.token.SecurityTokenUtils; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.push.dto.NotificationEnum; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import java.time.Duration; +import java.time.ZonedDateTime; + +/** + * 密码逻辑服务类。 + */ +@ApplicationScoped +public class SecurityPasswordAuthorService { + + @Inject + SecurityTokenUtils securityTokenUtils; + + @Inject + SecurityPasswordUtils securityPasswordUtils; + + @Inject + PushUtils pushUtils; + + @Inject + ApplicationProperties properties; + + @Inject + SecurityPasswordCommonService securityPasswordCommonService; + + static final Logger LOG = Logger.getLogger("app.log"); + + /** + * 授权端请求修改 + * @param requestId requestId + * @param userId userId + * @param clientUUid clientUUid + * @return 请求结果 + */ + public ResponseBase securityPasswdModifyAuthorApply(String requestId, + String userId, + String clientUUid, + ApplyInfoReq req) { + + var expiresAt = ZonedDateTime.now().plusSeconds( + Duration.parse(properties.gatewayTimeOfSecurityPasswdAkLife()).toSeconds()); + + pushUtils.doPushApply(requestId, req.getApplyId(), + NotificationEnum.SECURITY_PASSWD_MOD_APPLY, + userId, clientUUid, req.getDeviceInfo(), + SecurityTokenType.TOKEN_TYPE_APPLY_MODIFY_ADMIN_PWD, + expiresAt); + LOG.debug("securityPasswdModifyAutherApply succ, req="+req); + return ResponseBase.okACC(requestId, null); + } + + /** + * 绑定端允许修改 + * @param requestId requestId + * @param userId userId + * @param clientUUid clientUUid + * @return 验证结果 + */ + public ResponseBase securityPasswdModifyBinderAccept(String requestId, + String userId, + String clientUUid, + SecurityPasswdModifyBinderAcceptReq req) { + + var securityToken = securityTokenUtils.verifySecurityToken(requestId, req.getSecurityToken(), + SecurityTokenType.TOKEN_TYPE_APPLY_MODIFY_ADMIN_PWD, req.getClientUuid()); + if (securityToken == null) { + return ResponseBase.forbidden("verifySecurityToken error", requestId); + } + + pushUtils.doPushAccept(requestId, req.getApplyId(), + NotificationEnum.SECURITY_PASSWD_PARTICULAR_MOD_ACCEPT, + req.getClientUuid(), clientUUid, + req.isAccept(), + SecurityTokenType.TOKEN_TYPE_MODIFY_ADMIN_PWD); + + LOG.debugv("securityPasswdResetAuther succ, req={0}, userId: {1}", req, userId); + return ResponseBase.okACC(requestId, null); + } + + /** + * 授权端提交修改 + * @param requestId requestId + * @param userId userId + * @param clientUUid clientUUid + * @return 修改结果 + */ + public ResponseBase securityPasswdModifyAuthor(String requestId, + String userId, + String clientUUid, + SecurityPasswdModifyAutherReq req) { + + var securityToken = securityTokenUtils.verifySecurityToken(requestId, req.getSecurityToken(), + SecurityTokenType.TOKEN_TYPE_MODIFY_ADMIN_PWD, req.getClientUuid()); + if(securityToken == null){ + // 授权端申请重置密码的token,在修改安全密码时也可以使用 + securityToken = securityTokenUtils.verifySecurityToken(requestId, req.getSecurityToken(), + SecurityTokenType.TOKEN_TYPE_RESET_ADMIN_PWD, req.getClientUuid()); + } + if (securityToken == null) { + throw new ServiceOperationException(ServiceError.EMAIL_VERIFICATION_TOKEN_TIMEOUT); + } + + if (!securityPasswordUtils.doVerifyAndModifyPasswd(requestId, req.getOldPasswd(), req.getNewPasswd())) { + return ResponseBase.forbidden("password error", requestId); + } + + pushUtils.doPushSucc(requestId, + NotificationEnum.SECURITY_PASSWD_MOD_SUCC); + LOG.debugv("securityPasswdResetAuther succ, req={0}, userId: {1}, clientUUID {2}", req, userId, clientUUid); + return ResponseBase.okACC(requestId, null); + } + + /** + * 授权端请求重置 + * @param requestId requestId + * @param userId userId + * @param clientUUid clientUUid + * @return 请求结果 + */ + public ResponseBase securityPasswdResetAuthorApply(String requestId, + String userId, + String clientUUid, + ApplyInfoReq req) { + var r = new ApplyInfoNewDeviceReq(); + r.setDeviceInfo(req.getDeviceInfo()); + r.setClientUuid(clientUUid); + return securityPasswordCommonService.securityPasswdResetAuthorApply( requestId, req.getApplyId(), + userId, + clientUUid, + r, + false); + } + + /** + * 绑定端允许重置 + * @param requestId requestId + * @param clientUUid clientUUid + * @return 验证结果 + */ + public ResponseBase securityPasswdResetBinderAccept(String requestId, + String clientUUid, + SecurityPasswdResetBinderAcceptReq req) { + + return securityPasswordCommonService.securityPasswdResetBinderAccept( requestId, req.getApplyId(), + clientUUid, + req); + } + + /** + * 授权端提交重置(通过密保邮箱) + * @param requestId requestId + * @param userId userId + * @param clientUUid clientUUid + * @return 重置结果 + */ + public ResponseBase securityPasswdResetAuthor(String requestId, + String userId, + String clientUUid, + SecurityPasswdResetAutherReq req) { + var r = new SecurityPasswdResetNewDeviceReq(); + r.setAcceptSecurityToken(req.getAcceptSecurityToken()); + r.setEmailSecurityToken(req.getEmailSecurityToken()); + r.setClientUuid(req.getClientUuid()); + r.setNewPasswd(req.getNewPasswd()); + return securityPasswordCommonService.securityPasswdResetAuthorOrNewDevice( requestId, + req.getApplyId(), + userId, + clientUUid, + r, + false); + } + + /** + * 授权端提交重置(called by system-agent) + * @param requestId requestId + * @param clientUUid clientUUid + * @return 重置结果 + */ + public ResponseBase securityPasswdResetAuthorInLocal(String requestId, + String clientUUid, + SecurityPasswdResetAutherInLocalReq req) { + + var securityToken = securityTokenUtils.verifySecurityToken(requestId, req.getAcceptSecurityToken(), + SecurityTokenType.TOKEN_TYPE_RESET_ADMIN_PWD, req.getClientUuid()); + if(securityToken == null){ + // 授权端申请修改密码的token,在重置安全密码时也可以使用 + securityToken = securityTokenUtils.verifySecurityToken(requestId, req.getAcceptSecurityToken(), + SecurityTokenType.TOKEN_TYPE_MODIFY_ADMIN_PWD, req.getClientUuid()); + } + if (securityToken == null) { + throw new ServiceOperationException(ServiceError.EMAIL_VERIFICATION_TOKEN_TIMEOUT); + } + + if (!securityPasswordUtils.doModifyPasscode(requestId, req.getNewPasswd())) { + return ResponseBase.forbidden("doModifyPasswd error", requestId); + } + + pushUtils.doPushSucc(requestId, + NotificationEnum.SECURITY_PASSWD_RESET_SUCC); + LOG.debugv("securityPasswdResetAuther succ, req={0}, clientUUID {1}", req, clientUUid); + return ResponseBase.okACC(requestId, null); + + } + +} diff --git a/src/main/java/space/ao/services/account/security/service/SecurityPasswordBinderService.java b/src/main/java/space/ao/services/account/security/service/SecurityPasswordBinderService.java new file mode 100644 index 0000000..b87186f --- /dev/null +++ b/src/main/java/space/ao/services/account/security/service/SecurityPasswordBinderService.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.service; + +import org.jboss.logging.Logger; +import space.ao.services.account.security.dto.*; +import space.ao.services.account.security.utils.SecurityPasswordUtils; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.security.utils.token.SecurityTokenType; +import space.ao.services.account.security.utils.token.SecurityTokenUtils; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +/** + * 密码逻辑服务类。 + */ +@ApplicationScoped +public class SecurityPasswordBinderService { + + @Inject + SecurityTokenUtils securityTokenUtils; + + @Inject + SecurityPasswordUtils securityPasswordUtils; + + static final Logger LOG = Logger.getLogger("app.log"); + + /** + * 验证安全密码(获取 SecurityTokenRes). 其他两步验证需要先调用本接口作为第一步验证. + * @param requestId requestId + * @param clientUUid clientUUid + * @param req SecurityPasswdCheckReq + * @return SecurityTokenRes + */ + public ResponseBase securityPasswdVerify(String requestId, String clientUUid, + SecurityPasswdCheckReq req) { + + if (!securityPasswordUtils.doVerifyPasscode(requestId, req.getOldPasswd())){ + return ResponseBase.forbidden("password error", requestId); + } + LOG.debug("doVerifyPasswd succ, req="+req); + var result = securityTokenUtils.create(SecurityTokenType.TOKEN_TYPE_VERIFIED_PWD_TOKEN, + clientUUid); + return ResponseBase.okACC(requestId, result); + } + + /** + * 绑定端直接修改(使用原密码) + * @param requestId requestId + * @param req SecurityPasswdModifyByBinderReq + * @return 修改结果 + */ + public ResponseBase securityPasswdModifyByBinder(String requestId, SecurityPasswdModifyByBinderReq req) { + + if (securityPasswordUtils.doVerifyAndModifyPasswd(requestId, req.getOldPasswd(), req.getNewPasswd())) { + LOG.debug("doVerifyAndModifyPasswd succ, req="+req); + return ResponseBase.okACC(requestId, null); + } + return ResponseBase.forbidden("password error", requestId); + } + + /** + * 绑定端直接重置(使用密保邮箱) + * @param requestId requestId + * @param clientUUid clientUUid + * @param req SecurityPasswdResetByBinderReq + * @return 重置结果 + */ + public ResponseBase securityPasswdResetByBinder(String requestId, String clientUUid, + SecurityPasswdResetByBinderReq req) { + + if(!securityTokenUtils.verifyEmailToken(requestId, req.getSecurityToken(), clientUUid)) { + return ResponseBase.forbidden("verifyEmailToken error", requestId); + } + LOG.debug("verifyPwdToken succ, req="+req); + if (!securityPasswordUtils.doModifyPasscode(requestId, req.getNewPasswd())) { + return ResponseBase.forbidden("doModifyPasswd error", requestId); + } + return ResponseBase.okACC(requestId, null); + } + + /** + * 绑定端直接重置(called by system-agent) + * @param requestId requestId + * @param req SecurityPasswdResetByBinderInLocalReq + * @return 重置结果 + */ + public ResponseBase securityPasswdResetByBinderInLocal(String requestId, + SecurityPasswdResetByBinderInLocalReq req) { + + LOG.debug("verifySign succ, req="+req); + if (!securityPasswordUtils.doModifyPasscode(requestId, req.getNewPasswd())) { + return ResponseBase.forbidden("security token error", requestId); + } + return ResponseBase.okACC(requestId, null); + } + +} diff --git a/src/main/java/space/ao/services/account/security/service/SecurityPasswordCommonService.java b/src/main/java/space/ao/services/account/security/service/SecurityPasswordCommonService.java new file mode 100644 index 0000000..fca1c95 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/service/SecurityPasswordCommonService.java @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.service; + +import java.time.Instant; +import jakarta.transaction.Transactional; +import org.jboss.logging.Logger; +import space.ao.services.account.security.dto.ApplyInfoNewDeviceReq; +import space.ao.services.account.security.dto.SecurityPasswdResetBinderAcceptReq; +import space.ao.services.account.security.dto.SecurityPasswdResetNewDeviceReq; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.account.security.utils.PushUtils; +import space.ao.services.account.security.utils.SecurityPasswordUtils; +import space.ao.services.account.security.utils.token.SecurityTokenType; +import space.ao.services.account.security.utils.token.SecurityTokenUtils; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.push.dto.NotificationEnum; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import java.time.Duration; +import java.time.ZonedDateTime; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.task.ScheduledService; +import space.ao.services.support.task.TaskBaseEntity; + +/** + * 密码逻辑服务公共类。 + */ +@ApplicationScoped +public class SecurityPasswordCommonService { + + @Inject + SecurityTokenUtils securityTokenUtils; + + @Inject + SecurityPasswordUtils securityPasswordUtils; + + @Inject + PushUtils pushUtils; + + @Inject + ApplicationProperties properties; + + @Inject + OperationUtils utils; + @Inject + ScheduledService scheduledService; + static final Logger LOG = Logger.getLogger("app.log"); + + public ResponseBase securityPasswdResetAuthorApply(String requestId, + String applyId, + String userId, + String clientUUid, + ApplyInfoNewDeviceReq req, + boolean newDevice) { + + + ZonedDateTime expiresAt = ZonedDateTime.now().plusSeconds( + Duration.parse(properties.gatewayTimeOfSecurityPasswdAkLife()).toSeconds()); + if (newDevice) { + expiresAt = ZonedDateTime.now().plusSeconds( + Duration.parse(properties.gatewayTimeOfSecurityPasswdModifyTakeEffectForNewApp()).toSeconds()); + } + + pushUtils.doPushApply(requestId, applyId, + NotificationEnum.SECURITY_PASSWD_RESET_APPLY, + userId, req.getClientUuid(), req.getDeviceInfo(), + SecurityTokenType.TOKEN_TYPE_APPLY_RESET_ADMIN_PWD, + expiresAt); + LOG.debugv("securityPasswdResetAutherApply succ, req={0}, clientUUID:{1}", req, clientUUid); + return ResponseBase.okACC(requestId, null); + } + + public ResponseBase securityPasswdResetBinderAccept(String requestId, + String applyId, + String clientUUid, + SecurityPasswdResetBinderAcceptReq req) { + + var securityToken = securityTokenUtils.verifySecurityToken(requestId, req.getSecurityToken(), + SecurityTokenType.TOKEN_TYPE_APPLY_RESET_ADMIN_PWD, req.getClientUuid()); + if (securityToken == null) { + return ResponseBase.forbidden("verifySecurityToken error", requestId); + } + + pushUtils.doPushAccept(requestId, + applyId, + NotificationEnum.SECURITY_PASSWD_PARTICULAR_RESET_ACCEPT, + req.getClientUuid(), clientUUid, + req.isAccept(), + SecurityTokenType.TOKEN_TYPE_RESET_ADMIN_PWD); + LOG.debug("securityPasswdResetBinderAccept succ, req="+req); + return ResponseBase.okACC(requestId, null); + } + + @Transactional + public ResponseBase securityPasswdResetAuthorOrNewDevice(String requestId, + String applyId, + String userId, + String clientUUid, + SecurityPasswdResetNewDeviceReq req, + boolean newDevice) { + + var securityToken = securityTokenUtils.verifySecurityToken(requestId, req.getAcceptSecurityToken(), + SecurityTokenType.TOKEN_TYPE_RESET_ADMIN_PWD, req.getClientUuid()); + if(securityToken == null){ + securityToken = securityTokenUtils.verifySecurityToken(requestId, req.getAcceptSecurityToken(), + SecurityTokenType.TOKEN_TYPE_MODIFY_ADMIN_PWD, req.getClientUuid()); + } + // 授权设备, 没有允许的令牌时直接返回错误。 + if (securityToken == null && !newDevice) { + throw new ServiceOperationException(ServiceError.EMAIL_VERIFICATION_TOKEN_TIMEOUT); + } + + if(!securityTokenUtils.verifyEmailToken(requestId, req.getEmailSecurityToken(), clientUUid)) { + throw new ServiceOperationException(ServiceError.EMAIL_VERIFICATION_TOKEN_TIMEOUT); + } + + // 已经允许了, 有2种情况: + // 1. 授权手机/授权web时, 绑定端已经允许了(上面做了是否允许校验),修改数据库和推送。 + // 2. 新设备时, 绑定端已经已经允许了, 修改数据库和推送。 + if (!newDevice || securityToken != null) { + if (!securityPasswordUtils.doModifyPasscode(requestId, req.getNewPasswd())) { + return ResponseBase.forbidden("doModifyPasswd error", requestId); + } + + pushUtils.doPushSucc(requestId, + NotificationEnum.SECURITY_PASSWD_RESET_SUCC); + } + + // 新设备, 暂未允许的情况。加入定时任务队列, 24h 后执行任务再入库和推送。 + if (newDevice && securityToken == null) { + var task = new TaskBaseEntity(requestId, + Instant.now().plusSeconds(Duration.parse(properties.gatewayTimeOfSecurityPasswdModifyTakeEffectForNewApp()).toSeconds()), + utils.objectToJson(req), "passwordModify"); + task.persist(); + LOG.info(task); + scheduledService.onStart(requestId, task, SecurityPasswordModifyJob.class); + } + + LOG.debugv("securityPasswdResetAuther succ, req={0}, applyId: {1}, userId: {2}", req, applyId, userId); + return ResponseBase.okACC(requestId, null); + } + + + + + +} + diff --git a/src/main/java/space/ao/services/account/security/service/SecurityPasswordModifyJob.java b/src/main/java/space/ao/services/account/security/service/SecurityPasswordModifyJob.java new file mode 100644 index 0000000..fc97dad --- /dev/null +++ b/src/main/java/space/ao/services/account/security/service/SecurityPasswordModifyJob.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.service; + +import jakarta.inject.Inject; +import org.jboss.logging.Logger; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import space.ao.services.account.security.dto.SecurityPasswdResetNewDeviceReq; +import space.ao.services.account.security.utils.PushUtils; +import space.ao.services.account.security.utils.SecurityPasswordUtils; +import space.ao.services.push.dto.NotificationEnum; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.task.TaskBaseEntity; + +public class SecurityPasswordModifyJob implements Job { + + @Inject + OperationUtils utils; + @Inject + SecurityPasswordUtils securityPasswordUtils; + @Inject + PushUtils pushUtils; + static final Logger LOG = Logger.getLogger("app.log"); + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + + var dataMap = jobExecutionContext.getJobDetail().getJobDataMap(); + var taskId = Long.parseLong(dataMap.getString("taskId")); + LOG.info("execute task: " + taskId); + var task = TaskBaseEntity.findTaskById(taskId); + var req = utils.jsonToObject(task.getData(), SecurityPasswdResetNewDeviceReq.class); + + if (!securityPasswordUtils.doModifyPasscode("taskId: " + taskId, req.getNewPasswd())) { + LOG.error("task: " + taskId + ", performTask failed at:" + task.getEffectiveAt() + ", data: " + + task.getData() + ", requestId: " + task.getRequestId()); + return; + } + + pushUtils.doPushSucc(task.getRequestId(), + NotificationEnum.SECURITY_PASSWD_RESET_SUCC); + + // 删除对应任务 + TaskBaseEntity.delete(taskId); + + LOG.info("task: " + taskId + ", performTask at:" + task.getEffectiveAt() + ", data: " + + task.getData() + ", requestId: " + task.getRequestId()); + + } +} diff --git a/src/main/java/space/ao/services/account/security/service/SecurityPasswordNewDeviceService.java b/src/main/java/space/ao/services/account/security/service/SecurityPasswordNewDeviceService.java new file mode 100644 index 0000000..1dec0c1 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/service/SecurityPasswordNewDeviceService.java @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.service; + +import space.ao.services.account.security.dto.ApplyInfoNewDeviceReq; +import space.ao.services.account.security.dto.SecurityPasswdResetNewDeviceReq; +import space.ao.services.support.response.ResponseBase; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.validation.Valid; + +/** + * 密码逻辑服务类。 + */ +@ApplicationScoped +public class SecurityPasswordNewDeviceService { + + @Inject + SecurityPasswordCommonService securityPasswordCommonService; + + + /** + * 新设备申请重置(called by system-agent) + * @param requestId requestId + * @param clientUUid clientUUid + * @param req ApplyInfoNewDeviceReq + * @return 申请结果 + */ + public ResponseBase securityPasswdResetNewDeviceApplyInLocal(String requestId, + String clientUUid, + @Valid ApplyInfoNewDeviceReq req) { + return securityPasswordCommonService.securityPasswdResetAuthorApply( requestId, req.getApplyId(), + "1", + clientUUid, + req, + true); + } + + /** + * 新设备提交重置(called by system-agent) + * @param requestId requestId + * @param clientUUid clientUUid + * @param req SecurityPasswdResetNewDeviceReq + * @return 重置结果 + */ + public ResponseBase securityPasswdResetNewDeviceInLocal(String requestId, + String applyId, + String clientUUid, + SecurityPasswdResetNewDeviceReq req) { + return securityPasswordCommonService.securityPasswdResetAuthorOrNewDevice( requestId, + applyId, + "1", + clientUUid, + req, + true); + } + +} diff --git a/src/main/java/space/ao/services/account/security/utils/PushUtils.java b/src/main/java/space/ao/services/account/security/utils/PushUtils.java new file mode 100644 index 0000000..2aa90e6 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/utils/PushUtils.java @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.utils; + +import jakarta.transaction.Transactional; +import space.ao.services.account.security.service.SecurityMessageService; +import space.ao.services.account.security.utils.token.SecurityTokenType; +import space.ao.services.account.security.utils.token.SecurityTokenUtils; +import space.ao.services.account.member.respository.BoxInfoRepository; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.account.security.dto.ApplyPushNotificationRsp; +import space.ao.services.account.security.dto.SecurityMessageRsp; +import space.ao.services.account.security.dto.SecurityMessageStore; +import space.ao.services.account.security.dto.SuccPushNotitificationRsp; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.push.dto.Message; +import space.ao.services.push.dto.NotificationEnum; +import space.ao.services.push.services.RedisService; +import space.ao.services.support.OperationUtils; + +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import java.time.Duration; +import java.time.ZonedDateTime; + +/** + * 推送相关的重复代码抽取封装 + */ +@Singleton +public class PushUtils { + + @Inject + RedisService redisService; + + @Inject + SecurityTokenUtils securityTokenUtils; + + @Inject + ApplicationProperties properties; + + @Inject + SecurityMessageService securityMessageService; + + @Inject + UserInfoRepository userInfoRepository; + + @Inject + BoxInfoRepository boxInfoRepository; + @Inject + OperationUtils utils; + + /** + * 申请修改的推送 (传统推送到绑定端) + * @param requestId requestId + * @param authUserId 发出修改申请的 userid + * @param authClientUUid 发出修改申请的 ClientUUid + * @param authDeviceInfo 授权设备信息 + * @param tokenType token类型 + * @return 推送结果 + */ + public boolean doPushApply(String requestId, String applyId, + NotificationEnum notificationEnum, + String authUserId, String authClientUUid, + String authDeviceInfo, + SecurityTokenType tokenType, + ZonedDateTime expiresAt) { + var binderUserEntity = findBindUser(); + if (binderUserEntity==null || binderUserEntity.getRole()!= UserEntity.Role.ADMINISTRATOR ) { + return false; + } + String binderUserId =String.valueOf(binderUserEntity.getId()); + String binderClientUUid =String.valueOf(binderUserEntity.getClientUUID()); + + var result = securityTokenUtils.createWithExpiresAt(tokenType, + authClientUUid, + expiresAt); + var optType = notificationEnum.getType(); + var data =utils.objectToJson(ApplyPushNotificationRsp.of(result, + authUserId, + authClientUUid, + authDeviceInfo, + requestId, + applyId==null?"":applyId)); // 需要把 result、authUserId、authClientUUid、authDeviceInfo 推送给绑定端 + var msg= Message.of(binderUserId, binderClientUUid, optType, requestId, data); + redisService.pushMessage(msg); + return true; + } + + /** + * 允许修改后推送(到授权端/新设备。注意! 这个推送使用特定的私有轮询 poll) + * @param authClientUUid 发出申请修改的 ClientUUid + * @param binderClientUUid 绑定端 clientUUID + * @param accept + * @param tokenType token类型 + * @return 推送结果 + */ + public boolean doPushAccept(String requestId, String applyId, + NotificationEnum notificationEnum, + String authClientUUid, String binderClientUUid, + boolean accept, + SecurityTokenType tokenType) { + + final ZonedDateTime expiresAt = ZonedDateTime.now().plusSeconds( + Duration.parse(properties.gatewayTimeOfSecurityPasswdAkLife()).toSeconds()); + var result = securityTokenUtils.createWithExpiresAt(tokenType, binderClientUUid, expiresAt); + + var securityMessageRsp = SecurityMessageRsp.of(notificationEnum.getType(), + result, + binderClientUUid, + accept, + requestId, + applyId==null?"":applyId); + if (!accept) { + securityMessageRsp = SecurityMessageRsp.of(notificationEnum.getType(), + null, "", false, + requestId, + applyId==null?"":applyId); + } +// var securityMessageStore = SecurityMessageStore.of(securityMessageRsp, expiresAt); + var securityMessageStore = new SecurityMessageStore(securityMessageRsp, expiresAt); + securityMessageService.storeMessage(authClientUUid, securityMessageStore); + + return true; + } + + /** + * 修改/重置成功后推送 (传统推送到绑定端) + * @param requestId requestId + * @return 推送结果 + */ + @Transactional + public boolean doPushSucc(String requestId, + NotificationEnum notificationEnum) { + var binderUserEntity = findBindUser(); + if (binderUserEntity==null || binderUserEntity.getRole()!= UserEntity.Role.ADMINISTRATOR ) { + return false; + } + var binderUserId = String.valueOf(binderUserEntity.getId()); + var binderClientUUid = String.valueOf(binderUserEntity.getClientUUID()); + + var optType = notificationEnum.getType(); + + var data =utils.objectToJson(SuccPushNotitificationRsp.of(requestId, boxInfoRepository.getEmail())); + var msg= Message.of(binderUserId, binderClientUUid, optType, requestId, data); + redisService.pushMessage(msg); + return true; + } + + private UserEntity findBindUser() { + return userInfoRepository.findByUserId(1L); + } +} diff --git a/src/main/java/space/ao/services/account/security/utils/SecurityPasswordUtils.java b/src/main/java/space/ao/services/account/security/utils/SecurityPasswordUtils.java new file mode 100644 index 0000000..1a108fe --- /dev/null +++ b/src/main/java/space/ao/services/account/security/utils/SecurityPasswordUtils.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.utils; + +import java.util.Objects; + +import org.eclipse.microprofile.rest.client.inject.RestClient; +import space.ao.services.account.member.dto.Const; +import space.ao.services.support.agent.AgentServiceRestClient; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.account.support.service.ServiceError; + +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.transaction.Transactional; +import space.ao.services.account.support.service.ServiceOperationException; +import space.ao.services.support.OperationUtils; + +/** + * 安全密码工具类, 提供安全密码的修改和查验功能. + */ +@Singleton +public class SecurityPasswordUtils { + + @Inject + SecurityUtils securityUtils; + @Inject + OperationUtils operationUtils; + @RestClient + @Inject + AgentServiceRestClient agentServiceRestClient; + /** + * 实际验证安全密码 + * @param passcode passcode + * @return result + */ + public boolean doVerifyPasscode(String requestId, String passcode) { + passcode = passcode.length() == 6 ? operationUtils.string2SHA256(passcode) : passcode; + return Objects.equals(passcode, securityUtils.getPasscode(requestId)); + } + + /** + * 实际验证并修改安全密码 + * @param oldPasswd old password + * @param newPasswd new password + * @return result + */ + @Transactional + public boolean doVerifyAndModifyPasswd(String requestId, String oldPasswd, String newPasswd) { + if(Objects.equals(oldPasswd, newPasswd)){ + throw new ServiceOperationException(ServiceError.PASSWORD_NOT_SAME); + } + if(doVerifyPasscode(requestId, oldPasswd)){ + return doModifyPasscode(requestId, newPasswd); + } + return false; + } + + @Transactional + public boolean doModifyPasscode(String requestId, String newPasswd) { + var newPasswdSHA265 = newPasswd.length() == 6 ? operationUtils.string2SHA256(newPasswd) : newPasswd; + var oldPasswd = securityUtils.getPasscode(requestId); + if(securityUtils.setPasscode(requestId, newPasswdSHA265)) { + try { + agentServiceRestClient.changePasswordDidDocument(requestId, null, Const.Admin.ADMIN_AOID, newPasswd); + } catch (Exception e) { + if(Objects.nonNull(oldPasswd)){ + doModifyPasscode(requestId, oldPasswd); + } + throw new ServiceOperationException(ServiceError.PASSWORD_NOT_SAME); + } + return true; + } else { + return false; + } + } + + @Transactional + public boolean doModifyPasscodeNotChangeDidDocument(String requestId, String newPasswd) { + newPasswd = newPasswd.length() == 6 ? operationUtils.string2SHA256(newPasswd) : newPasswd; + return securityUtils.setPasscode(requestId, newPasswd); + } + + @Transactional + public boolean doResetPasscode(String requestId) { + return securityUtils.resetPasscode(requestId); + } +} diff --git a/src/main/java/space/ao/services/account/security/utils/SignUtil.java b/src/main/java/space/ao/services/account/security/utils/SignUtil.java new file mode 100644 index 0000000..c56bd02 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/utils/SignUtil.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.utils; + +import org.jboss.logging.Logger; + +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.support.StringUtils; + +/** + * 签名工具类, system-agent 调用 gateway 的接口不经过 call 和 access_toke,所有使用此签名来简单的验证 system-agent 的身份。 + */ +@Singleton +public class SignUtil { + + @Inject + SecurityUtils securityUtils; + + static final Logger LOG = Logger.getLogger("app.log"); + + /* + * 验证签名( system-agent 请求时带过来的) + */ + public boolean verifySign(String requestId, String clientUUid, String clientUuidSign) { + LOG.debug("verifySign, clientUuidSign=" + clientUuidSign); + if(StringUtils.isBlank(clientUUid)){ + return false; + } + if (!securityUtils.getSecurityProvider().verifySignUsingBoxPublicKey(requestId, clientUUid, clientUuidSign)) { + LOG.debug("failed verifySignUsingBoxPublicKey, clientUuidSign=" + clientUuidSign); + return false; + } + return true; + } +} diff --git a/src/main/java/space/ao/services/account/security/utils/UserRoleUtil.java b/src/main/java/space/ao/services/account/security/utils/UserRoleUtil.java new file mode 100644 index 0000000..c6e70e2 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/utils/UserRoleUtil.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.utils; + +import org.jboss.logging.Logger; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; + +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import java.util.Objects; + +@Singleton +public class UserRoleUtil { + + @Inject + UserInfoRepository userInfoRepository; + + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + + static final Logger LOG = Logger.getLogger("app.log"); + + // 判断是否是管理员主设备 + public boolean adminBindRole(String clientUuid) { + // 判断管理员主设备或成员主设备 + var userEntity = userInfoRepository.findByClientUUID(clientUuid); + LOG.debug("adminBindRole, clientUuid="+clientUuid); + LOG.debug("adminBindRole, userEntity="+userEntity); + return userEntity!=null && userEntity.getRole()== UserEntity.Role.ADMINISTRATOR; + } + + // 判断是否是管理员授权设备 + public boolean adminAuthRole(String userId, String clientUuid) { + var auth = authorizedTerminalRepository.findByUseridAndUuid(Long.valueOf(userId), clientUuid); // 字段有效性 + var user = userInfoRepository.findByUserId(Long.valueOf(userId)); + LOG.debug("adminAuthRole, auth="+auth); + LOG.debug("adminAuthRole, user="+user); + return !Objects.equals(auth.getUuid(), user.getClientUUID()) && user.getRole() == UserEntity.Role.ADMINISTRATOR; + } + + // 判断新设备(非绑定端、非授权端、非成员、非成员授权端 返回 true) + public boolean newDevice(String clientUuid) { + var userEntity = userInfoRepository.findByClientUUID(clientUuid); + var auth = authorizedTerminalRepository.findByUuid(clientUuid); + return userEntity==null && auth==null; // 不在两表中说明是新设备 + } +} diff --git a/src/main/java/space/ao/services/account/security/utils/token/SecurityToken.java b/src/main/java/space/ao/services/account/security/utils/token/SecurityToken.java new file mode 100644 index 0000000..5505593 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/utils/token/SecurityToken.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.utils.token; + +import lombok.Builder; +import lombok.Value; + +import java.time.ZonedDateTime; + +/** + * 第一步验证返回的 token. (第二步验证时请求需要带上, gateway 做校验.) + */ +@Builder +@Value +public class SecurityToken { + SecurityTokenType tokenType; + String clientUuid; + boolean accept; + ZonedDateTime expiredAt; +} diff --git a/src/main/java/space/ao/services/account/security/utils/token/SecurityTokenType.java b/src/main/java/space/ao/services/account/security/utils/token/SecurityTokenType.java new file mode 100644 index 0000000..41f0799 --- /dev/null +++ b/src/main/java/space/ao/services/account/security/utils/token/SecurityTokenType.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.utils.token; + +/** + * 第一步验证返回的 token 的业务类型 + */ +public enum SecurityTokenType { + TOKEN_TYPE_VERIFIED_PWD_TOKEN, // 验证安全密码 + TOKEN_TYPE_VERIFIED_EMAIL_TOKEN, // 验证安保邮箱 + + TOKEN_TYPE_APPLY_MODIFY_ADMIN_PWD, // 绑定端确认 + TOKEN_TYPE_MODIFY_ADMIN_PWD, // 修改端提交 + + TOKEN_TYPE_APPLY_RESET_ADMIN_PWD, // 绑定端确认 + TOKEN_TYPE_RESET_ADMIN_PWD, // 修改端提交 + + TOKEN_TYPE_APPLY_NEW_APP_RESET_ADMIN_PWD, // 绑定端确认 + TOKEN_TYPE_NEW_APP_RESET_ADMIN_PWD, // 修改端提交 +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/account/security/utils/token/SecurityTokenUtils.java b/src/main/java/space/ao/services/account/security/utils/token/SecurityTokenUtils.java new file mode 100644 index 0000000..ac4957d --- /dev/null +++ b/src/main/java/space/ao/services/account/security/utils/token/SecurityTokenUtils.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.security.utils.token; + +import io.smallrye.jwt.auth.principal.JWTParser; +import io.smallrye.jwt.build.Jwt; +import org.eclipse.microprofile.jwt.JsonWebToken; +import org.jboss.logging.Logger; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.account.security.dto.SecurityTokenRes; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.TokenUtils; + +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import java.time.Duration; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Objects; + +/** + * token 工具类 + */ +@Singleton +public class SecurityTokenUtils { + private static final Logger LOG = Logger.getLogger("app.log"); + + @Inject + ApplicationProperties properties; + + @Inject + SecurityUtils securityUtils; + @Inject + OperationUtils operationUtils; + @Inject + TokenUtils tokenUtils; + + @Inject + JWTParser jwtParser; + + private static final String TOKEN_TYPE_KEY = "tokenType"; + private static final String CLIENT_UUID_KEY = "clientUUID"; + + + /** + * 创建 token + */ + public SecurityTokenRes createWithExpiresAt(SecurityTokenType tokenType, + String clientUUID, + ZonedDateTime expiresAt) { + String token = createToken(tokenType, clientUUID, expiresAt); + return SecurityTokenRes.of(token, expiresAt.toString()); + } + public SecurityTokenRes create(SecurityTokenType tokenType, + String clientUUID) { + final ZonedDateTime expiresAt = ZonedDateTime.now().plusSeconds( + Duration.parse(properties.gatewayTimeOfSecurityPasswdAkLife()).toSeconds()); + String token = createToken(tokenType, clientUUID, expiresAt); + return SecurityTokenRes.of(token, expiresAt.toString()); + } + + /** + * 创建 jwt + */ + public String createToken(SecurityTokenType tokenType, String clientUUID, ZonedDateTime expiresAt) { + var builder = Jwt.upn(properties.boxUserName()) + .issuer(properties.boxEndpoint()) + .issuedAt(ZonedDateTime.now().toInstant()) + .expiresAt(expiresAt.toInstant()) + .claim(TOKEN_TYPE_KEY, securityUtils.getSecurityProvider().encryptUsingBoxPublicKey(operationUtils.createRandomType4UUID(), String.valueOf(tokenType))) + .claim(CLIENT_UUID_KEY, securityUtils.getSecurityProvider().encryptUsingBoxPublicKey(operationUtils.createRandomType4UUID(), clientUUID)) + ; + + return tokenUtils.tokenSign("", builder); + } + + public boolean verifyEmailToken(String requestId, String token, String clientUUid) { + SecurityToken securityToken = verifySecurityToken(requestId, token, + SecurityTokenType.TOKEN_TYPE_VERIFIED_EMAIL_TOKEN, clientUUid); + return securityToken != null; + } + public boolean verifyPwdToken(String requestId, String token, String clientUUid) { + SecurityToken securityToken = verifySecurityToken(requestId, token, + SecurityTokenType.TOKEN_TYPE_VERIFIED_PWD_TOKEN, clientUUid); + return securityToken != null; + } + + + /** + * 验证 token + * Used to verify security token and returns the result or null if failed. + */ + public SecurityToken verifySecurityToken(String requestId, String token, + SecurityTokenType tokenType, + String clientUUID) { + + return doVerifySecurityToken(requestId, token, + tokenType, + clientUUID); + } + + public SecurityToken doVerifySecurityToken(String requestId, String token, + SecurityTokenType tokenType, + String clientUUID) { + + try { + if (Objects.isNull(token) || Objects.isNull(clientUUID)) { + return null; + } + + final JsonWebToken jwt = jwtParser.verify(Objects.requireNonNull(token), securityUtils.getSecurityProvider().getBoxPublicKey(requestId)); + + SecurityToken.SecurityTokenBuilder builder = SecurityToken.builder(); + + var tokenTypeInJwt = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, jwt.getClaim(TOKEN_TYPE_KEY)); + if (!Objects.equals(String.valueOf(tokenType), tokenTypeInJwt)) { + LOG.warn("tokenType="+tokenType+", tokenTypeInJwt="+tokenTypeInJwt); + return null; + } + builder.tokenType(tokenType); + + var clientUUIDInJwt = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, jwt.getClaim(CLIENT_UUID_KEY)); + if (!Objects.equals(clientUUID, clientUUIDInJwt)) { + LOG.warn("clientUUID="+clientUUID+", clientUUIDInJwt="+clientUUIDInJwt); + return null; + } + builder.clientUuid(clientUUID); + + if (!properties.boxEndpoint().equalsIgnoreCase(jwt.getIssuer())) { + return null; + } + + if (ZonedDateTime.now().toInstant().getEpochSecond() > jwt.getExpirationTime()) { + LOG.warn("jwt.getExpirationTime()="+jwt.getExpirationTime()); + return null; + } + builder.expiredAt(ZonedDateTime.ofInstant(Instant.ofEpochSecond(jwt.getExpirationTime()), + ZoneId.of("UTC"))); + + return builder.build(); + + } catch (Exception e) { + LOG.error("verifyAccessToken failed", e); + return null; + } + } +} diff --git a/src/main/java/space/ao/services/account/support/response/ResponseBaseEnum.java b/src/main/java/space/ao/services/account/support/response/ResponseBaseEnum.java new file mode 100644 index 0000000..4918e34 --- /dev/null +++ b/src/main/java/space/ao/services/account/support/response/ResponseBaseEnum.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.support.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import space.ao.services.support.response.ResponseBase; + +@AllArgsConstructor +public enum ResponseBaseEnum { + + PERSONAL_NAME_IS_USED("ACC-400", "personal name is used"), + SPACE_NAME_IS_USED("ACC-400", "space name is used"), + + ; + @Getter + private final String code; + @Getter + private final String message; + + public space.ao.services.support.response.ResponseBase getResponseBase(String requestId){ + return ResponseBase.of(this.code, this.message, requestId, null); + } + +} diff --git a/src/main/java/space/ao/services/account/support/service/AdminInfoFileDTO.java b/src/main/java/space/ao/services/account/support/service/AdminInfoFileDTO.java new file mode 100644 index 0000000..61142cb --- /dev/null +++ b/src/main/java/space/ao/services/account/support/service/AdminInfoFileDTO.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.support.service; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Setter; + +/** + * @author zhichuang + * @date 2023/7/25 0025 + **/ +@Data +@AllArgsConstructor(staticName = "of") +@Setter +@RegisterForReflection +public class AdminInfoFileDTO { + public String clientUUID; + public String authKey; + public String phoneModel; + public String boxName; + public String status; + public String applyEmail; + public String userDomain; +} diff --git a/src/main/java/space/ao/services/account/support/service/MemberBasicAttribute.java b/src/main/java/space/ao/services/account/support/service/MemberBasicAttribute.java new file mode 100644 index 0000000..7ea67ac --- /dev/null +++ b/src/main/java/space/ao/services/account/support/service/MemberBasicAttribute.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.support.service; + +/** + * Used to define attributes of member + * @since 3.0.0 + */ +public enum MemberBasicAttribute { + AUTHKEY("authKey"), + CIENTUUID("clientUUID"), + USERDOMAIN("userDomain"), + BOXNAME("boxName"), + APPLYEMAIL("applyEmail"), + PHONEMODEL("phoneModel"), + STATUS("status"); + + private final String attribute; + MemberBasicAttribute(String name) { + this.attribute = name; + } + @Override + public String toString() { + return attribute; + } +} diff --git a/src/main/java/space/ao/services/account/support/service/ServiceDefaultVar.java b/src/main/java/space/ao/services/account/support/service/ServiceDefaultVar.java new file mode 100644 index 0000000..769bf90 --- /dev/null +++ b/src/main/java/space/ao/services/account/support/service/ServiceDefaultVar.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.support.service; + +public enum ServiceDefaultVar { + DEFAULT_IMAGE_PATH("image/"), + ACCOUNT_PASSWD_EXCEED("ACC-461"), + ACCOUNT_PASSWD_ERROR("ACC-463"), + ACCOUNT_USER_NOT_FOUND("ACC-505"), + ACCOUNT_RESET_ERR("ACC-560"), + ACCOUNT_ADMIN_REVOKED("ACC-462"), + ACCOUNT_REPEATED_REQUEST("ACC-4051"), + + DEFAULT_IMAGE_FILE("s.png"), + DEFAULT_AVATAR_FILE("avatar@3x.png"), + AOID_PREFIX("aoid-"), + DEFAULT_DATA_FILE("admin"), + NAME_REGULAR_EXPRESS("[\\u4e00-\\u9fa5_a-zA-Z0-9!@#$%^&*()~+]+"), + INVITE_URL_NEW_USER("/member/accept?subdomain=%s&invitecode=%s&keyfingerprint=%s&account=%s&member=%s&create=%d&expire=%d"), + INVITE_URL_EXIST_USER("/member/accept?subdomain=%s&invitecode=%s&keyfingerprint=%s&account=%s&member=%s&create=%d&expire=%d&aoid=%s"), + ACC_4031("ACC-4031"), + ACC_4032("ACC-4032"), + ACC_4033("ACC-4033"), + ACC_4034("ACC-4034"); + + private final String serviceVar; + + ServiceDefaultVar(String name) { + this.serviceVar = name; + } + + public String toString() { + return serviceVar; + } +} diff --git a/src/main/java/space/ao/services/account/support/service/ServiceError.java b/src/main/java/space/ao/services/account/support/service/ServiceError.java new file mode 100644 index 0000000..03eaa34 --- /dev/null +++ b/src/main/java/space/ao/services/account/support/service/ServiceError.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.support.service; + +/** + * Used to define a error raised under the service layer. + * It consists of following parts: + *
    + *
  1. code: used to specify the error code. It can be report to top layer for error detecting.
  2. + *
  3. message: used to specify the default error message. It would include + * some placeholder used to format a final string result, + * and the format uses {@link java.text.MessageFormat}'s style.
  4. + *
+ * You can explicitly define all of service errors here for further using. Note: we intend to reuse + * service error code that is greater than 0 and less than 600 as http status code. + * + * @see java.text.MessageFormat + * @see ServiceOperationException + * @since 1.0.0 + */ +public enum ServiceError { + /** + * Indicates a unknown error that might be somehow undefined currently. + */ + UNKNOWN(-1, "unknown error"), + INTERRUPTED_EXCEPTION(-1,"InterruptedException"), + WRONG_NAME_FORM(403, "Wrong name form"), + USER_NOT_FOUND(403, "User not found"), + INVALID_GLOBAL_ID(403, "Invalid global id"), + INVALID_USER_ID(403, "Invalid user id"), + INVALID_AO_ID(403, "Invalid aoid"), + INVALID_AUTHORIZED_CLIENT(4034, "Invalid authorized client info"), + INVITE_CODE_INVALID(403, "Invalid invite code"), + INVITE_CODE_EXPIRED(403, "Invite code expired"), + DATABASE_QUERY_FAILED(403, "database query failed"), + UPLOAD_FILE_FAILED(403, "Upload profile image failed"), + GET_IMAGE_FAILED(403, "Get image failed"), + GET_MEMBER_STORAGE_INFO_FAILED(403, "Get member storage info failed"), + REGISTRY_FAILED(403, "Registry failed"), + REGISTRY_RESET_FAILED(403, "Registry reset failed"), + NO_MODIFY_RIGHTS(403, "You do not have the rights"), + NO_ADMIN_DELETE_RIGHT(403, "Cannot delete administrator"), + MEMBER_NUMBER_FULL(403, "The number of number reaches limit"), + CLIENT_HAS_REGISTERED(403, "The client has been registered"), + CLIENT_HAS_AUTHORIZED(403, "The client has been authorized"), + PROFILE_PHOTO_INIT_FAILED(403, "Profile photo initial failed"), + FILE_INIT_FAILED(403, "File initial failed"), + MEMBER_INIT_FAILED(403, "member initial failed"), + FILE_DELETE_FAILED(403, "File delete failed"), + CREATE_ADMIN_INIT_FAILED(403, "initial failed while creating an administrator"), + REQ_RATE_OVER_LIMIT(410, "client request rate is over limit"), + REVOKE_USER_CLIENT_FAILED(500, "revoke user client failed"), + REVOKE_ADMIN_CLIENT_FAILED(500, "revoke admin client failed"), + PLATFORM_REGISTRY_USER_FAILED(403, "Platform user registry failed"), + PLATFORM_REGISTRY_USER_RESET_FAILED(403, "Platform user registry reset failed"), + SUBDOMAIN_WRONG_FORMAT(4001,"subdomain wrong format"), + + EMAIL_ALREADY_BOUND(4051,"This mailbox is already bound"), + EMAIL_VERIFICATION_TIMEOUT(4052, "Verification timeout"), + EMAIL_VERIFICATION_TOKEN_TIMEOUT(4053, "Email verification token timeout"), + PASSWORD_NOT_SAME(4054, "The old and new passwords are the same."), + PASSWORD_VERIFICATION_TOKEN_TIMEOUT(4055, "password verification token timeout"), + + EMAIL_VERIFICATION_FAILED(4011, "email verification failed"), + + TOKEN_TIMEOUT(40001, "token timeout"), + USERDOMAIN_NOT_FOUND(404, "userdomain not found"), + PLATFORM_REGISTRY_NOT_AVAILABLE(40002, "platform registry not available"), + + FILE_NOT_FOUND(40003, "dowload file from opstage failed"), + ; + + /** + * The identity of an error. + */ + private final int code; + + /** + * The default message of an error + */ + private final String message; + + ServiceError(int code, String message) { + this.code = code; + this.message = message; + } + + public static ServiceError valueOf(int code) { + for (ServiceError e : ServiceError.values()) { + if (e.code == code) { + return e; + } + } + throw new IllegalArgumentException("invalid code for service error - " + code); + } + + /** + * Return the code of this error. + */ + public String getMessage() { + return message; + } + + /** + * Return the default message of this error. + */ + public int getCode() { + return code; + } +} diff --git a/src/main/java/space/ao/services/account/support/service/ServiceOperationException.java b/src/main/java/space/ao/services/account/support/service/ServiceOperationException.java new file mode 100644 index 0000000..af88043 --- /dev/null +++ b/src/main/java/space/ao/services/account/support/service/ServiceOperationException.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.account.support.service; + +import java.text.MessageFormat; +import java.util.Objects; + +/** + * Runtime exception for service layer reporting specific operation error. + *

+ * This exception can only be used on the surface of service public method. + * It consists of a error code and a message which would be translate to a + * locale message. And the error can be a value of {@linkplain ServiceError}. + * + * @see ServiceError + * @since 1.0.0 + */ +public class ServiceOperationException extends RuntimeException { + + private final int errorCode; + private final Object[] messageParameters; + + public ServiceOperationException(Throwable cause, ServiceError error, Object... parameters) { + super(Objects.requireNonNull(error).getMessage(), Objects.requireNonNull(cause)); + this.errorCode = error.getCode(); + this.messageParameters = parameters; + } + + public ServiceOperationException(ServiceError error, Object... parameters) { + super(error.getMessage()); + this.errorCode = error.getCode(); + this.messageParameters = parameters; + } + + public ServiceOperationException(Throwable cause, int errorCode, String message, Object... parameters) { + super(Objects.requireNonNull(message), Objects.requireNonNull(cause)); + this.errorCode = errorCode; + this.messageParameters = parameters; + } + + public ServiceOperationException(int errorCode, String message, Object... parameters) { + super(Objects.requireNonNull(message)); + this.errorCode = errorCode; + this.messageParameters = parameters; + } + + public int getErrorCode() { + return errorCode; + } + + public String getMessage() { + return MessageFormat.format(super.getMessage(), getMessageParameters()); + } + + public Object[] getMessageParameters() { + return messageParameters; + } +} diff --git a/src/main/java/space/ao/services/applet/dto/AppletPermissionResponse.java b/src/main/java/space/ao/services/applet/dto/AppletPermissionResponse.java new file mode 100644 index 0000000..5008f0d --- /dev/null +++ b/src/main/java/space/ao/services/applet/dto/AppletPermissionResponse.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.applet.dto; + +import lombok.Data; + +@Data(staticConstructor = "of") +public class AppletPermissionResponse +{ + final String appletId; + final String appletName; + final Boolean permission; +} diff --git a/src/main/java/space/ao/services/applet/entity/AppletDefaultPermissionEnum.java b/src/main/java/space/ao/services/applet/entity/AppletDefaultPermissionEnum.java new file mode 100644 index 0000000..a0760a6 --- /dev/null +++ b/src/main/java/space/ao/services/applet/entity/AppletDefaultPermissionEnum.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.applet.entity; + +import lombok.Getter; + +public enum AppletDefaultPermissionEnum { + ADDRESSBOOK("e5878406cbdbef46", "通讯录",true), + ; + + @Getter + private final String appletId; + + @Getter + private final String appletName; + + @Getter + private final Boolean permission; + + + AppletDefaultPermissionEnum(String appletId, String name, Boolean permission) { + this.appletId = appletId; + this.appletName = name; + this.permission = permission; + } + + public static AppletDefaultPermissionEnum valueFrom(String appletId) { + for(AppletDefaultPermissionEnum e: AppletDefaultPermissionEnum.values()){ + if (appletId.matches(e.getAppletId())) { + return e; + } + } + return null; + } +} diff --git a/src/main/java/space/ao/services/applet/entity/AppletPermissionEntity.java b/src/main/java/space/ao/services/applet/entity/AppletPermissionEntity.java new file mode 100644 index 0000000..adf6bd2 --- /dev/null +++ b/src/main/java/space/ao/services/applet/entity/AppletPermissionEntity.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.applet.entity; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import lombok.Data; + +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +@Data +@Entity +@Table(name = "applet_permission_info") +public class AppletPermissionEntity extends PanacheEntityBase { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "aoid") + @NotNull + private String aoId; + + @Column(name = "applet_id") + @NotNull + private String appletId; + + @Column(name = "permission") + @NotNull + private Boolean permission; + +} diff --git a/src/main/java/space/ao/services/applet/repository/AppletPermissionRepository.java b/src/main/java/space/ao/services/applet/repository/AppletPermissionRepository.java new file mode 100644 index 0000000..d53d00f --- /dev/null +++ b/src/main/java/space/ao/services/applet/repository/AppletPermissionRepository.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.applet.repository; + + +import io.quarkus.hibernate.orm.panache.PanacheRepository; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.transaction.Transactional; +import space.ao.services.applet.entity.AppletPermissionEntity; + +@ApplicationScoped +public class AppletPermissionRepository implements PanacheRepository { + + public AppletPermissionEntity findByAoidAndAppletid(String aoid, String appletId) { + return this.find("aoId=?1 and appletId=?2", aoid, appletId).firstResult(); + } + + @Transactional + public void updateAppletPermission(String aoid, String appletId, Boolean permission) { + this.update("set permission=?1 where aoId=?2 and appletId=?3", permission, aoid, appletId); + } + + @Transactional + public void setAppletPermission(String aoid, String appletId, Boolean permission) { + AppletPermissionEntity entity = new AppletPermissionEntity(); + entity.setPermission(permission); + entity.setAppletId(appletId); + entity.setAoId(aoid); + this.persist(entity); + } + +} diff --git a/src/main/java/space/ao/services/auth/entity/TotpEntity.java b/src/main/java/space/ao/services/auth/entity/TotpEntity.java new file mode 100644 index 0000000..726734d --- /dev/null +++ b/src/main/java/space/ao/services/auth/entity/TotpEntity.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.auth.entity; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import java.time.OffsetDateTime; + +@Entity +@Getter +@Setter +@Table(name = "totp") +public class TotpEntity extends PanacheEntityBase { + + @Id + @Column(name = "userid") + @NotNull + private Long userid; + + @Column(name = "totp_secret") + @NotNull + private String totpSecret; + + @Column(name = "create_at") + @NotNull + private OffsetDateTime createAt; + + @Column(name = "authenticator") + @NotNull + private Boolean authenticator; +} diff --git a/src/main/java/space/ao/services/auth/info/TotpSecretInfo.java b/src/main/java/space/ao/services/auth/info/TotpSecretInfo.java new file mode 100644 index 0000000..ec43265 --- /dev/null +++ b/src/main/java/space/ao/services/auth/info/TotpSecretInfo.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.auth.info; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +public class TotpSecretInfo { + @Schema(description = "密钥") + @NotBlank + private final String secret; + + @JsonCreator + public TotpSecretInfo(@JsonProperty("secret") String secret){ + this.secret = secret; + } + public static TotpSecretInfo of(String secret){ + return new TotpSecretInfo(secret); + } +} diff --git a/src/main/java/space/ao/services/auth/repository/TotpRepository.java b/src/main/java/space/ao/services/auth/repository/TotpRepository.java new file mode 100644 index 0000000..0569b3e --- /dev/null +++ b/src/main/java/space/ao/services/auth/repository/TotpRepository.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.auth.repository; + +import io.quarkus.hibernate.orm.panache.PanacheRepository; + +import jakarta.inject.Singleton; +import jakarta.transaction.Transactional; + +import space.ao.services.auth.entity.TotpEntity; + +import java.time.OffsetDateTime; +import java.util.Optional; + +@Singleton +public class TotpRepository implements PanacheRepository { + public Optional findByUserid(Long userid) { + return find("userid", userid).firstResultOptional(); + } + + @Transactional + public void insertOrUpdate(Long userid, String totpSecret) { + var totpEntity = this.findByUserid(userid); + if (totpEntity.isEmpty()) { + var newTotpEntity = new TotpEntity(); + newTotpEntity.setUserid(userid); + newTotpEntity.setTotpSecret(totpSecret); + newTotpEntity.setCreateAt(OffsetDateTime.now()); + newTotpEntity.setAuthenticator(false); + this.persist(newTotpEntity); + } else { + this.update("totpSecret = ?1, createAt = ?2 where userid = ?3", totpSecret, OffsetDateTime.now(), userid); + } + } + + @Transactional + public void setAuthenticatorStatus(long userId, boolean status) { + this.update("authenticator = ?1 where userid = ?2", status, userId); + } + +} diff --git a/src/main/java/space/ao/services/auth/rest/AuthTokenResource.java b/src/main/java/space/ao/services/auth/rest/AuthTokenResource.java new file mode 100644 index 0000000..4d28162 --- /dev/null +++ b/src/main/java/space/ao/services/auth/rest/AuthTokenResource.java @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.auth.rest; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.AccessToken; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; + +import java.time.OffsetDateTime; +import java.util.Objects; + +import static space.ao.services.support.RestConfiguration.REQUEST_ID; + +@Path("/v1/api/auth/token") +@Tag(name = "Authing Token Service", + description = "提供访问令牌相关的服务。你可以使用访问令牌进行进一步的调用请求。") +public class AuthTokenResource { + + @Inject + TokenUtils tokenUtils; + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + + @GET + @Logged + @Path("verify") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to verify an access token for further api call.") + public ResponseBase verify(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("access-token") String accessToken) { + final var ak = tokenUtils.verifyAccessToken(requestId, accessToken); + if(ak == null || !verifyClient(ak.getUserId(), ak.getClientUUID())) { + return ResponseBase.forbidden(requestId).build(); + } + return ResponseBase.ok(requestId, ak).build(); + } + + @Logged + public boolean verifyClient(String userId, String clientUUID){ + var authorizedTerminalEntityList = + authorizedTerminalRepository.findByUserid(Long.valueOf(userId)); + if(authorizedTerminalEntityList == null || authorizedTerminalEntityList.isEmpty()) { + return false; + } + for (var entity: authorizedTerminalEntityList) { + if(entity.getExpireAt().isBefore(OffsetDateTime.now())){ + throw new ServiceOperationException(ServiceError.ACCESS_TOKEN_INVALID); + } + if(Objects.equals(entity.getUuid(), clientUUID)){ + return true; + } + } + return false; + } +} diff --git a/src/main/java/space/ao/services/auth/rest/AuthTotpResource.java b/src/main/java/space/ao/services/auth/rest/AuthTotpResource.java new file mode 100644 index 0000000..4f3e7da --- /dev/null +++ b/src/main/java/space/ao/services/auth/rest/AuthTotpResource.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.auth.rest; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.auth.service.TotpService; +import space.ao.services.gateway.auth.qrcode.dto.TotpAuthCode; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.response.ResponseBase; + +import java.time.Duration; +import java.util.Objects; + +import static space.ao.services.support.RestConfiguration.REQUEST_ID; + +@Path("/v1/api/auth/totp") +@Tag(name = "Space QRCode-scanning Service base on TOTP", + description = "Provides overall space requests' scan QR code service base on TOTP.") +public class AuthTotpResource { + + @Inject + TotpService totpService; + @Inject + ApplicationProperties properties; + + + /** + * 授权端创建 bkey时,成员端验证 bkey + */ + @POST + @Path("/bkey/verify") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "成员端调用绑定 bkey 归属的 userid。 授权端创建 bkey时,成员端验证 bkey。 通过 call 接口调用") + public ResponseBase bkeyVerity(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @QueryParam("bkey") String bkey) { + var createAuthCodeDTO = totpService.getUserIdByBkey(bkey); + createAuthCodeDTO.setUserId(userId); + totpService.saveUserIdByBkey(createAuthCodeDTO); + return ResponseBase.ok(requestId,true).build(); + } + + + @POST + @Path("/bkey/poll") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "成员端调用设置自动登录并获取扫码结果. 通过 call 接口调用") + public ResponseBase bkeyPoll(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @Valid @NotBlank @QueryParam("bkey") String bkey, + @Valid @QueryParam("autoLogin") @DefaultValue("true") Boolean autoLogin) { + var createAuthCodeDTO = totpService.getUserIdByBkey(bkey); + if(Boolean.FALSE.equals(autoLogin)){ + createAuthCodeDTO.setAutoLogin(false); + createAuthCodeDTO.setAutoLoginExpiresAt(Duration.parse(properties.pushTimeout()).toSeconds()); + totpService.saveUserIdByBkey(createAuthCodeDTO); + } + return ResponseBase.ok(requestId, createAuthCodeDTO.isAuthResult()).build(); + } + + @GET + @Path("/auth-code") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "成员调用获取 authCode. ") + public ResponseBase authCode(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId) { + var authCode = totpService.generateAuthCode(Long.parseLong(userId)); + if(authCode == null) { + return ResponseBase.notFound(requestId).build(); + } + return ResponseBase.ok(requestId, authCode).build(); + } + + @GET + @Path("/auth-code/verify") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "成员 调用 验证 authCode. ") + public ResponseBase authCodeVerify(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Schema(description = "前端调用不需要加") @Valid @NotBlank @QueryParam("userId") String userId, + @NotBlank @QueryParam("auth-code") String authCode) { + if(Objects.equals(totpService.generateAuthCode(Long.parseLong(userId)).getAuthCode(), authCode)) { + totpService.setAuthenticatorStatus(Long.parseLong(userId), true); + return ResponseBase.ok(requestId, true).build(); + } + return ResponseBase.ok(requestId, false).build(); + } +} diff --git a/src/main/java/space/ao/services/auth/service/TotpService.java b/src/main/java/space/ao/services/auth/service/TotpService.java new file mode 100644 index 0000000..99c4dd4 --- /dev/null +++ b/src/main/java/space/ao/services/auth/service/TotpService.java @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.auth.service; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import io.vertx.core.http.Cookie; +import io.vertx.core.http.HttpServerResponse; +import space.ao.services.gateway.auth.qrcode.service.CacheService; +import space.ao.services.account.authorizedterminalinfo.dto.AuthorizedTerminalInfo; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.authorizedterminalinfo.service.AuthorizedTerminalService; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.auth.repository.TotpRepository; +import space.ao.services.gateway.auth.CreateTokenResult; +import space.ao.services.gateway.auth.qrcode.dto.BoxLanInfo; +import space.ao.services.gateway.auth.qrcode.dto.EncryptAuthInfo; +import space.ao.services.gateway.auth.qrcode.dto.TotpAuthCode; +import space.ao.services.gateway.auth.qrcode.dto.CreateAuthCodeDTO; +import space.ao.services.push.dto.Message; +import space.ao.services.push.dto.NotificationEnum; +import space.ao.services.push.dto.TerminalInfo; +import space.ao.services.push.services.RedisService; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.StringUtils; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.agent.AgentService; +import space.ao.services.support.log.Logged; +import space.ao.services.support.security.SecurityTotpUtils; +import space.ao.services.support.security.SecurityUtils; + +import java.util.Objects; + +@ApplicationScoped +public class TotpService { + + @Inject + TotpRepository totpRepository; + @Inject + UserInfoRepository userInfoRepository; + @Inject + SecurityUtils securityUtils; + @Inject + SecurityTotpUtils securityTotpUtils; + @Inject + AgentService agentService; + @Inject + RedisService redisService; + @Inject + AuthorizedTerminalService authorizedTerminalService; + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + @Inject + TokenUtils tokenUtils; + @Inject + OperationUtils utils; + @Inject + CacheService cacheService; + + public Boolean verifyUser(EncryptAuthInfo authInfo){ + var user = userInfoRepository.findByDomain(authInfo.getSpaceId()); + if(user.isPresent()){ + return true; + } else { + var users = userInfoRepository.findByPersonalName(authInfo.getSpaceId()); + return !users.isEmpty(); + } + } + + public UserEntity verifyAuthCode(EncryptAuthInfo authInfo) { + var user = userInfoRepository.findByDomain(authInfo.getSpaceId()); + if(user.isPresent()){ + return user.map(userEntity -> verifyAuthCode(authInfo.getAuthCode(), userEntity.getId())).orElse(null); + } else { + var usersByPersonalName = userInfoRepository.findByPersonalName(authInfo.getSpaceId()); + return usersByPersonalName.stream().map(userEntity -> verifyAuthCode(authInfo.getAuthCode(), userEntity.getId())) + .filter(Objects::nonNull).findFirst().orElse(null); + } + } + + @Logged + public UserEntity verifyAuthCode(String authCode, Long userid) { + var totp = totpRepository.findByUserid(userid); + if(totp.isPresent()){ + if (securityTotpUtils.verifyCode(totp.get().getTotpSecret(), authCode)) { + return userInfoRepository.findByUserId(totp.get().getUserid()); + } + } + return null; + } + + /** + * 通过 userid 生成 authCode + */ + public TotpAuthCode generateAuthCode(Long userid) { + var totpEntity = totpRepository.findByUserid(userid); + String totpSecret; + if (totpEntity.isEmpty()) { + totpSecret = generateTotpSecretAndSave(userid); + } else { + totpSecret = totpEntity.get().getTotpSecret(); + } + return securityTotpUtils.generateCode(totpSecret); + } + + /** + * 通过 bkey 获取 userid + */ + @Logged + public CreateAuthCodeDTO getUserIdByBkey(String bkey) { + return cacheService.getAuthCodeInfo(bkey); + } + /** + * 保存 userid + */ + public void saveUserIdByBkey(CreateAuthCodeDTO createAuthCodeDTO) { + cacheService.setAuthCodeInfo(createAuthCodeDTO); + } + + /** + * 生成一次性时间验证密码 secret 并保存到数据库,已存在则更新 + */ + public String generateTotpSecretAndSave(Long userid) { + var totpSecret = securityTotpUtils.generateTotpSecret(); + totpRepository.insertOrUpdate(userid, totpSecret); + return totpSecret; + } + + /** + * 通过 userid 获取 BoxLanInfo + */ + public BoxLanInfo getBoxLanInfo(String requestId, String userid) { + var userEntity = userInfoRepository.findByUserId(Long.valueOf(userid)); + var boxLanInfo = agentService.getBoxLanInfo(requestId); + var userDomain = userEntity.getUserDomain(); + return BoxLanInfo.of(securityUtils.getBoxPublicKey(requestId), boxLanInfo.getLanIp(), userDomain, boxLanInfo.getPort(), boxLanInfo.getTlsPort()); + } + + /** + * 创建 token 推送终端登录消息到绑定端,并将终端信息保存到数据库 + */ + public CreateTokenResult createTokenAndPushMessage(String requestId, EncryptAuthInfo encryptAuthInfo, String userid, + String clientUUID, Long expireAt) { + + var createTokenResult = tokenUtils.createDefaultTokenResult(requestId, encryptAuthInfo.getTmpEncryptedSecret(), + userid, encryptAuthInfo.getClientUUID(), null); + + // 临时授权写入 account + var authorizedTerminal = authorizedTerminalRepository.findByUseridAndUuid(Long.valueOf(userid), encryptAuthInfo.getClientUUID()); + + + var authorizedTerminalInfo = AuthorizedTerminalInfo.of(userid, encryptAuthInfo.getClientUUID(), encryptAuthInfo.getTerminalMode(), + expireAt, encryptAuthInfo.getLoginAddress(), encryptAuthInfo.getTerminalType()); + + if(Objects.isNull(authorizedTerminal)){ // 为空直接新增记录,不为空是更新记录,但是保留之前的自动登录时间 + authorizedTerminal = authorizedTerminalService.insertAuthorizedTerminalInfo(requestId, authorizedTerminalInfo); + } else { + authorizedTerminal = authorizedTerminalService.updateAuthorizedTerminalValidTime(requestId, authorizedTerminalInfo); + } + + var terminalInfo = new TerminalInfo(authorizedTerminal.getAoid(),authorizedTerminal.getUuid(), authorizedTerminal.getTerminalMode(), + authorizedTerminal.getAddress(), authorizedTerminal.getTerminalType()); + + redisService.pushMessage(Message.of(userid, clientUUID, NotificationEnum.LOGIN.getType(), requestId, utils.objectToJson(terminalInfo))); + + return createTokenResult; + } + + @Logged + public EncryptAuthInfo decryptAuthInfo(String requestId, EncryptAuthInfo encryptAuthInfo) { + encryptAuthInfo.setAuthCode(securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, + encryptAuthInfo.getAuthCode())); + + if(encryptAuthInfo.getClientUUID().length() > 36){ // 兼容老的 app 没有加密 clientUUID + encryptAuthInfo.setClientUUID(securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, + encryptAuthInfo.getClientUUID())); + } + if(!StringUtils.isBlank(encryptAuthInfo.getBkey())){ + encryptAuthInfo.setBkey(securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, + encryptAuthInfo.getBkey())); + } + if(!StringUtils.isBlank(encryptAuthInfo.getSpaceId())){ + encryptAuthInfo.setSpaceId(securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, + encryptAuthInfo.getSpaceId())); + } + if(!StringUtils.isBlank(encryptAuthInfo.getVersion()) && encryptAuthInfo.getVersion().length() > 10){ + encryptAuthInfo.setVersion(securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, + encryptAuthInfo.getVersion())); + } + return encryptAuthInfo; + } + + public void setAuthenticatorStatus(long userId, boolean status){ + totpRepository.setAuthenticatorStatus(userId, status); + } + + public void setCookies(HttpServerResponse response, String clientUUID, long expire, String userDomain){ + response.addCookie(Cookie.cookie("client_uuid", clientUUID).setMaxAge(expire).setPath("/").setDomain(userDomain)); + } +} diff --git a/src/main/java/space/ao/services/config/ApplicationProperties.java b/src/main/java/space/ao/services/config/ApplicationProperties.java new file mode 100644 index 0000000..9436d5f --- /dev/null +++ b/src/main/java/space/ao/services/config/ApplicationProperties.java @@ -0,0 +1,275 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.config; + +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; +import io.smallrye.config.WithName; + +/** + * Global application configuration properties. + * + *

Impl ref: + * https://quarkus.io/guides/config-reference + */ +@ConfigMapping(prefix = "app") +public interface ApplicationProperties { + + @WithName("version") + String version(); + + @WithName("account.url") + String accountUrl(); + + @WithName("ssplatform.url") + String ssplatformUrl(); + + @WithName("ssplatform.user-domain.suffix") + String ssplatformUserDomainSuffix(); + + @WithName("psplatform.url") + String psplatformUrl(); + + @WithName("file-api.url") + String fileapiUrl(); + + @WithName("radicale-api.url") + String radicaleapiUrl(); + + @WithName("radicale-api.auth") + String radicaleapiAuth(); + + @WithName("system-agent.url.base") + String systemAgentUrlBase(); + + @WithName("client.public-key.location") + String clientPublicKeyLocation(); + + @WithName("client.private-key.location") + String clientPrivateKeyLocation(); + + @WithName("security-api.url") + String securityApiUrl(); + + @WithName("box.uuid") + String boxUuid(); + + @WithName("box.btid") + String boxBtid(); + + @WithName("box.username") + String boxUserName(); + + @WithName("box.version") + String boxVersion(); + + @WithName("box.name") + String boxName(); + + @WithName("box.pkg.name") + String boxPkgName(); + + @WithName("box.type") + String boxType(); + + @WithName("box.endpoint") + String boxEndpoint(); + + @WithName("box.private-key.location") + String boxPrivateKeyLocation(); + + @WithName("box.smime-sign.location.pem") + String boxSmimeSignLocationPem(); + + @WithName("box.smime-sign.location.p12") + String boxSmimeSignLocationP12(); + + @WithName("box.public-key.location") + String boxPublicKeyLocation(); + + @WithName("box.keyfingerprint") + String keyFingerprint(); + + @WithName("box.support.security.chip") + boolean securityChipSupport(); + + @WithName("box.support.security.chip.unix-socket") + boolean securityChipSupportUnixSocket(); + @WithName("box.deploy.method") + String deployMethod(); + + @WithName("box.device.model.number") + Long boxDeviceModelNumber(); + + @WithName("box.support.security.mode") + String securityMode(); + + @WithName("box.support.security.chip.key") + boolean securityChipKeySupport(); + + @WithName("gateway.routers.location") + String gatewayRoutersLocation(); + + @WithName("gateway.metadata.location") + String gatewayMetadataLocation(); + + @WithName("gateway.http-client.read-timeout") + String gatewayHttpClientReadTimeout(); + + @WithName("gateway.http-client.write-timeout") + String gatewayHttpClientWriteTimeout(); + + @WithName("gateway.auth.time-of-ak-life") + String gatewayTimeOfAkLife(); + + @WithName("gateway.auth.time-of-rak-life") + String gatewayTimeOfRakLife(); + + @WithName("gateway.auth.login.time-of-qr-ak-life") + String gatewayTimeOfQrAkLife(); + + @WithName("gateway.auth.login.time-of-allow-automatic-login") + String timeOfAllowAutoLogin(); + + @WithName("gateway.auth.login.time-of-allow-login") + String timeOfAllowLogin(); + + @WithName("gateway.auth.alg-info.publicKey.algorithm") + String gatewayAlgInfoPublicKeyAlgorithm(); + + + @WithName("gateway.auth.alg-info.signature.algorithm") + String gatewayAlgInfoSignatureAlgorithm(); + + @WithName("gateway.auth.alg-info.publicKey.keySize") + Integer gatewayAlgInfoPublicKeyKeySize(); + + @WithName("gateway.auth.alg-info.transportation.algorithm") + String gatewayAlgInfoTransportationAlgorithm(); + + @WithName("gateway.auth.alg-info.transportation.keySize") + Integer gatewayAlgInfoTransportationKeySize(); + + @WithName("gateway.auth.alg-info.transportation.transformation") + String gatewayAlgInfoTransportationTransformation(); + + @WithName("gateway.security.passwd.time-of-ak-life") + String gatewayTimeOfSecurityPasswdAkLife(); + + @WithName("gateway.security.passwd.modify-take-effect-for-new-app") + String gatewayTimeOfSecurityPasswdModifyTakeEffectForNewApp(); + + @WithName("gateway.security.email.time-of-ak-life") + String gatewayTimeOfSecurityEmailAkLife(); + + @WithName("gateway.security.email-provider.configuration-file.location") + String gatewaySecurityEmailProviderConfigurationFileLocation(); + + @WithName("gateway.file.system.location") + @WithDefault("/mnt/d/website/media/") + String gatewayFileSystemLocation(); + + @WithName("shared.info.file") + String sharedInfoFile(); + + @WithName("ip2region.location") + String ip2regionLocation(); + + @WithName("account.image.location") + String accountImageLocation(); + + @WithName("account.data.location") + String accountDataLocation(); + + @WithName("account.invite.maxmemberlimit") + int inviteMaxMemberLimit(); + + @WithName("account.invite.expirationsec") + long inviteExpirationSec(); + + @WithName("account.invite.param") + String inviteParam(); + + @WithName("account.subdomain.edit.limit.times") + int subdomainEditLimitTimes(); + + @WithName("account.subdomain.edit.limit.years") + int subdomainEditLimitYears(); + + @WithName("account.subdomain.edit.limit.mouths") + int subdomainEditLimitMouths(); + + @WithName("account.subdomain.edit.limit.days") + int subdomainEditLimitDays(); + + @WithName("account.subdomain.edit.limit.hours") + int subdomainEditLimitHours(); + + @WithName("account.subdomain.edit.limit.minutes") + int subdomainEditLimitMinutes(); + + @WithName("applet.location") + String appletLocation(); + + @WithName("applet.web.location") + String appletWebLocation(); + + @WithName("applet.upload.location") + String appletUploadLocation(); + + @WithName("push.timeout") + String pushTimeout(); + + @WithName("push.mq.main") + String pushMqMain(); + + @WithName("push.mq.platform") + String pushMqPlatform(); + + @WithName("push.mq.client.prefix") + String pushMqClientPrefix(); + + @WithName("push.app.activity") + String pushAppActivity(); + + @WithName("ssplatform.api-resources.location") + String getSSPlatformApisLocation(); + + @WithName("appstore.appapi.url") + String appstoreAppapiUrl(); + + @WithName("appstore.appsign.url") + String appstoreAppsignUrl(); + + @WithName("vod.url") + String appVodUrl(); + + @WithName("deploy-api.url") + String deployApiUrl(); + + @WithName("gateway.cron.cache-clean.clean-expired-ak") + String gatewayCronCacheCleanCleanExpiredAk(); + + @WithName("gateway.log.file.path") + String quarkusLogFilePath(); + + @WithName("dockerhub.url") + String dockerhubUrl(); + + @WithName("internet.service.config") + String internetServiceConfig(); +} diff --git a/src/main/java/space/ao/services/gateway/CallRequest.java b/src/main/java/space/ao/services/gateway/CallRequest.java new file mode 100644 index 0000000..5705aaa --- /dev/null +++ b/src/main/java/space/ao/services/gateway/CallRequest.java @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import jakarta.validation.constraints.NotBlank; + +public record CallRequest(@NotBlank String body, @NotBlank String accessToken) { +} diff --git a/src/main/java/space/ao/services/gateway/FileResult.java b/src/main/java/space/ao/services/gateway/FileResult.java new file mode 100644 index 0000000..59b8d41 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/FileResult.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import lombok.Data; + +import java.util.Map; + +@Data(staticConstructor = "of") +public class FileResult { + private final int code; + private final Object file; + private final long fileSize; + private final Map headers; +} diff --git a/src/main/java/space/ao/services/gateway/GatewayBeansFactory.java b/src/main/java/space/ao/services/gateway/GatewayBeansFactory.java new file mode 100644 index 0000000..7945b72 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/GatewayBeansFactory.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import com.google.common.io.CharStreams; +import io.quarkus.runtime.Startup; +import lombok.SneakyThrows; +import org.jboss.logging.Logger; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; + +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; +import jakarta.inject.Inject; + +@Startup +@ApplicationScoped +public class GatewayBeansFactory { + + static final Logger LOG = Logger.getLogger("app.log"); + + @Inject + OperationUtils utils; + + @Inject + ApplicationProperties properties; + + @PostConstruct + @SuppressWarnings("unused") // Initialize data + void init() { + LOG.info("start init GatewayBeansFactory"); + + } + + @Produces + @SneakyThrows + @SuppressWarnings("unused") // Used by DIC framework + public Routers routers() { + Routers routers; + LOG.info("start to fetch and create gateway routers."); + try (var reader = utils.getFileStreamReader(properties.gatewayRoutersLocation())) { + var routesJson = CharStreams.toString(reader); + var result = routesJson.replace("{{aospace-all-in-one}}", extractAddress(properties.systemAgentUrlBase())); + routers = utils.jsonToObject(result, Routers.class); + LOG.info("gateway routers created succeed: " + routers); + } catch (Exception e) { + LOG.error("gateway routers created failed", e); + throw e; + } + return routers; + } + + private String extractAddress(String input) { + if(input == null) { + return "172.17.0.1"; + } + String[] parts = input.split(":"); + if (parts.length > 1) { + String host = parts[1].substring(2); + int index = host.indexOf('/'); + if (index > 0) { + host = host.substring(0, index); + } + return host; + } + return "172.17.0.1"; + } + +} diff --git a/src/main/java/space/ao/services/gateway/GatewayMessage.java b/src/main/java/space/ao/services/gateway/GatewayMessage.java new file mode 100644 index 0000000..84c3ab5 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/GatewayMessage.java @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import java.time.Instant; +import java.util.UUID; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.Data; + +/** + * It defines the gateway message structure, and it also + * provides the definition of message type which can be used to delivery + * broadcast message or user specified message. + */ +@Data +@RegisterForReflection +public class GatewayMessage { + + /** + * Defines the message type. + */ + public enum Type { + /** + * It's used to indicate a message as broadcast one + * that are not user specified, which means every user + * can receive it when it's subscribed. + */ + BROADCAST, + + /** + * It's used to indicate a message as user specified one, + * which means only user who has the same user-id can receive + * it when it's subscribed. + */ + USER, + + /** + * It's used to indicate a message as client specified one, + * which means only client who has the same client-uuid can receive + * it when it's subscribed. + */ + CLIENT, + } + + /** + * used to indicate format version of this message, + * currently it should only be: v1 + */ + private String version; + + /** + * Used to indicate type of this message. + */ + private Type type; + + /** + * Used to indicate the user id that this message will be sent to. + */ + private String userId; + + /** + * Used to indicate the client uuid that this message will be sent to. + */ + private String clientUuid; + + /** + * Used to indicate the instant of this message creation. + */ + private Instant time; + + /** + * Used to indicate the uuid of this message. + */ + private UUID uuid; + + /** + * Used to indicate the topic of this message. + */ + private String topic; + + /** + * Used to hold the content of this message. + */ + private Object content; + + /** + * Used to indicate the content type of this content of this message. + */ + private String contentType; +} diff --git a/src/main/java/space/ao/services/gateway/GatewayMessageService.java b/src/main/java/space/ao/services/gateway/GatewayMessageService.java new file mode 100644 index 0000000..8f0fe4b --- /dev/null +++ b/src/main/java/space/ao/services/gateway/GatewayMessageService.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import org.eclipse.microprofile.reactive.messaging.Channel; +import org.eclipse.microprofile.reactive.messaging.Emitter; +import org.eclipse.microprofile.reactive.messaging.Incoming; +import org.eclipse.microprofile.reactive.messaging.OnOverflow; +import org.eclipse.microprofile.reactive.messaging.Outgoing; + +import io.smallrye.mutiny.Multi; +import io.smallrye.mutiny.Uni; +import jakarta.enterprise.context.ApplicationScoped; + +/** + * Gateway message service is used to publish gateway message to endpoint and + * manage gateway message channel. + */ +@ApplicationScoped +public class GatewayMessageService { + + /** + * This message emitter is only used to publish gateway message to client who + * should have been subscribed to gateway message endpoint. + */ + @Channel("gateway-messages-src") + @OnOverflow(value = OnOverflow.Strategy.BUFFER, bufferSize = 256) + Emitter publisher; + + /** + * Create a joint point for auditing all gateway message here. + * + * @param message the all gateway messages + */ + @Incoming("gateway-messages-src") + @Outgoing("gateway-messages") + Multi onMessage(Multi message) { + return message.log(); + } + + /** + * It offers a way to query if the gateway channel has been established + * before publishing message. + * + * @return true for ready to publish, and false for otherwise. + */ + public boolean isChannelAvailable() { + return publisher.hasRequests(); + } + + /** + * Used to publish message when gateway message channel is ready to do so. Note, + * before calling this method, you should always check if chancel is ready to write by + * calling {@link #isChannelAvailable()}. + * + * @param gatewayMessage the message to be published. + * @return the Uni result used to wait or to be notified when it completed. + */ + public Uni publish(GatewayMessage gatewayMessage) { + return Uni.createFrom() + .completionStage(publisher.send(gatewayMessage)) + .replaceWith(gatewayMessage); + } +} + diff --git a/src/main/java/space/ao/services/gateway/GatewayResource.java b/src/main/java/space/ao/services/gateway/GatewayResource.java new file mode 100644 index 0000000..4ab7fde --- /dev/null +++ b/src/main/java/space/ao/services/gateway/GatewayResource.java @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.eclipse.microprofile.reactive.messaging.Channel; + +import io.quarkus.logging.Log; +import io.smallrye.mutiny.Multi; +import space.ao.services.support.RestConfiguration; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.model.AccessToken; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.support.OperationUtils; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.sse.OutboundSseEvent; +import jakarta.ws.rs.sse.Sse; +import jakarta.ws.rs.sse.SseEventSink; + +import java.util.Map; +import java.util.Optional; + +@Path("/v1/api/gateway") +@Tag(name = "Space Gateway Generic-call Service", + description = "Provides overall space requests' auth, encrypt, decrypt and router service.") +public class GatewayResource { + + @Inject + GatewayService service; + + @Inject + OperationUtils utils; + @Inject + SecurityUtils securityUtils; + @Inject + TokenUtils tokenUtils; + + + /** + * Handles a generic unified gateway api call request and returns a unified response. + * + *

Call Request & Response:

+ *
    + *
  • Call Request (For the body structure of call request, please refer to {@link RealCallRequest}): + *
    +   *   {
    +   *     "accessToken" "",
    +   *     "body": "(BASE64 + encrypted with shared symmetric secret key)"
    +   *   }
    +   *   
    + *
  • + *
  • Call Response (For the body structure of call response, please refer to service specified by service name): + *
    +   *   {
    +   *     "code": 200,
    +   *     "message: "OK",
    +   *     "requestId": "",
    +   *     "body" : "(BASE64 + encrypted with shared symmetric secret key)"
    +   *   }
    +   *   
    + *
  • + *
+ * + * @param requestId the request track id generated by the caller of client. + * @param callRequest the unified api call request + * @return the unified api call response. + * @see CallRequest + * @see RealCallRequest + * @see RealCallResult + */ + @POST + @Path("/call") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "Tries to handle and forward a space call request to underlying service regarding with " + + "specified service and api name.") + public RealCallResult call(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @HeaderParam("Authorization") String bearerToken, + @Valid CallRequest callRequest) { + final var accessToken = checkAccessToken(requestId, bearerToken, callRequest.accessToken()); + final var request = checkRequestBody(callRequest.body(), accessToken); + + final var handleResult = service.handleCall(requestId, request, accessToken); + final var result = encodeResult(handleResult, accessToken); + return RealCallResult.of(200, "OK", requestId, result); + } + + /** + * Used to upload a certain type of file to underlying service based on + * HTTP multipart/form-data standard. It uses HTTP POST method and needs to + * specify the file and callRequest parts. For the body structure of callRequest, + * please refer to {@link RealCallRequest}. + * + *

Note: The necessary file parameters of uploading + * is defined by {@link UploadEntity} which is wrapped as entity of {@link RealCallRequest}. + * + * @param requestId the request track id generated by the caller of client. + * @param mpr the multipart resource of HTTP request + * @return http 200 response if succeeded. + * @see RealCallRequest + * @see UploadEntity + */ + @POST + @Consumes(MediaType.MULTIPART_FORM_DATA) + @Produces(MediaType.APPLICATION_JSON) + @Path("/upload") + @Operation(description = + "Tries to handle and forward a space file upload request to underlying service regarding with " + + "specified service and api name.") + public RealCallResult upload(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @HeaderParam("Authorization") String bearerToken, + MultipartRequest mpr) { + final var callRequestStr = utils.inputStreamToString(mpr.callRequest); + final var callRequest = utils.jsonToObject(callRequestStr, CallRequest.class); + final var accessToken = checkAccessToken(requestId, bearerToken, callRequest.accessToken()); + final var request = checkRequestBody(callRequest.body(), accessToken); + + final var handleResult = service.handleUpload(requestId, request, mpr.file, accessToken); + final var result = encodeResult(handleResult, accessToken); + return RealCallResult.of(200, "OK", requestId, result); + } + + /** + * Used to download a file hosted in the underlying service. It uses HTTP GET method and + * will specify a temporary file name for attachment. + * + * @param requestId the request track id generated by the caller of client. + * @param callRequest the unified api call request + * @return http response with header: Content-Disposition: attachment;filename=file + */ + @POST + @Produces(MediaType.APPLICATION_OCTET_STREAM) + @Consumes(MediaType.APPLICATION_JSON) + @Path("/download") + @Operation(description = + "Tries to handle and forward a space file download request to underlying service regarding with " + + "specified service and api name.") + public Response download(@NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @HeaderParam("Authorization") String bearerToken, + @Valid CallRequest callRequest) { + final var accessToken = checkAccessToken(requestId, bearerToken, callRequest.accessToken()); + final var request = checkRequestBody(callRequest.body(), accessToken); + + final var result = service.handleDownload(requestId, request, accessToken); + Response.ResponseBuilder builder; + if(result.getCode() == Response.Status.NOT_FOUND.getStatusCode()){ + builder = Response.status(Response.Status.NOT_FOUND).entity(result.getFile()); + } else if(result.getFileSize() == 0L){ + builder = Response.ok(result.getFile()); + } else { + builder = Response.ok(result.getFile()) + .header("File-Size", String.valueOf(result.getFileSize())); + } + if (result.getHeaders() != null && !result.getHeaders().isEmpty()) { + result.getHeaders().forEach(builder::header); + } + return builder.build(); + } + + /** + * This channel is used to output gateway messages. Http Clients + * can subscribe to it by calling this SSE endpoint and stream messages + * with a push-style manner. + */ + @Channel("gateway-messages") + Multi messages; + + /** + * It offers an endpoint for serving SSE(Server-sent Events) based http message stream request. + * From this endpoint, You can specify a topic to filter message that client is interested in. + * + * @param topic the topic query used to filter message stream + * @param clientUuid the client uuid that belongs to the caller + * @param requestId the request track id generated by the caller of client. + * @param bearerToken the Authorization token info + * @param sse the current sse context + * @param sink the current sse sink context + * @return the SSE stream + */ + @GET + @Path("/sse") + @Produces(MediaType.SERVER_SENT_EVENTS) + public Multi getSSE(@QueryParam("topic") String topic, + @QueryParam("clientUuid") String clientUuid, + @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @NotBlank @HeaderParam("Authorization") String bearerToken, + @Context Sse sse, @Context SseEventSink sink) { + final var accessToken = checkAccessToken(requestId, bearerToken, null); + + sink.send(sse.newEventBuilder().id("0").mediaType(MediaType.APPLICATION_JSON_TYPE) + .data(Map.of("message", "Welcome!")).name(topic).build()); + + return messages.filter(m -> checkMessage(topic, accessToken, m)) + .map(m -> sse.newEventBuilder() + .id(m.getUuid().toString()) + .name(m.getTopic()) + .mediaType(MediaType.TEXT_PLAIN_TYPE) + .data(encodeResult(utils.objectToJson(m), accessToken)) + .build()) + .onCancellation().invoke(() -> Log.infof("SSE for topic=%s cancelled", topic)) + .onCompletion().invoke(() -> Log.infof("SSE for topic=%s completed", topic)) + .onFailure().invoke(t -> Log.errorf(t, "SSE for topic=%s failed" + topic)); + } + + private static boolean checkMessage(String topic, AccessToken accessToken, GatewayMessage m) { + if (!topic.equals(m.getTopic())) { + return false; + } + if (m.getType() == GatewayMessage.Type.USER) { + return accessToken.getUserId().equals(m.getUserId()); + } + if (m.getType() == GatewayMessage.Type.CLIENT) { + return accessToken.getClientUUID().equalsIgnoreCase(m.getUuid().toString()); + } + return true; + } + + private AccessToken checkAccessToken(String requestId, String bearerToken, String accessToken) { + if (bearerToken != null && bearerToken.startsWith("Bearer ")) { + accessToken = bearerToken.substring(7); // 优先使用 http 头部认证信息。 + } + return Optional.ofNullable(tokenUtils.verifyAccessToken(requestId, accessToken)) + .orElseThrow( + () -> new WebApplicationException("Invalid access token", Response.Status.UNAUTHORIZED) + ); + } + + private RealCallRequest checkRequestBody(String body, AccessToken accessToken) { + try { + final String callBody = securityUtils.decryptWithSecret( + body, accessToken.getSharedSecret(), accessToken.getSharedInitializationVector()); + return utils.jsonToObject(callBody, RealCallRequest.class); + } catch (Exception e) { + throw new WebApplicationException("Invalid request body", e, Response.Status.NOT_ACCEPTABLE); + } + } + + private String encodeResult(String result, AccessToken accessToken) { + return result == null + ? "" // for empty result + : securityUtils.encryptWithSecret(result, accessToken.getSharedSecret(), accessToken.getSharedInitializationVector()); + } +} diff --git a/src/main/java/space/ao/services/gateway/GatewayService.java b/src/main/java/space/ao/services/gateway/GatewayService.java new file mode 100644 index 0000000..70184d8 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/GatewayService.java @@ -0,0 +1,432 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import io.quarkus.runtime.Startup; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.StreamingOutput; +import lombok.SneakyThrows; +import okhttp3.*; +import okio.BufferedSink; +import okio.BufferedSource; +import okio.Okio; +import org.jboss.logging.Logger; +import space.ao.services.account.authorizedterminalinfo.entity.AuthorizedTerminalEntity; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.AccessToken; +import space.ao.services.support.platform.PlatformUtils; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import javax.crypto.Cipher; +import java.io.IOException; +import java.io.InputStream; +import java.time.OffsetDateTime; +import java.util.*; + +import static space.ao.services.support.RestConfiguration.REQUEST_ID; + +@ApplicationScoped +@Startup +public class GatewayService { + static final Logger LOG = Logger.getLogger("app.log"); + + @Inject OkHttpClient httpClient; + static final MediaType JSON = MediaType.get("application/json; charset=utf-8"); + static final MediaType MULTIPART_FORM = MediaType.get("multipart/form-data"); + static final MediaType OCTET = MediaType.parse("application/octet-stream"); + + @Inject + OperationUtils utils; + @Inject + TokenUtils tokenUtils; + @Inject + PlatformUtils platformUtils; + @Inject + MemberManageService memberManageService; + @Inject + ApplicationProperties properties; + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + + @Inject + Routers routers; + + @Logged + @SneakyThrows + public String handleCall(String requestId, RealCallRequest request, AccessToken accessToken) { + final var router = + routers.getServices().get(request.getServiceName()).get(request.getApiName()); + + var user = checkIllegalApiAccess(accessToken, router); + + Map query = new HashMap<>(); + if (request.getQueries() != null) { + query.putAll(request.getQueries()); + } + query.put(AccessToken.USER_ID, accessToken.getUserId()); + query.put("AccessToken-" +AccessToken.CLIENT_UUID, accessToken.getClientUUID()); + if (user.getSpaceLimit() != null) { + query.put("spaceLimit", String.valueOf(user.getSpaceLimit())); + } + + handlePlatformRequest(requestId, request, query, accessToken); + + return execCall( + router, + query, + request.getHeaders(), + request.getEntity(), + requestId + ); + } + + private void handlePlatformRequest(String requestId, RealCallRequest request, Map query, AccessToken accessToken) { + if(request.getServiceName().equals("eulixspace-platform-service")){ + var boxRegKey = platformUtils.createRegistryBoxRegKey(requestId); + var headers = request.getHeaders(); + headers.put("Box-Reg-Key", boxRegKey); + request.setHeaders(headers); + } + if(request.getServiceName().equals("eulixspace-opstage-service")){ + handleOpstagePlatformRequest(requestId, request, query, accessToken); + } + } + + @Logged + public void handleOpstagePlatformRequest(String requestId, RealCallRequest request, Map query, AccessToken accessToken) { + var boxRegKey = platformUtils.createOpstageBoxRegKey(requestId); + var headers = request.getHeaders(); + headers.put("Box-Reg-Key", boxRegKey); + request.setHeaders(headers); + if(Objects.equals(request.getApiName(), "trail_invites")){ + var body = utils.objectToMap(request.getEntity()); + body.put("userId", "aoid-" + accessToken.getUserId()); + request.setEntity(body); + } else if (Objects.equals(request.getApiName(), "trail_invites_accept")){ + query.put("user_id", "aoid-" + accessToken.getUserId()); + } + } + + + @Logged(enablePreLog = false) + @SneakyThrows + public String handleUpload(String requestId, RealCallRequest request, InputStream file, AccessToken accessToken) { + final var router = + routers.getServices().get(request.getServiceName()).get(request.getApiName()); + + checkIllegalApiAccess(accessToken, router); + + Map query = new HashMap<>(); + if (request.getQueries() != null) { + query.putAll(request.getQueries()); + } + query.put(AccessToken.USER_ID, accessToken.getUserId()); + + return execUpload( + router, + query, + request.getHeaders(), + request.getEntity(), + file, + requestId, + accessToken + ); + } + + @Logged + @SneakyThrows + public FileResult handleDownload(String requestId, RealCallRequest request, AccessToken accessToken) { + final var router = + routers.getServices().get(request.getServiceName()).get(request.getApiName()); + + checkIllegalApiAccess(accessToken, router); + + Map query = new HashMap<>(); + if (request.getQueries() != null) { + query.putAll(request.getQueries()); + } + query.put(AccessToken.USER_ID, accessToken.getUserId()); + + return execDownload( + router, + query, + request.getHeaders(), + request.getEntity(), + requestId, + accessToken + ); + } + + private FileResult execDownload(Routers.Router router, Map queries, Map headers, + Object entity, String requestId, AccessToken accessToken) throws IOException { + if (!"HTTP".equalsIgnoreCase(router.getProtocol())) { + throw new ServiceOperationException(500, "execDownload no support yet for protocol - " + router.getProtocol()); + } + + var builder = createBuilder(router, queries, headers, requestId); + Request request; + if ("GET".equalsIgnoreCase(router.getMethod())) { + // response 再 transfer 后才被关闭。 + request = builder.build(); + } else if("POST".equals(router.getMethod())){ + var body = RequestBody.create( + JSON, entity == null ? "" : utils.objectToJson(entity)); + // response 再 transfer 后才被关闭。 + request = builder.post(body).build(); + } else { + throw new ServiceOperationException(500, "execDownload invalid http method - " + router.getMethod()); + } + var response = httpClient.newCall(request).execute(); + { + final StreamingOutput newFile = outputStream -> { + try (response) { + if (response.body() != null) { + transfer(accessToken, Okio.buffer(Okio.sink(outputStream)), response.body().source()); + } + } + }; + long newSize = 0; + var contentLength = response.header("Content-Length"); + + if(Objects.nonNull(contentLength)){ + // convert to encrypted file size + var fileSize = Long.parseLong(contentLength); + newSize = fileSize + (16 - (fileSize % 16)); + } + + Map newHeaders = new HashMap<>(); + response.headers().names().forEach(name -> { + if (!name.equalsIgnoreCase("Content-Length")) { + newHeaders.put(name, response.headers().get(name)); + } + }); + return FileResult.of(response.code(), newFile, newSize, newHeaders); + } + } + + @SneakyThrows + private void transfer(AccessToken accessToken, BufferedSink sink, BufferedSource source) { + var cipher = tokenUtils.createAndInitCipherWithAccessToken(accessToken, Cipher.ENCRYPT_MODE); + try (sink) { + byte[] buffer = new byte[DEFAULT_BUF_SIZE]; + int bytesRead; + while ((bytesRead = source.read(buffer)) != -1) { + byte[] output = cipher.update(buffer, 0, bytesRead); + if (output != null) { + sink.write(output); + } + } + var outputBytes = cipher.doFinal(); + if (outputBytes != null) { + sink.write(outputBytes); + } + } catch (Exception e) { + LOG.error("download transfer error", e); + } + } + + // 2K chars (4K bytes) + private static final int DEFAULT_BUF_SIZE = 0x800; + + private String execUpload(Routers.Router router, Map queries, Map headers, + Object entity, final InputStream file, String requestId, AccessToken accessToken) + throws IOException + { + if (!"HTTP".equalsIgnoreCase(router.getProtocol())) { + throw new ServiceOperationException(500, "execUpload no support yet for protocol - " + router.getProtocol()); + } + + if (!"PUT".equalsIgnoreCase(router.getMethod()) && !"POST".equalsIgnoreCase(router.getMethod())) { + throw new ServiceOperationException(500, "execUpload invalid http method - " + router.getMethod()); + } + + var builder = createBuilder(router, queries, headers, requestId); + RequestBody body = new RequestBody() { + @Override public MediaType contentType() { + return OCTET; + } + @SneakyThrows @Override public void writeTo(@SuppressWarnings("NullableProblems") BufferedSink sink) { + var cipher = tokenUtils.createAndInitCipherWithAccessToken(accessToken, Cipher.DECRYPT_MODE); + try (file) { + var buffer = new byte[DEFAULT_BUF_SIZE]; + int bytesRead; + while ((bytesRead = file.read(buffer)) != -1) { + byte[] output = cipher.update(buffer, 0, bytesRead); + if (output != null) { + sink.write(output); + } + } + byte[] outputBytes = cipher.doFinal(); + if (outputBytes != null) { + sink.write(outputBytes); + } + } + } + }; + + // By default, we use "multipart" as ext protocol + if (router.getExtProtocol() == null || "multipart".equals(router.getExtProtocol())) { + final UploadEntity ue = utils.jsonToObject(utils.objectToJson(entity), UploadEntity.class); + // Convert "onepart" body to multipart. + body = new MultipartBody.Builder() + .setType(MULTIPART_FORM) + .addFormDataPart("param", utils.objectToJson(entity)) + .addFormDataPart("file", ue.getFilename(), body) + .build(); + } + + Request request; + if ("PUT".equalsIgnoreCase(router.getMethod())) { + request = builder.put(body).build(); + } else { + request = builder.post(body).build(); + } + try (var response = httpClient.newCall(request).execute()) { + return response.body() == null ? null : response.body().string(); + } + } + + private Request.Builder createBuilder(Routers.Router router, Map queries, Map headers, + String requestId) { + String url = router.getUrl(); + if(headers != null && headers.containsKey("Box-Reg-Key")){ + url = properties.ssplatformUrl() + router.getUrl(); + } + var urlBuilder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder(); + + if (queries != null && !queries.isEmpty()) { + for (Map.Entry pair : queries.entrySet()) { + urlBuilder.addQueryParameter(pair.getKey(), pair.getValue()); + } + } + + var builder = + new Request.Builder() + .url(urlBuilder.build()) + .addHeader(REQUEST_ID, requestId); + + if (headers != null && !headers.isEmpty()) { + for (Map.Entry pair : headers.entrySet()) { + builder.addHeader(pair.getKey(), pair.getValue()); + } + } + return builder; + } + + private String execCall(Routers.Router router, Map queries, Map headers, + Object entity, String requestId) + throws IOException + { + if (!"HTTP".equalsIgnoreCase(router.getProtocol())) { + throw new ServiceOperationException(500, "execCall no support yet for protocol - " + router.getProtocol()); + } + + var builder = createBuilder(router, queries, headers, requestId); + + var request = builder.build(); // build as GET by default + + if ("HEAD".equalsIgnoreCase(router.getMethod())) { + request = builder.head().build(); + } + + else if ("TAG".equalsIgnoreCase(router.getMethod())) { + request = builder.tag(entity).build(); + } + + else if ("POST".equalsIgnoreCase(router.getMethod())) { + var body = RequestBody.create( + JSON, entity == null ? "" : utils.objectToJson(entity)); + request = builder.post(body).build(); + } + + else if ("DELETE".equalsIgnoreCase(router.getMethod())) { + var body = RequestBody.create( + JSON, entity == null ? "" : utils.objectToJson(entity)); + request = builder.delete(body).build(); + } + + else if ("PUT".equalsIgnoreCase(router.getMethod())) { + var body = RequestBody.create( + JSON, entity == null ? "" : utils.objectToJson(entity)); + request = builder.put(body).build(); + } + + else if ("PATCH".equalsIgnoreCase(router.getMethod())) { + var body = RequestBody.create( + JSON, entity == null ? "" : utils.objectToJson(entity)); + request = builder.patch(body).build(); + } + + try (var response = httpClient.newCall(request).execute()) { + return response.body() == null ? null : response.body().string(); + } + } + + @Logged + public boolean verifyClient(String clientUUID, UserEntity userEntity){ + if (Objects.equals(userEntity.getClientUUID(), clientUUID)) { + if(Objects.isNull(userEntity.getAuthKey())){ + throw new ServiceOperationException(ServiceError.ACCESS_TOKEN_INVALID); + } + return true; + } + + List authorizedTerminalEntityList = + authorizedTerminalRepository.findByUserid(userEntity.getId()); + + if(!authorizedTerminalEntityList.isEmpty()){ + for (var entity: authorizedTerminalEntityList + ) { + if(Objects.equals(entity.getUuid(), clientUUID)){ + if(entity.getExpireAt().isBefore(OffsetDateTime.now())){ + throw new ServiceOperationException(ServiceError.ACCESS_TOKEN_INVALID); + } + return true; + } + } + } + + return false; + } + + private boolean inValidOpenApiScope(AccessToken accessToken, Routers.Router router) { + final Routers.OpenApi openApi = router.getOpenApi(); + final Set openApiScopes = accessToken.getOpenApiScopes(); + return !openApiScopes.contains(openApi.getScope()); + } + + private UserEntity checkIllegalApiAccess(AccessToken accessToken, Routers.Router router) { + var userEntity = memberManageService.findByUserId(accessToken.getUserId()); + if (!verifyClient(accessToken.getClientUUID(), userEntity)) { + throw new ServiceOperationException(500, "User id and clientUUID don't match"); + } + if (accessToken.isOpenApi()) { + if (router.getOpenApi() == null || inValidOpenApiScope(accessToken, router)) { + throw new ServiceOperationException(403, "Access to data without permission is forbidden"); + } + } + return userEntity; + } +} diff --git a/src/main/java/space/ao/services/gateway/MultipartRequest.java b/src/main/java/space/ao/services/gateway/MultipartRequest.java new file mode 100644 index 0000000..d1c6c7a --- /dev/null +++ b/src/main/java/space/ao/services/gateway/MultipartRequest.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import org.jboss.resteasy.reactive.PartType; +import org.jboss.resteasy.reactive.RestForm; + +import jakarta.validation.constraints.NotNull; +import jakarta.ws.rs.core.MediaType; +import java.io.InputStream; + +public class MultipartRequest { + + @RestForm("file") + @PartType(MediaType.APPLICATION_OCTET_STREAM) + public @NotNull InputStream file; // encrypted by secret key + + @RestForm("callRequest") + @PartType(MediaType.APPLICATION_OCTET_STREAM) + public @NotNull InputStream callRequest; +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/gateway/RealCallRequest.java b/src/main/java/space/ao/services/gateway/RealCallRequest.java new file mode 100644 index 0000000..44f4e60 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/RealCallRequest.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +/** + * Plain text(Json format) API Request Body: + *

+ * {
+ *    "requestId": "xxx_xx", 请求追踪 ID
+ *    "serviceName": "file_system", # 空间应用服务名称
+ *    "apiName": "list_folders", # API 名称
+ *    "apiVersion": "v1", # API 版本
+ *    "entity": {} # 调用的涉及的实体内容(JSON格式)
+ *    "queries": { # 方法调用参数(以 HTTP 为例,作为 URL 的 query 部分)
+ *       "current": "/",
+ *       "page": 0,
+ *       "pageSize": 10
+ *    },
+ *    "headers": {}
+ * }
+ * 
+ */ +@Data +@NoArgsConstructor +public class RealCallRequest { + @JsonCreator + public RealCallRequest(@JsonProperty("requestId") String requestId, + @JsonProperty("serviceName") String serviceName, + @JsonProperty("apiName") String apiName, + @JsonProperty("apiVersion") String apiVersion, + @JsonProperty("headers") Map headers, + @JsonProperty("queries") Map queries, + @JsonProperty("entity") Object entity) { + this.requestId = requestId; + this.serviceName = serviceName; + this.apiName = apiName; + this.apiVersion = apiVersion; + this.headers = headers; + this.queries = queries; + this.entity = entity; + } + + @JsonSerialize + private String requestId; + @JsonSerialize + private String serviceName; + @JsonSerialize + private String apiName; + @JsonSerialize + private String apiVersion; + @JsonSerialize + private Map headers; + @JsonSerialize + private Map queries; + @JsonSerialize + private Object entity; +} diff --git a/src/main/java/space/ao/services/gateway/RealCallResult.java b/src/main/java/space/ao/services/gateway/RealCallResult.java new file mode 100644 index 0000000..32c3e3d --- /dev/null +++ b/src/main/java/space/ao/services/gateway/RealCallResult.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +/** + * Plain text(Json format) API Response Body: + *
+ * {
+ *    "code": 200,
+ *    "message: "OK",
+ *    "requestId": "xxx_xx", 请求追踪ID
+ *    "body": { # 请求响应主体内容 (BASE64 + encrypted with secret key)
+ *       "list": ["/a", "/b"]
+ *       "pageInfo": {
+ *          "page": 0,
+ *          "pageSize": 10
+ *          "total": 2
+ *       }
+ *    }
+ * }
+ * 
+ */ +public record RealCallResult(Integer code, String message, String requestId, String body) { + public static RealCallResult of(Integer code, String message, String requestId, String body) { + return new RealCallResult(code, message, requestId, body); + } +} diff --git a/src/main/java/space/ao/services/gateway/Routers.java b/src/main/java/space/ao/services/gateway/Routers.java new file mode 100644 index 0000000..185e691 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/Routers.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Map; + +@Data +@NoArgsConstructor +public class Routers { + @JsonCreator + public Routers(@JsonProperty("version") String version, + @JsonProperty("services") Map> services) { + this.version = version; + this.services = services; + } + + private String version; + private Map> services; + + @Data + @NoArgsConstructor + public static class Router { + @JsonCreator + public Router(@JsonProperty("type") String type, @JsonProperty("method") String method, + @JsonProperty("protocol") String protocol, @JsonProperty("url") String url, + @JsonProperty("ext-protocol") String extProtocol, + @JsonProperty("open-api") OpenApi openApi) { + this.type = type; + this.method = method; + this.protocol = protocol; + this.url = url; + this.extProtocol = extProtocol; + this.openApi = openApi; + } + + private String type; + private String method; + private String protocol; + private String url; + private String extProtocol; + private OpenApi openApi; + } + + @Data + @NoArgsConstructor + public static class OpenApi { + @JsonCreator + public OpenApi(@JsonProperty("scope") String scope, @JsonProperty("rate_limit") Integer rateLimit) { + this.scope = scope; + this.rateLimit = rateLimit; + } + + private String scope; + private Integer rateLimit; + } +} diff --git a/src/main/java/space/ao/services/gateway/UploadEntity.java b/src/main/java/space/ao/services/gateway/UploadEntity.java new file mode 100644 index 0000000..aa97540 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/UploadEntity.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * Used to define the upload related necessary parameters. It will be + * wrapped as entity of {@link RealCallRequest} and used by {@link GatewayResource#upload}. + */ +@Data +@NoArgsConstructor +public class UploadEntity { + @JsonCreator + public UploadEntity(@JsonProperty("filename") String filename, + @JsonProperty("mediaType") String mediaType) { + this.filename = filename; + this.mediaType = mediaType; + } + + private String filename; + private String mediaType; +} diff --git a/src/main/java/space/ao/services/gateway/auth/AuthTokenResource.java b/src/main/java/space/ao/services/gateway/auth/AuthTokenResource.java new file mode 100644 index 0000000..4688647 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/AuthTokenResource.java @@ -0,0 +1,226 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth; + +import io.quarkus.logging.Log; +import io.vertx.core.http.HttpServerRequest; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.util.Base64; +import java.util.Objects; +import jakarta.ws.rs.core.Context; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.member.dto.Const; +import space.ao.services.gateway.auth.member.client.ResponseCodeConstant; +import space.ao.services.account.authorizedterminalinfo.dto.AuthorizedTerminalInfo; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.authorizedterminalinfo.service.AuthorizedTerminalService; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.support.response.ResponseBaseEnum; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.StringUtils; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.check.CheckPlatformStatus; +import space.ao.services.support.platform.check.PlatformTypeEnum; +import space.ao.services.support.response.ResponseBase; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; + +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import static jakarta.ws.rs.core.Response.Status.FORBIDDEN; +import static space.ao.services.support.RestConfiguration.REQUEST_ID; + +@Path("/v1/api/gateway") +@Tag(name = "Space Gateway Admin-authing Service", + description = "提供管理员访问令牌相关的服务。你可以使用访问令牌进行进一步的调用请求。") +public class AuthTokenResource { + + @Inject + OperationUtils utils; + @Inject + SecurityUtils securityUtils; + @Inject + TokenUtils tokenUtils; + @Inject + MemberManageService memberManageService; + + @Context + HttpServerRequest request; + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + @Inject + AuthorizedTerminalService authorizedTerminalService; + @Inject + UserInfoRepository userInfoRepository; + + @POST + @Logged + @Path("/auth/token/create") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "Tries to get an admin access token for further api call. NOTE: you need to use encrypted(box public key)" + + " auth-key and client uuid to exchange an access token.") + public CreateTokenResult create(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid CreateTokenInfo info) { + try { + securityUtils.init(); + } catch (IOException | GeneralSecurityException e) { + throw new ServiceOperationException(ServiceError.INIT_UTIL_FAILED); + } + String authKey = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, info.getEncryptedAuthKey()); + String clientUUID = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, info.getEncryptedClientUUID()); + + var userEntity = memberManageService.findByClientUUID(clientUUID); + + if (Objects.equals(userEntity, null) || !Objects.equals(clientUUID, userEntity.getClientUUID())) { + Log.errorv("clientUUID not match, clientUUID: {0}, userEntity: {1}", clientUUID, userEntity); + throw new ServiceOperationException(ServiceError.CLIENT_UUID_NOT_MATCH); + } + if (!Objects.equals(authKey, userEntity.getAuthKey())) { + if(Objects.isNull(userEntity.getAuthKey())){ + Log.errorv("authKey is null, clientUUID: {0}, userEntity: {1}", clientUUID, userEntity); + throw new ServiceOperationException(ServiceError.CLIENT_UUID_NOT_MATCH); + } + Log.errorv("authKey not match, clientUUID: {0}, userEntity: {1}", clientUUID, userEntity); + throw new ServiceOperationException(ServiceError.AUTH_KEY_NOT_MATCH); + } + String xForwardedFor = request.getHeader("X-Forwarded-For"); + var address = ""; + if(!StringUtils.isBlank(xForwardedFor)){ + String ip = xForwardedFor.split(",")[0]; + address = utils.getCityInfo(ip); + } + String userAgent = request.getHeader("Http-User-Agent"); + if(!StringUtils.isBlank(userAgent) && userAgent.contains("okhttp")){ + userEntity.setPhoneType("android"); + userInfoRepository.updatePhoneTypeByUserId("android", userEntity.getId()); + } + if (!StringUtils.isBlank(userAgent) && (userAgent.contains("iOS")||userAgent.contains("CFNetwork"))) { + userEntity.setPhoneType("ios"); + userInfoRepository.updatePhoneTypeByUserId("ios", userEntity.getId()); + } + var authorizedTerminal = authorizedTerminalRepository.findByUseridAndUuid(userEntity.getId(), clientUUID); + var authorizedTerminalInfo = AuthorizedTerminalInfo.of(userEntity.getId().toString(), + userEntity.getClientUUID(), userEntity.getPhoneModel(), utils.get100YearSeconds(), address, + userEntity.getPhoneType()); + if(Objects.nonNull(authorizedTerminal)){ + authorizedTerminalService.updateAuthorizedTerminalValidTime(requestId, authorizedTerminalInfo); + } else { + authorizedTerminalRepository.insert(authorizedTerminalInfo); + } + return tokenUtils.createDefaultTokenResult(requestId, null, Const.Admin.ADMIN_ID, clientUUID, null); + } + + @POST + @Logged + @Path("/auth/token/refresh") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "Tries to refresh an admin access token for further api call with a refresh-token.") + public CreateTokenResult refresh(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid RefreshTokenInfo info) { + var refreshToken = tokenUtils.verifyRefreshToken(requestId, info.getRefreshToken()); + if (refreshToken != null) { + return tokenUtils.createDefaultTokenResult(requestId, null, + refreshToken.getUserId(), refreshToken.getClientUUID(), null); + } else { + throw new WebApplicationException("refresh token is invalid", FORBIDDEN); + } + } + + @GET + @Logged + @Path("/auth/token/verify") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = "Tries to verify an admin access token for further api call.") + public VerifyTokenResult verify(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("access-token") String accessToken) { + final boolean ok = tokenUtils.verifyAccessToken(requestId, accessToken) != null; + return VerifyTokenResult.of(ok, requestId); + } + + @POST + @Logged + @Path("/auth/revoke") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "解绑管理员客户端。") + // @Tags( {@Tag(name = "0.4.0")}) // 标注该接口创建和修改版本 + // @Schema(description = "响应 GW-200:解绑成功,GW-406:请求参数错误,GW-500:服务内部错误。") + public ResponseBase revoke( + @Valid @NotBlank @Schema(description = "请求 id") @HeaderParam(REQUEST_ID) String requestId, + @Valid @NotNull @Schema(description = "解绑管理员客户端认证信息") RevokeClientInfo info) { + if(Boolean.TRUE.equals(utils.getEnableInternetAccess()) && Objects.equals(checkPlatform(requestId).code(), "GW-5005")){ + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.SPACE_SERVICE_PLATFORM_ERROR).build(); + } + String clientUUID = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, info.getEncryptedClientUUID()); + var userEntity = memberManageService.findByClientUUID(clientUUID); + if (Objects.equals(userEntity, null) || !Objects.equals(clientUUID, userEntity.getClientUUID())) { + throw new ServiceOperationException(ServiceError.CLIENT_UUID_NOT_MATCH); + } + if (!userEntity.getAuthKey().equals(securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, info.getEncryptedAuthKey()))) { + throw new WebApplicationException("admin auth-key was not matched!", FORBIDDEN); + } + if (!userEntity.getClientUUID().equals(securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, info.getEncryptedClientUUID()))) { + throw new WebApplicationException("admin client uuid was not matched!", FORBIDDEN); + } + String passCode = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, info.getEncryptedPasscode()); + + // 撤销管理员在账号系统中的客户端认证信息,使其所有后续的 token 验证都失败,除非重新绑定新的客户端信息。 + var result = memberManageService.revokeUserClientInfo( + String.valueOf(userEntity.getId()), requestId, passCode, clientUUID); + + if (ResponseCodeConstant.ACC_200.equals(result.code())) { + return ResponseBase.ok(requestId, RevokeClientResult.of(true)).message(result.message()).build(); + } else { + return ResponseBase.notAcceptable(requestId) + .results(RevokeClientResult.of(false)) + .message(result.message()).build(); + } + } + + @GET + @Logged + @Path("/auth/public-key") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "get box public key") + public ResponseBase getPublicKey(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId){ + var publicKey = securityUtils.getSecurityProvider().getBoxPublicKey(requestId); + return ResponseBase.ok(requestId, Base64.getEncoder().encodeToString(publicKey.getEncoded())).build(); + } + + @CheckPlatformStatus(type = PlatformTypeEnum.SPACE) + public ResponseBase checkPlatform(String requestId){ + // 空方法作用是借助 @CheckPlatformStatus 检查平台可用性 + return ResponseBase.ok(requestId,null).build(); + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/CreateTokenInfo.java b/src/main/java/space/ao/services/gateway/auth/CreateTokenInfo.java new file mode 100644 index 0000000..45bce29 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/CreateTokenInfo.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data +@NoArgsConstructor +@Schema(description = "创建业务接口访问 token 需要提供的信息。") +public class CreateTokenInfo { + @JsonCreator + public CreateTokenInfo(@JsonProperty("encryptedAuthKey") String encryptedAuthKey, + @JsonProperty("encryptedClientUUID") String encryptedClientUUID) { + this.encryptedAuthKey = encryptedAuthKey; + this.encryptedClientUUID = encryptedClientUUID; + } + + @Schema(description = "使用盒子公钥加密后的 auth-key。") + private @NotBlank String encryptedAuthKey; + + @Schema(description = "使用盒子公钥加密后的 client-uuid。") + private @NotBlank String encryptedClientUUID; +} diff --git a/src/main/java/space/ao/services/gateway/auth/CreateTokenResult.java b/src/main/java/space/ao/services/gateway/auth/CreateTokenResult.java new file mode 100644 index 0000000..82c7359 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/CreateTokenResult.java @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.model.AlgorithmConfig; + +@Data(staticConstructor = "of") +@Schema(description = "创建、更新业务接口访问 token 成功返回的结果,同时返回对应的更新 token。") +public class CreateTokenResult { + @Schema(description = "业务接口访问 token。") + private final String accessToken; + @Schema(description = "用于更新业务接口 token 的 token,该 token 本身也会被更新。") + private final String refreshToken; + private final AlgorithmConfig algorithmConfig; + @Schema(description = "用于业务数据传输的对等密钥,该字段管理员通过客户端公钥/成员通过临时密钥加密,然后转换为 Base64。") + private final String encryptedSecret; // symmetric key (BASE64 + encrypted with client public key) + @Schema(description = "业务接口访问 token 的到期时间,该字段是一个字符串,格式为:2007-12-03T10:15:30+01:00[Europe/Paris]。") + private final String expiresAt; // date-time string formatted like - 2007-12-03T10:15:30+01:00[Europe/Paris] + @Schema(description = "业务接口访问 token 的到期时间,该字段是一个长整型,具体表示从 unix 纪元(1970-01-01T00:00:00Z)开始的秒数。") + private final Long expiresAtEpochSeconds; // seconds from unix epoch - 1970-01-01T00:00:00Z + @Schema(description = "请求标识,用于跟踪业务请求过程。") + private final String requestId; + @Schema(description = "自动登录的到期时间。") + private String autoLoginExpiresAt; + + @Schema(description = "扩展信息") + private String exContext; + + public CreateTokenResult(String accessToken, String refreshToken, AlgorithmConfig algorithmConfig, String encryptedSecret, + String expiresAt, Long expiresAtEpochSeconds, String requestId) { + this.accessToken = accessToken; + this.refreshToken = refreshToken; + this.algorithmConfig = algorithmConfig; + this.encryptedSecret = encryptedSecret; + this.expiresAt = expiresAt; + this.expiresAtEpochSeconds = expiresAtEpochSeconds; + this.requestId = requestId; + } + + @JsonCreator + public CreateTokenResult(@JsonProperty("accessToken") String accessToken, + @JsonProperty("refreshToken") String refreshToken, + @JsonProperty("algorithmConfig") AlgorithmConfig algorithmConfig, + @JsonProperty("encryptedSecret") String encryptedSecret, + @JsonProperty("expiresAt") String expiresAt, + @JsonProperty("expiresAtEpochSeconds") Long expiresAtEpochSeconds, + @JsonProperty("requestId") String requestId, + @JsonProperty("autoLoginExpiresAt") String autoLoginExpiresAt) { + this.accessToken = accessToken; + this.refreshToken = refreshToken; + this.algorithmConfig = algorithmConfig; + this.encryptedSecret = encryptedSecret; + this.expiresAt = expiresAt; + this.expiresAtEpochSeconds = expiresAtEpochSeconds; + this.requestId = requestId; + this.autoLoginExpiresAt = autoLoginExpiresAt; + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/RefreshTokenInfo.java b/src/main/java/space/ao/services/gateway/auth/RefreshTokenInfo.java new file mode 100644 index 0000000..55b28e4 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/RefreshTokenInfo.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data +@NoArgsConstructor +@Schema(description = "更新业务接口访问 token 需要提供的信息。") +public class RefreshTokenInfo { + @JsonCreator + public RefreshTokenInfo(@JsonProperty("refreshToken") String refreshToken) { + this.refreshToken = refreshToken; + } + + @Schema(description = "更新业务接口访问 token 的 token。") + private @NotBlank String refreshToken; +} diff --git a/src/main/java/space/ao/services/gateway/auth/RevokeClientInfo.java b/src/main/java/space/ao/services/gateway/auth/RevokeClientInfo.java new file mode 100644 index 0000000..b92fe97 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/RevokeClientInfo.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; + +@Data +@NoArgsConstructor +@Schema(description = "解绑管理员客户端所需要的参数信息。") +public class RevokeClientInfo { + @JsonCreator + public RevokeClientInfo(@JsonProperty("encryptedAuthKey") String encryptedAuthKey, + @JsonProperty("encryptedClientUUID") String encryptedClientUUID, + @JsonProperty("encryptedPasscode") String encryptedPasscode) { + this.encryptedAuthKey = encryptedAuthKey; + this.encryptedClientUUID = encryptedClientUUID; + this.encryptedPasscode = encryptedPasscode; + } + + @Schema(description = "使用盒子公钥加密后的 auth-key。") + private @NotBlank String encryptedAuthKey; + + @Schema(description = "使用盒子公钥加密后的 client-uuid。") + private @NotBlank String encryptedClientUUID; + + @Schema(description = "使用盒子公钥加密后的安全密码,对于一般成员,可以为空。") + private @NotBlank String encryptedPasscode; +} diff --git a/src/main/java/space/ao/services/gateway/auth/RevokeClientResult.java b/src/main/java/space/ao/services/gateway/auth/RevokeClientResult.java new file mode 100644 index 0000000..41382ae --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/RevokeClientResult.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data(staticConstructor = "of") +@Schema(description = "解绑管理员客户端请求结果。") +public class RevokeClientResult { + @Schema(description = "是否成功标记,true:成功,false:失败。") + private final Boolean succeed; + + @Schema(description = "boxUUID") + private final String boxUUID; + + @Schema(description = "失败次数") + private final Integer errorTimes; + + @Schema(description = "剩余尝试次数") + private final Integer leftTryTimes; + + @Schema(description = "用户剩余时间") + private final Long tryAfterSeconds; + + public static RevokeClientResult of(boolean succeed) { + return new RevokeClientResult(succeed, null, null, null, null); + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/VerifyTokenResult.java b/src/main/java/space/ao/services/gateway/auth/VerifyTokenResult.java new file mode 100644 index 0000000..78a52a7 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/VerifyTokenResult.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data(staticConstructor = "of") +@Schema(description = "验证业务接口访问 token 的合法性。") +public class VerifyTokenResult { + + @Schema(description = "合法性结果值,true:验证成功,false:验证失败。") + private final boolean result; + + @Schema(description = "请求标识,用于跟踪业务请求过程。") + private final String requestId; +} diff --git a/src/main/java/space/ao/services/gateway/auth/member/client/ResponseCodeConstant.java b/src/main/java/space/ao/services/gateway/auth/member/client/ResponseCodeConstant.java new file mode 100644 index 0000000..f4efd33 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/member/client/ResponseCodeConstant.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.member.client; + + +public class ResponseCodeConstant { + + public static final String ACC_200 = "ACC-200"; + public static final String ACC_201 = "ACC-201"; + + private ResponseCodeConstant() { + throw new IllegalStateException("Utility class"); + } + +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/AuthorizedTerminalLoginConfirmInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/AuthorizedTerminalLoginConfirmInfo.java new file mode 100644 index 0000000..e4ec561 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/AuthorizedTerminalLoginConfirmInfo.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "授权终端免扫码登录确认所需要的信息。") +public class AuthorizedTerminalLoginConfirmInfo { + + @Schema(description = "更新业务接口访问 token 的 token。") + private @NotBlank String accessToken; + @Schema(description = "对称密钥加密的clientuuid。") + private @NotBlank String encryptedClientUUID; + @Schema(description = "是否允许登录。") + private Boolean login; + @Schema(description = "是否自动登录。") + private Boolean autoLogin; + + +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/AuthorizedTerminalLoginInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/AuthorizedTerminalLoginInfo.java new file mode 100644 index 0000000..4ef63c6 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/AuthorizedTerminalLoginInfo.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(description = "授权终端自动登录所需要的信息。") +public class AuthorizedTerminalLoginInfo { + @Schema(description = "更新业务接口访问 token 的 token。") + private @NotBlank String refreshToken; + @Schema(description = "盒子公钥加密的临时密钥,用来解密后续返回的对称传输密钥。") + private @NotBlank String tmpEncryptedSecret; + + +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/BoxLanInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/BoxLanInfo.java new file mode 100644 index 0000000..9ff4a9c --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/BoxLanInfo.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +public class BoxLanInfo{ + private String publicKey; + private String lanIp; + private String userDomain; + private int port; + private int tlsPort; + + public static BoxLanInfo of(String publicKey, String lanIp, String userDomain, int port, int tlsPort){ + BoxLanInfo boxLanInfo = new BoxLanInfo(); + boxLanInfo.publicKey = publicKey; + boxLanInfo.lanIp = lanIp; + boxLanInfo.userDomain = userDomain; + boxLanInfo.port = port; + boxLanInfo.tlsPort = tlsPort; + return boxLanInfo; + } +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeDTO.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeDTO.java new file mode 100644 index 0000000..d8f958c --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeDTO.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@NoArgsConstructor +@Schema(description = "新设备需要的授权信息") +public class CreateAuthCodeDTO { + + @Schema(description = "使用对称密钥加密的授权码 (4或6 位数字)。") + private String authCode; + @Schema(description = "验证码剩余时间 authCode 6位是不为空。单位:毫秒") + private Long authCodeExpiresAt; + @Schema(description = "验证码总有效时间。单位:毫秒") + private Long authCodeTotalExpiresAt; + @Schema(description = "使用对称密钥加密的 bkey, 盒子侧用的 key, 用来对应手机端和跳转后的盒子页面前端") + private String bkey; + @Schema(description = "使用对称密钥加密的 userDomain。") + private String userDomain; + @Schema(description = "使用对称密钥加密的 lanDomain。") + private String lanDomain; + @Schema(description = "使用对称密钥加密的 lanIp。") + private String lanIp; + + @JsonIgnore + private String clientUUID; + @JsonIgnore + private boolean authResult; + @JsonIgnore + private long createTime; + @JsonIgnore + private String userId; + @JsonIgnore + private String aoId; + @JsonIgnore + private Boolean autoLogin; + @JsonIgnore + private long autoLoginExpiresAt; + + @JsonCreator + public CreateAuthCodeDTO(@JsonProperty("authCode") String authCode, @JsonProperty("bkey") String bkey) { + this.authCode = authCode; + this.bkey = bkey; + } + + public CreateAuthCodeDTO(String aoId, String userId, String clientUUID, String authCode, + String bkey, long createTime,Boolean autoLogin, long autoLoginExpiresAt) { + this.aoId = aoId; + this.userId = userId; + this.clientUUID = clientUUID; + this.authCode = authCode; + this.bkey = bkey; + this.createTime = createTime; + this.autoLogin = autoLogin; + this.autoLoginExpiresAt = autoLoginExpiresAt; + } + + public CreateAuthCodeDTO(String bkey, long createTime, Boolean autoLogin, long autoLoginExpiresAt) { + this.bkey = bkey; + this.createTime = createTime; + this.autoLogin = autoLogin; + this.autoLoginExpiresAt = autoLoginExpiresAt; + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeInfo.java new file mode 100644 index 0000000..7a12dee --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeInfo.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@NoArgsConstructor +@Schema(description = "创建二维码接口 需要提供的信息。") +public class CreateAuthCodeInfo { + @Schema(description = "业务接口访问 token。") + String accessToken; + @Schema(description = "使用对称密钥加密后的 auth-key。") + String authKey; + @Schema(description = "使用对称密钥加密后的 client-uuid。") + String clientUUID; + @Schema(description = "使用对称密钥加密后的 box name。") + String boxName; + @Schema(description = "使用对称密钥加密后的 box uuid。") + String boxUUID; + @Schema(description = "授权码版本") + String version; + @JsonCreator + public CreateAuthCodeInfo(@JsonProperty String accessToken, @JsonProperty String authKey, @JsonProperty String clientUUID, + @JsonProperty String boxName, @JsonProperty String boxUUID, @JsonProperty String version){ + this.accessToken = accessToken; + this.authKey = authKey; + this.clientUUID = clientUUID; + this.boxName = boxName; + this.boxUUID = boxUUID; + this.version = version; + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeResult.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeResult.java new file mode 100644 index 0000000..4170a14 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateAuthCodeResult.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +public record CreateAuthCodeResult(Integer code, String message, CreateAuthCodeDTO authCodeInfo) { + public static CreateAuthCodeResult of(Integer code, String message, CreateAuthCodeDTO authCodeInfo) { + return new CreateAuthCodeResult(code, message, authCodeInfo); + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateBkeyInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateBkeyInfo.java new file mode 100644 index 0000000..11a9936 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/CreateBkeyInfo.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import lombok.Data; + +@Data +public class CreateBkeyInfo { + private String bkey; + private BoxLanInfo boxLanInfo; + public static CreateBkeyInfo of(String bkey, BoxLanInfo boxLanInfo){ + CreateBkeyInfo createBkeyInfo = new CreateBkeyInfo(); + createBkeyInfo.bkey = bkey; + createBkeyInfo.boxLanInfo = boxLanInfo; + return createBkeyInfo; + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthDTO.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthDTO.java new file mode 100644 index 0000000..0e117a5 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthDTO.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.gateway.auth.CreateTokenResult; +import space.ao.services.support.model.AlgorithmConfig; + +/** + * @param expiresAt date-time string formatted like - 2007-12-03T10:15:30+01:00[Europe/Paris] + * @param expiresAtEpochSeconds seconds from unix epoch - 1970-01-01T00:00:00Z + */ +public record EncryptAuthDTO(@Schema(description = "临时密钥(tmpEncryptedSecret) 加密的 box name") String boxName, + @Schema(description = "临时密钥(tmpEncryptedSecret) 加密的 box uuid") String boxUUID, + @Schema(description = "临时密钥(tmpEncryptedSecret) 加密的 aoid") String aoid, + @Schema(description = "业务接口访问 token。") String accessToken, + @Schema(description = "用于更新业务接口 token 的 token,该 token 本身也会被更新。") String refreshToken, + AlgorithmConfig algorithmConfig, + @Schema(description = "用于业务数据传输的对等密钥,该字段临时对称密钥加密,解密时使用请求时的临时密钥加上algorithmConfig里的动态iv") String encryptedSecret, + @Schema(description = "业务接口访问 token 的到期时间,该字段是一个字符串,格式为:2007-12-03T10:15:30+01:00[Europe/Paris]。") String expiresAt, + @Schema(description = "业务接口访问 token 的到期时间,该字段是一个长整型,具体表示从 unix 纪元(1970-01-01T00:00:00Z)开始的秒数。") Long expiresAtEpochSeconds, + @Schema(description = "请求标识,用于跟踪业务请求过程。") String requestId, + @Schema(description = "是否自动登录。") Boolean autoLogin, + @Schema(description = "自动登录的到期时间。") String autoLoginExpiresAt, + @Schema(description = "盒子局域网信息") BoxLanInfo boxLanInfo, + @Schema(description = "扩展信息") String exContext) { + public static EncryptAuthDTO of(String boxName, String boxUUID, String aoid, CreateTokenResult createTokenResult, + Boolean autoLogin, String autoLoginExpiresAt,BoxLanInfo boxLanInfo, String exContext) { + + return new EncryptAuthDTO(boxName, boxUUID, aoid, createTokenResult.getAccessToken(), + createTokenResult.getRefreshToken(), createTokenResult.getAlgorithmConfig(), + createTokenResult.getEncryptedSecret(), createTokenResult.getExpiresAt(), + createTokenResult.getExpiresAtEpochSeconds(), createTokenResult.getRequestId(), + autoLogin, autoLoginExpiresAt, boxLanInfo, exContext); + } +} + diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthInfo.java new file mode 100644 index 0000000..a4996e1 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthInfo.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotBlank; +@Data +@NoArgsConstructor +public class EncryptAuthInfo { + + @JsonCreator + public EncryptAuthInfo( + @JsonProperty("spaceId") String spaceId, + @JsonProperty("version") String version, + @JsonProperty("bkey") String bkey, + @JsonProperty("tmpEncryptedSecret") String tmpEncryptedSecret, + @JsonProperty("authCode") String authCode, + @JsonProperty("clientUUID") String clientUUID, + @JsonProperty("terminalMode") String terminalMode, + @JsonProperty("terminalType") String terminalType) { + this.spaceId = spaceId; + this.version = version; + this.bkey = bkey; + this.tmpEncryptedSecret = tmpEncryptedSecret; + this.authCode = authCode; + this.clientUUID = clientUUID; + this.terminalMode = terminalMode; + this.terminalType = terminalType; + } + + + @Schema(description = "盒子公钥加密的 空间标识(子域名或者用户昵称)") + String spaceId; + @Schema(description = "version") + String version; + + @Schema(description = "盒子公钥加密的 bkey(totp 时不加密), 局域网时为空时") + String bkey; + + @Schema(description = "盒子公钥加密的 临时密钥") + @NotBlank + String tmpEncryptedSecret; + + @Schema(description = "盒子公钥加密的 authCode") + @NotBlank + String authCode; + + @Schema(description = "盒子公钥加密的 clientUUID") + @NotBlank + String clientUUID; + + @Schema(description = "客户端型号") + @NotBlank + String terminalMode; + + @Schema(description = "客户端类型 android/ios/web/pc") + String terminalType; + + @JsonIgnore + @Schema(description = "登录地址") + String loginAddress; +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthResult.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthResult.java new file mode 100644 index 0000000..f16febf --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptAuthResult.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +public record EncryptAuthResult(Integer code, String message, String requestId, EncryptAuthDTO encryptAuthResult) { + public static EncryptAuthResult of(Integer code, String message, String requestId, EncryptAuthDTO encryptAuthResult) { + return new EncryptAuthResult(code, message, requestId, encryptAuthResult); + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptedAuthUserInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptedAuthUserInfo.java new file mode 100644 index 0000000..d364596 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/EncryptedAuthUserInfo.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.Data; +import space.ao.services.account.personalinfo.dto.AccountInfoResult; +import space.ao.services.support.agent.info.DeviceInfo; + +@Data(staticConstructor = "of") +@RegisterForReflection +public class EncryptedAuthUserInfo { + private final AccountInfoResult accountInfoResult; + private final DeviceInfo deviceInfo; +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TerminalClient.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TerminalClient.java new file mode 100644 index 0000000..804c4ca --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TerminalClient.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import lombok.Data; + +@Data(staticConstructor = "of") +public class TerminalClient { + private final String terminalMode; + private final String userId; + private final String uuid; + private final long expireAt; +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TotpAuthCode.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TotpAuthCode.java new file mode 100644 index 0000000..1038b7c --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TotpAuthCode.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import lombok.Data; + +@Data +public class TotpAuthCode { + private String authCode; + private Long authCodeExpiresAt; + private Long authCodeTotalExpiresAt; + + public static TotpAuthCode of(String authCode, Long authCodeExpiresAt, Long authCodeTotalExpiresAt){ + TotpAuthCode totpAuthCode = new TotpAuthCode(); + totpAuthCode.authCode = authCode; + totpAuthCode.authCodeExpiresAt = authCodeExpiresAt; + totpAuthCode.authCodeTotalExpiresAt = authCodeTotalExpiresAt; + return totpAuthCode; + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TotpAuthInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TotpAuthInfo.java new file mode 100644 index 0000000..ba81327 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/TotpAuthInfo.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +@Data +public class TotpAuthInfo { + @NotBlank + private String clientUUID; + private String clientModel; + private String clientType; +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/BkeyInfo.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/BkeyInfo.java new file mode 100644 index 0000000..a069823 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/BkeyInfo.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto.v2; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +public class BkeyInfo { + @Schema(description = "bkey") + private String bkey; + @JsonCreator + public BkeyInfo(@JsonProperty("bkey") String bkey) { + this.bkey = bkey; + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/CreateAuthCodeDTO.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/CreateAuthCodeDTO.java new file mode 100644 index 0000000..7f7a0a1 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/CreateAuthCodeDTO.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto.v2; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@AllArgsConstructor(staticName = "of") +@NoArgsConstructor +public class CreateAuthCodeDTO { + @Schema(description = "使用对称密钥加密的 bkey, 盒子侧用的 key, 用来对应手机端和跳转后的盒子页面前端") + private String bkey; + private Boolean authResult; + private Long createTime; + private String userId; + private Boolean autoLogin; + private Long autoLoginExpiresAt; +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/CreateAuthCodeResult.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/CreateAuthCodeResult.java new file mode 100644 index 0000000..feffeb8 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/CreateAuthCodeResult.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto.v2; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import space.ao.services.gateway.auth.qrcode.dto.BoxLanInfo; + +@Data +@AllArgsConstructor(staticName = "of") +@NoArgsConstructor +public class CreateAuthCodeResult { + private Boolean result; + private BoxLanInfo boxLanInfo; +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/EncryptedAuthUserResult.java b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/EncryptedAuthUserResult.java new file mode 100644 index 0000000..ddad0f0 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/dto/v2/EncryptedAuthUserResult.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.dto.v2; + +import lombok.Data; +import space.ao.services.account.personalinfo.dto.AccountInfoResult; +import space.ao.services.support.agent.info.IpAddressInfo; + +@Data(staticConstructor = "of") +public class EncryptedAuthUserResult { + private AccountInfoResult accountInfoResult; + private IpAddressInfo ipAddressInfo; +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/rest/BoxKeyResource.java b/src/main/java/space/ao/services/gateway/auth/qrcode/rest/BoxKeyResource.java new file mode 100644 index 0000000..df1ddb2 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/rest/BoxKeyResource.java @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.rest; + +import io.vertx.core.http.HttpServerRequest; +import java.time.Duration; +import java.time.OffsetDateTime; +import java.util.Objects; +import jakarta.ws.rs.core.Context; +import io.vertx.core.http.HttpServerResponse; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.auth.service.TotpService; +import space.ao.services.gateway.auth.qrcode.dto.*; +import space.ao.services.gateway.auth.qrcode.service.BoxKeyService; +import space.ao.services.gateway.auth.qrcode.service.CacheService; +import space.ao.services.account.authorizedterminalinfo.dto.AuthorizedTerminalInfo; +import space.ao.services.account.authorizedterminalinfo.entity.AuthorizedTerminalEntity; +import space.ao.services.account.authorizedterminalinfo.service.AuthorizedTerminalService; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.gateway.auth.CreateTokenResult; +import space.ao.services.gateway.auth.RefreshTokenInfo; +import space.ao.services.gateway.auth.VerifyTokenResult; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.StringUtils; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.limit.LimitReq; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.RefreshToken; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.response.ResponseBaseEnum; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; + +import static space.ao.services.support.RestConfiguration.REQUEST_ID; + +@Path("/v1/api/auth") +@Tag(name = "Space Gateway QRCode-scanning Service", + description = "Provides overall space requests' scan QR code service.") +public class BoxKeyResource { + + @Inject + BoxKeyService boxKeyService; + @Inject + OperationUtils utils; + @Inject + TokenUtils tokenUtils; + @Inject + SecurityUtils securityUtils; + @Context + HttpServerRequest request; + @Context + HttpServerResponse response; + @Inject + AuthorizedTerminalService authorizedTerminalService; + @Inject + CacheService cacheService; + @Inject + ApplicationProperties properties; + @Inject + TotpService totpService; + + private static final String X_FORWARDED_FOR = "X-Forwarded-For"; + + @POST + @Logged + @Path("/bkey/create") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "Get authorization code; NOTE: you need to use encrypted(symmetric key) " + + + "auth-key, client uuid, boxName, boxUUID to exchange an authCode; authCode in the response uses symmetric key encryption") + public CreateAuthCodeResult createQrcodeAuthInfo( + @Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid CreateAuthCodeInfo createAuthCodeInfo) { + CreateAuthCodeDTO authCode = boxKeyService.createAuthCode(requestId, createAuthCodeInfo); + return CreateAuthCodeResult.of(200, "获取授权码成功", authCode); + } + + @POST + @LimitReq(keyPrefix="ACREQRATE-", interval = 60, max = 5) + @Logged + @Path("/bkey/verify") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "Verify the authorization code on the new device side (caller: front end of the new device box); " + + + "NOTE: you need to use encrypted(box public key) authCode, bkey, tmpEncryptedSecret; " + + "encryptedSecret, boxName, boxUUID in the response uses tmpEncryptedSecret encryption") + public EncryptAuthResult verifyQrcodeAuthInfo( + @Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid EncryptAuthInfo encryptAuthInfo) { + + String xForwardedFor = request.getHeader(X_FORWARDED_FOR); + if(!StringUtils.isBlank(xForwardedFor)){ + String ip = xForwardedFor.split(",")[0]; + encryptAuthInfo.setLoginAddress(utils.getCityInfo(ip)); + } + encryptAuthInfo = totpService.decryptAuthInfo(requestId, encryptAuthInfo); + EncryptAuthDTO encryptAuthDTO = boxKeyService.verify(requestId, encryptAuthInfo); + totpService.setCookies(response, encryptAuthInfo.getClientUUID(), + encryptAuthDTO.expiresAtEpochSeconds() - OffsetDateTime.now().toEpochSecond(), request.getHeader("Host")); + return EncryptAuthResult.of(200, "OK", requestId, encryptAuthDTO); + } + + @POST + @Logged + @Path("/bkey/refresh") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "Tries to refresh an access token for further api call with a refresh-token. you need to use encrypted(box public key) tmpEncryptedSecret; ") + public CreateTokenResult refresh(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid RefreshTokenInfo info, + @Valid @QueryParam("tmpEncryptedSecret") String tmpEncryptedSecret) { + var refreshToken = tokenUtils.verifyRefreshToken(requestId, info.getRefreshToken()); + if (refreshToken != null) { + var address = getAddressByIP(); + totpService.setCookies(response, refreshToken.getClientUUID(), + refreshToken.getExpiresAt().toEpochSecond() - OffsetDateTime.now().toEpochSecond(), request.getHeader("Host")); + return boxKeyService.refreshQrcodeAuthInfo(requestId, tmpEncryptedSecret, + refreshToken.getUserId(), refreshToken.getClientUUID(), address, null); + } else { + throw new ServiceOperationException(ServiceError.REFRESH_TOKEN_INVALID); + } + } + + @POST + @Logged + @Path("/bkey/poll") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "short-polling the result (caller: scan code mobile phone)") + public VerifyTokenResult pollQrcodeAuthResult( + @Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("bkey") String bkey, + @Valid @QueryParam("autoLogin") @DefaultValue("true") Boolean autoLogin) { + var authResult = boxKeyService.getAuthResult(bkey); + // 为空是被授权端没有获取token等信息,不为空是已获取 + // 为空,自动登录 插入 自动登录有效期为15天 + // 不为空 自动登录 更新 自动登录有效期为15天,(默认设置) + // 为空,不自动登录 插入 不允许自动登录 有效期为 now + // 不为空,不自动登录 更新 不允许自动登录 有效期为 now + + if(Boolean.FALSE.equals(autoLogin)){ + authResult.setAutoLogin(false); + authResult.setAutoLoginExpiresAt(Duration.parse(properties.pushTimeout()).toSeconds()); + cacheService.setAuthCodeInfo(authResult); + } + return VerifyTokenResult.of(authResult.isAuthResult(), requestId); + } + + @POST + @Logged + @Path("/auto/login") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "authorized terminal login") + public ResponseBase authLogin(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid AuthorizedTerminalLoginInfo info){ + RefreshToken refreshToken = null; + try { + refreshToken = tokenUtils.verifyRefreshToken(requestId, info.getRefreshToken()); + } catch (ServiceOperationException e){ + if(e.getErrorCode() == ServiceError.REFRESH_TOKEN_TIMEOUT.getCode()){ + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.NO_AUTH).build(); + } + } + if (refreshToken != null) { + var address = getAddressByIP(); + totpService.setCookies(response, refreshToken.getClientUUID(), + refreshToken.getExpiresAt().toEpochSecond() - OffsetDateTime.now().toEpochSecond(), request.getHeader("Host")); + return boxKeyService.login(requestId, info, address, refreshToken, true); + } else { + throw new ServiceOperationException(ServiceError.REFRESH_TOKEN_INVALID); + } + } + + @POST + @Logged + @Path("/auto/login/poll") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "authorized terminal login") + public ResponseBase loginPoll(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid AuthorizedTerminalLoginInfo info){ + var refreshToken = tokenUtils.verifyRefreshToken(requestId, info.getRefreshToken()); + if (refreshToken != null) { + var address = getAddressByIP(); + totpService.setCookies(response, refreshToken.getClientUUID(), + refreshToken.getExpiresAt().toEpochSecond() - OffsetDateTime.now().toEpochSecond(), request.getHeader("Host")); + return boxKeyService.login(requestId, info, address, refreshToken, false); + + } else { + throw new ServiceOperationException(ServiceError.REFRESH_TOKEN_INVALID); + } + } + + @POST + @Logged + @Path("/auto/login/confirm") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "authorized terminal login") + public ResponseBase loginConfirm(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid AuthorizedTerminalLoginConfirmInfo info) { + final var accessToken = tokenUtils.checkAccessToken(requestId, info.getAccessToken()); + var clientUUID = securityUtils.decryptWithSecret(info.getEncryptedClientUUID(), accessToken.getSharedSecret(), + accessToken.getSharedInitializationVector()); + AuthorizedTerminalEntity authorizedTerminalEntity; + if(Boolean.FALSE.equals(info.getLogin())){ + authorizedTerminalService.updateAuthorizedTerminalValidTime(requestId, AuthorizedTerminalInfo.of(accessToken.getUserId(), + clientUUID,"",-Duration.parse(properties.timeOfAllowLogin()).getSeconds(),"","")); + return ResponseBase.ok(requestId, VerifyTokenResult.of(true, requestId)).build(); + } + if(Boolean.TRUE.equals(info.getAutoLogin())){ + authorizedTerminalEntity = authorizedTerminalService.updateAuthorizedTerminalValidTime(requestId, AuthorizedTerminalInfo.of( + accessToken.getUserId(), clientUUID, "", + Duration.parse(properties.timeOfAllowAutoLogin()).getSeconds(), + "", "")); + } else { + authorizedTerminalEntity = authorizedTerminalService.updateAuthorizedTerminalValidTime(requestId, AuthorizedTerminalInfo.of( + accessToken.getUserId(), clientUUID, "", Duration.parse(properties.pushTimeout()).getSeconds(), + "", "")); + } + + if(Objects.isNull(authorizedTerminalEntity)){ + throw new ServiceOperationException(ServiceError.CLIENT_UUID_NOT_FOUND); + } + return ResponseBase.ok(requestId, VerifyTokenResult.of(true, null)).build(); + } + + public String getAddressByIP(){ + var address = ""; + String xForwardedFor = request.getHeader(X_FORWARDED_FOR); + if(!StringUtils.isBlank(xForwardedFor)){ + String ip = xForwardedFor.split(",")[0]; + address = utils.getCityInfo(ip); + } + return address; + } + +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/rest/TotpGatewayResource.java b/src/main/java/space/ao/services/gateway/auth/qrcode/rest/TotpGatewayResource.java new file mode 100644 index 0000000..906441c --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/rest/TotpGatewayResource.java @@ -0,0 +1,257 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.rest; + +import io.vertx.core.http.HttpServerRequest; +import io.vertx.core.http.HttpServerResponse; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.account.personalinfo.dto.AccountInfoResult; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.auth.service.TotpService; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.gateway.auth.qrcode.dto.*; +import space.ao.services.gateway.auth.qrcode.dto.v2.BkeyInfo; +import space.ao.services.gateway.auth.qrcode.dto.v2.CreateAuthCodeResult; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.RestConfiguration; +import space.ao.services.support.StringUtils; +import space.ao.services.support.limit.LimitReq; +import space.ao.services.support.log.Logged; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.response.ResponseBaseEnum; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import javax.crypto.spec.IvParameterSpec; + +import java.time.Duration; +import java.time.ZonedDateTime; +import java.util.Base64; +import java.util.Objects; + +@Path("/v1/api/gateway/totp") +@Tag(name = "Space Gateway QRCode-scanning Service base on TOTP", + description = "Provides overall space requests' scan QR code service base on TOTP.") +public class TotpGatewayResource { + + @Inject + TotpService totpService; + + @Inject + ApplicationProperties properties; + @Inject + OperationUtils utils; + @Inject + UserInfoRepository userInfoRepository; + + @Context + HttpServerRequest request; + @Context + HttpServerResponse response; + @Inject + SecurityUtils securityUtils; + + private static final String X_FORWARDED_FOR = "X-Forwarded-For"; + + @POST + @Path("bkey") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "被授权端调用获取 bkey.") + @Logged + public ResponseBase bkey(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId) { + String bkey = utils.createRandomType4UUID(); + totpService.saveUserIdByBkey(new CreateAuthCodeDTO(bkey, System.currentTimeMillis(), false, + Duration.parse(properties.timeOfAllowAutoLogin()).toSeconds())); + return ResponseBase.ok(requestId, bkey).build(); + } + + @GET + @Path("/bkey") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "被授权端调用获取 bkey 和公钥.") + @Logged + public ResponseBase bkey(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @QueryParam("spaceId") String spaceId) { + String bkey = utils.createRandomType4UUID(); + totpService.saveUserIdByBkey(new CreateAuthCodeDTO(bkey, System.currentTimeMillis(), false, + Duration.parse(properties.timeOfAllowAutoLogin()).toSeconds())); + var user = userInfoRepository.findByDomain(spaceId); + if(user.isPresent()){ + return ResponseBase.ok(requestId, CreateBkeyInfo.of(bkey, totpService.getBoxLanInfo(requestId, user.get().getId().toString()))).build(); + } + + var usersByPersonalName = userInfoRepository.findByPersonalName(spaceId); + if(usersByPersonalName.isEmpty()){ + return ResponseBase.notFound(requestId).build(); + } + if(usersByPersonalName.size() > 1){ + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.SPACE_ID_NOT_UNIQUE).build(); + } + return ResponseBase.ok(requestId, CreateBkeyInfo.of(bkey, totpService.getBoxLanInfo(requestId, usersByPersonalName.get(0).getId().toString()))).build(); + } + + + @POST + @Path("/bkey/poll") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "被授权端轮询校检结果.") + @Logged + public ResponseBase bkeyPoll(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid BkeyInfo bkeyInfo) { + var createAuthCodeDTO = totpService.getUserIdByBkey(bkeyInfo.getBkey()); + if(createAuthCodeDTO == null){ + return ResponseBase.notFound(requestId).build(); + } + if(createAuthCodeDTO.getUserId() != null){ + return ResponseBase.ok(requestId, CreateAuthCodeResult.of( + true, totpService.getBoxLanInfo(requestId, createAuthCodeDTO.getUserId()) + )).build(); + } else { + return ResponseBase.ok(requestId, CreateAuthCodeResult.of(false, null)).build(); + } + } + + @POST + @LimitReq(keyPrefix="ACREQRATE-", interval = 60, max = 5) + @Path("/bkey/verify") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + public ResponseBase verify(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid EncryptAuthInfo encryptAuthInfo) { + + var authInfo = totpService.decryptAuthInfo(requestId, encryptAuthInfo); + String aoid, userid, userBindClientUUID; + var expireAt = Duration.parse(properties.timeOfAllowAutoLogin()).toSeconds(); + var autoLogin = true; + + String xForwardedFor = request.getHeader(X_FORWARDED_FOR); + String ip = request.remoteAddress().host(); + if(!StringUtils.isBlank(xForwardedFor)){ + ip = xForwardedFor.split(",")[0]; + authInfo.setLoginAddress(utils.getCityInfo(ip)); + } + UserEntity userEntity; + if(!StringUtils.isBlank(authInfo.getSpaceId())){ + if(!utils.isLocalAddress(ip)){ + return ResponseBase.notAcceptable(requestId).build(); + } + // 局域网或者直接域名登陆的 + var userIsExist = totpService.verifyUser(authInfo); + + if(userIsExist) { + userEntity = totpService.verifyAuthCode(authInfo); + } else { + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.INVALID_USER).build(); + } + if(userEntity == null){ + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.AUTH_CODE_NOT_MATCH).build(); + } + } else { + // 扫码登陆的 + var createAuthCodeDTO = totpService.getUserIdByBkey(authInfo.getBkey()); + if(createAuthCodeDTO == null || !Objects.equals(createAuthCodeDTO.getBkey(), authInfo.getBkey())){ + throw new ServiceOperationException(ServiceError.BOX_KEY_NOT_MATCH); + } + userid = createAuthCodeDTO.getUserId(); + if(Objects.equals(authInfo.getVersion(), "v2")){ + userEntity = totpService.verifyAuthCode(authInfo.getAuthCode(), Long.parseLong(userid)); + if(userEntity == null){ + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.AUTH_CODE_NOT_MATCH).build(); + } + } else { + // 校检授权码(authCode) + if (!authInfo.getAuthCode().equals(createAuthCodeDTO.getAuthCode())) { + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.AUTH_CODE_NOT_MATCH).build(); + } + userEntity = userInfoRepository.findById(Long.parseLong(userid)); + } + autoLogin = createAuthCodeDTO.getAutoLogin(); + if(!autoLogin){ + // web 侧不自动登陆的时候有效期 1天 + if(Objects.nonNull(authInfo.getTerminalType()) && + authInfo.getTerminalType().equalsIgnoreCase("web")){ + expireAt = Duration.parse(properties.gatewayTimeOfQrAkLife()).toSeconds(); + } + } else { + expireAt = createAuthCodeDTO.getAutoLoginExpiresAt(); + } + createAuthCodeDTO.setAuthResult(true); + totpService.saveUserIdByBkey(createAuthCodeDTO); + } + + aoid = userEntity.getAoId(); + userid = userEntity.getId().toString(); + userBindClientUUID = userEntity.getClientUUID(); + + var createTokenResult = totpService.createTokenAndPushMessage(requestId, authInfo, userid, userBindClientUUID, expireAt); + + var ivParameterSpec = new IvParameterSpec(Base64.getDecoder().decode( + createTokenResult.getAlgorithmConfig().getTransportation().getInitializationVector())); + var tempSecret = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey( + requestId, encryptAuthInfo.getTmpEncryptedSecret()); + + String boxName = securityUtils.encryptWithSecret(properties.boxName(), tempSecret, ivParameterSpec); + String boxUUID = securityUtils.encryptWithSecret(properties.boxUuid(), tempSecret, ivParameterSpec); + aoid = securityUtils.encryptWithSecret(aoid, tempSecret, ivParameterSpec); + + String encryptedAuthUserInfo; + + var accountInfoResult = AccountInfoResult.of(userEntity.getRole().name(), userEntity.getPersonalName(), + userEntity.getPersonalSign(), userEntity.getCreateAt(),userEntity.getAoId(), userEntity.getClientUUID(), + userEntity.getPhoneModel(), userEntity.getUserDomain(), userEntity.getImageMd5(), null, null, null); + + encryptedAuthUserInfo = securityUtils.encryptWithSecret(utils.objectToJson(EncryptedAuthUserInfo.of( + accountInfoResult, securityUtils.getDeviceInfo())), tempSecret, ivParameterSpec); + totpService.setCookies(response, authInfo.getClientUUID(), + expireAt, request.getHeader("Host")); + return ResponseBase.ok(requestId,EncryptAuthDTO.of(boxName, boxUUID, aoid, createTokenResult, + autoLogin, ZonedDateTime.now().plusSeconds(expireAt).toString(), totpService.getBoxLanInfo(requestId, + userid), encryptedAuthUserInfo)).build(); + } + +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/service/BoxKeyService.java b/src/main/java/space/ao/services/gateway/auth/qrcode/service/BoxKeyService.java new file mode 100644 index 0000000..b9287be --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/service/BoxKeyService.java @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.service; + +import java.time.Duration; +import java.time.OffsetDateTime; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoField; +import java.util.Base64; +import java.util.Objects; +import javax.crypto.spec.IvParameterSpec; + +import org.eclipse.microprofile.rest.client.inject.RestClient; +import space.ao.services.account.authorizedterminalinfo.dto.AuthorizedTerminalInfo; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.authorizedterminalinfo.service.AuthorizedTerminalService; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.personalinfo.dto.AccountInfoResult; +import space.ao.services.account.personalinfo.entity.UserEntity; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.auth.service.TotpService; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.gateway.auth.CreateTokenResult; +import space.ao.services.gateway.auth.qrcode.dto.*; +import space.ao.services.push.dto.Message; +import space.ao.services.push.dto.NotificationEnum; +import space.ao.services.push.dto.TerminalInfo; +import space.ao.services.push.services.RedisService; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.StringUtils; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.agent.AgentServiceRestClient; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.AccessToken; +import space.ao.services.support.model.RefreshToken; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.response.ResponseBaseEnum; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +@ApplicationScoped +public class BoxKeyService { + + @Inject + OperationUtils utils; + @Inject + TokenUtils tokenUtils; + @Inject + SecurityUtils securityUtils; + @Inject + CacheService cacheService; + + @Inject + MemberManageService memberManageService; + + @Inject + RedisService redisService; + @Inject + UserInfoRepository userInfoRepository; + @Inject + AuthorizedTerminalService authorizedTerminalService; + @Inject + TotpService totpService; + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + @Inject + ApplicationProperties properties; + + + @Inject @RestClient + AgentServiceRestClient agentServiceRestClient; + + static final String ERROR_COUNTER_LOGIN_FAILED = "LFC-"; // login failed counter , + userid + clientUUID + static final String UNKNOWN = "unknown"; + public CreateAuthCodeDTO createAuthCode(String requestId, CreateAuthCodeInfo createAuthCodeInfo) { + AccessToken ak = tokenUtils.verifyAccessToken(requestId, createAuthCodeInfo.getAccessToken()); + if (ak == null) { + throw new ServiceOperationException(ServiceError.ACCESS_TOKEN_INVALID); + } + String authKey = securityUtils.decryptWithSecret( + createAuthCodeInfo.getAuthKey(), ak.getSharedSecret(), ak.getSharedInitializationVector()); + String clientUUID = securityUtils.decryptWithSecret( + createAuthCodeInfo.getClientUUID(), ak.getSharedSecret(), + ak.getSharedInitializationVector()); + UserEntity userEntity = memberManageService.findByClientUUID(clientUUID); + if(Objects.isNull(userEntity)){ + throw new ServiceOperationException(ServiceError.CLIENT_UUID_NOT_FOUND); + } + if (!userEntity.getAuthKey().equals(authKey)) { + throw new ServiceOperationException(ServiceError.AUTH_KEY_NOT_MATCH); + } + + String aoId = userEntity.getAoId(); + String userid = String.valueOf(userEntity.getId()); + + CreateAuthCodeDTO createAuthCodeDTO = new CreateAuthCodeDTO(); + + // generate authCode + String authCode = utils.createRandomNumbers(4); + if(!StringUtils.isBlank(createAuthCodeInfo.getVersion()) && + createAuthCodeInfo.getVersion().equalsIgnoreCase("v2")){ + var autCodeInfo = totpService.generateAuthCode(Long.parseLong(userid)); + authCode = String.valueOf(autCodeInfo.getAuthCode()); + createAuthCodeDTO.setAuthCodeExpiresAt(autCodeInfo.getAuthCodeExpiresAt()); + createAuthCodeDTO.setAuthCodeTotalExpiresAt(autCodeInfo.getAuthCodeTotalExpiresAt()); + } + String bkey = utils.createRandomType4UUID(); + + long currentTimeMillis = System.currentTimeMillis(); + String tmpClientUUID = utils.createRandomType4UUID(); + + var expiresAt = Duration.parse(properties.timeOfAllowAutoLogin()).getSeconds(); + + cacheService.setAuthCodeInfo( + new CreateAuthCodeDTO(aoId, userid, tmpClientUUID, authCode, bkey, currentTimeMillis, true, expiresAt)); + + createAuthCodeDTO.setAuthCode( + securityUtils.encryptWithSecret(authCode, ak.getSharedSecret(), + ak.getSharedInitializationVector())); + createAuthCodeDTO.setBkey( + securityUtils.encryptWithSecret(bkey, ak.getSharedSecret(), ak.getSharedInitializationVector())); + createAuthCodeDTO.setCreateTime(currentTimeMillis); + + var ipAddressInfo = agentServiceRestClient.getIpAddressInfo(requestId); + var userDomainSuffix = utils.getUserDomainSuffix(); + if(Objects.nonNull(userEntity.getUserDomain())){ + createAuthCodeDTO.setLanDomain(userEntity.getUserDomain().split("\\.")[0] + + ".lan." + userDomainSuffix); + } + if(!ipAddressInfo.results().isEmpty()){ + createAuthCodeDTO.setLanIp(ipAddressInfo.results().get(0).getIp()); + } + return createAuthCodeDTO; + } + + @Logged + public EncryptAuthDTO verify(String requestId, EncryptAuthInfo encryptAuthInfo) { + + if (!cacheService.hasKey(encryptAuthInfo.getBkey())) { + throw new ServiceOperationException(ServiceError.BOX_KEY_NOT_MATCH); + } + + var createAuthCodeDTO = cacheService.getAuthCodeInfo(encryptAuthInfo.getBkey()); + + if(!StringUtils.isBlank(encryptAuthInfo.getVersion()) && encryptAuthInfo.getVersion().equalsIgnoreCase("v2")){ + totpService.verifyAuthCode(encryptAuthInfo.getAuthCode(), Long.parseLong(createAuthCodeDTO.getUserId())); + } else { + // 校检授权码(authCode) + if (!encryptAuthInfo.getAuthCode().equals(createAuthCodeDTO.getAuthCode())) { + throw new ServiceOperationException(ServiceError.AUTH_CODE_NOT_MATCH); + } + } + + // 校检授权码(box key) + if (!encryptAuthInfo.getBkey().equals(createAuthCodeDTO.getBkey())) { + throw new ServiceOperationException(ServiceError.BOX_KEY_NOT_MATCH); + } + + var createTokenResult = tokenUtils.createDefaultTokenResult(requestId, + encryptAuthInfo.getTmpEncryptedSecret(), + createAuthCodeDTO.getUserId(), encryptAuthInfo.getClientUUID() != null ? + encryptAuthInfo.getClientUUID() : createAuthCodeDTO.getClientUUID(), null); + + var ivParameterSpec = new IvParameterSpec(Base64.getDecoder().decode( + createTokenResult.getAlgorithmConfig().getTransportation().getInitializationVector())); + + createAuthCodeDTO.setAuthResult(true); + // 临时授权写入 account + var authorizedTerminal = authorizedTerminalRepository.findByUseridAndUuid( + Long.valueOf(createAuthCodeDTO.getUserId()), encryptAuthInfo.getClientUUID()); + // web 侧有效期 1天 + if(Objects.nonNull(encryptAuthInfo.getTerminalType()) && + encryptAuthInfo.getTerminalType().equalsIgnoreCase("web") && + createAuthCodeDTO.getAutoLoginExpiresAt() < Duration.parse(properties.gatewayTimeOfQrAkLife()).toSeconds() + ){ + createAuthCodeDTO.setAutoLoginExpiresAt(Duration.parse(properties.gatewayTimeOfQrAkLife()).toSeconds()); + } + var authorizedTerminalInfo = AuthorizedTerminalInfo.of( + createAuthCodeDTO.getUserId(), + encryptAuthInfo.getClientUUID() != null ? encryptAuthInfo.getClientUUID() : createAuthCodeDTO.getClientUUID(), + encryptAuthInfo.getTerminalMode() != null ? encryptAuthInfo.getTerminalMode() : UNKNOWN, + createAuthCodeDTO.getAutoLoginExpiresAt(), + encryptAuthInfo.getLoginAddress()!= null ? encryptAuthInfo.getLoginAddress() : UNKNOWN, + encryptAuthInfo.getTerminalType()!= null ? encryptAuthInfo.getTerminalType() : UNKNOWN + ); + + if(Objects.isNull(authorizedTerminal)){ // 为空直接新增记录,不为空是更新记录,但是保留之前的自动登录时间 + authorizedTerminal = authorizedTerminalService.insertAuthorizedTerminalInfo(requestId, authorizedTerminalInfo); + } else { + authorizedTerminal = authorizedTerminalService.updateAuthorizedTerminalValidTime(requestId, authorizedTerminalInfo); + } + createAuthCodeDTO.setClientUUID(authorizedTerminal.getUuid()); + //更新value值 + cacheService.setAuthCodeInfo(createAuthCodeDTO); + + var userInfo = userInfoRepository.findByUserId(authorizedTerminal.getUserid()); + + var terminalInfo = new TerminalInfo(authorizedTerminal.getAoid(),authorizedTerminal.getUuid(), authorizedTerminal.getTerminalMode(), + authorizedTerminal.getAddress(), authorizedTerminal.getTerminalType()); + redisService.pushMessage( + Message.of(String.valueOf(userInfo.getId()), userInfo.getClientUUID(), NotificationEnum.LOGIN.getType(), requestId, + utils.objectToJson(terminalInfo))); + + var tempSecret = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey( + requestId, encryptAuthInfo.getTmpEncryptedSecret()); + String boxName = securityUtils.encryptWithSecret(properties.boxName(), tempSecret, ivParameterSpec); + String boxUUID = securityUtils.encryptWithSecret(properties.boxUuid(), tempSecret, ivParameterSpec); + String aoid = securityUtils.encryptWithSecret(createAuthCodeDTO.getAoId(), tempSecret, ivParameterSpec); + String encryptedAuthUserInfo; + + var accountInfoResult = AccountInfoResult.of(userInfo.getRole().name(), userInfo.getPersonalName(), + userInfo.getPersonalSign(), userInfo.getCreateAt(),userInfo.getAoId(), userInfo.getClientUUID(), + userInfo.getPhoneModel(), userInfo.getUserDomain(), userInfo.getImageMd5(), null, null, null); + + encryptedAuthUserInfo = securityUtils.encryptWithSecret(utils.objectToJson(EncryptedAuthUserInfo.of( + accountInfoResult, securityUtils.getDeviceInfo() + )), tempSecret, ivParameterSpec); + return EncryptAuthDTO.of(boxName, boxUUID, aoid, createTokenResult, createAuthCodeDTO.getAutoLogin(), + ZonedDateTime.now().plusSeconds(createAuthCodeDTO.getAutoLoginExpiresAt()).toString(), + totpService.getBoxLanInfo(requestId, userInfo.getId().toString()), encryptedAuthUserInfo); // 返回 access_token和后续解密密钥 + } + + public CreateTokenResult refreshQrcodeAuthInfo(String requestId, String tmpEncryptedSecret, + String userId, String clientUUID, String address, Long expireAt) { + var createTokenResult = tokenUtils.createDefaultTokenResult(requestId, tmpEncryptedSecret, userId, + clientUUID, null); + if(Objects.isNull(expireAt)){ + expireAt = createTokenResult.getExpiresAtEpochSeconds() - OffsetDateTime.now().toEpochSecond(); + } + var authorizedTerminal = authorizedTerminalRepository.findByUseridAndUuid(Long.valueOf(userId), clientUUID); + + if(authorizedTerminal==null){ + throw new ServiceOperationException(ServiceError.CLIENT_UUID_NOT_FOUND); + }else{ + var updateResult = authorizedTerminalService.updateAuthorizedTerminalValidTime(requestId, AuthorizedTerminalInfo.of( + userId, clientUUID, authorizedTerminal.getTerminalMode(), expireAt, + address != null ? address : authorizedTerminal.getAddress(), authorizedTerminal.getTerminalType() + )); + var userInfo = userInfoRepository.findByUserId(Long.valueOf(userId)); + var terminalInfo = new TerminalInfo(updateResult.getAoid(),updateResult.getUuid(), updateResult.getTerminalMode(), + updateResult.getAddress(), updateResult.getTerminalType()); + redisService.pushMessage(Message.of(String.valueOf(userInfo.getId()), + userInfo.getClientUUID(), NotificationEnum.LOGIN.getType(), requestId, utils.objectToJson(terminalInfo))); + return createTokenResult; + } + } + + @Logged + public ResponseBase login(String requestId, AuthorizedTerminalLoginInfo info, + String address, RefreshToken refreshToken, boolean push){ + + var authorizedTerminal = authorizedTerminalRepository.findByUseridAndUuid(Long.valueOf(refreshToken.getUserId()), refreshToken.getClientUUID()); + // 三种情况,1、直接登录 2、免扫码登录 3、直接进入扫码页面 + + if(Objects.isNull(authorizedTerminal)){ + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.NO_AUTH).build(); + } + if(authorizedTerminal.getCreateAt().isBefore(OffsetDateTime.now().minusSeconds(Duration.parse(properties.timeOfAllowLogin()).toSeconds()))){ + // 创建时间在三十天之前 + authorizedTerminalService.delAuthorizedTerminalInfo(requestId, AuthorizedTerminalInfo.of(authorizedTerminal.getUserid().toString(), + authorizedTerminal.getUuid(),"",0,"","")); + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.NO_AUTH).build(); + } + if(Boolean.FALSE.equals(push)){ + // 取消登录时 3、直接进入扫码页面 + if(authorizedTerminal.getExpireAt().isBefore(OffsetDateTime.now().minusSeconds(Duration.parse(properties.timeOfAllowLogin()).toSeconds()))){ + authorizedTerminalService.logoutAuthorizedTerminalInfo(requestId, refreshToken.getUserId(), refreshToken.getClientUUID()); + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.CANCEL_LOGIN).build(); + } + } + + if(authorizedTerminal.getExpireAt().isAfter(OffsetDateTime.now())){ + // 1、有效期在现在之后(yml 文件 time-of-allow-automatic-login 控制)天之内 ,直接登录 + var expireAt = authorizedTerminal.getExpireAt().getLong(ChronoField.INSTANT_SECONDS) - OffsetDateTime.now() + .getLong(ChronoField.INSTANT_SECONDS); + // web 侧有效期 1天 + if(Objects.nonNull(authorizedTerminal.getTerminalType()) && + authorizedTerminal.getTerminalType().equalsIgnoreCase("web") && + expireAt < Duration.parse(properties.gatewayTimeOfQrAkLife()).toSeconds()){ + expireAt = Duration.parse(properties.gatewayTimeOfQrAkLife()).toSeconds(); + } + var result = refreshQrcodeAuthInfo(requestId, info.getTmpEncryptedSecret(), + refreshToken.getUserId(), refreshToken.getClientUUID(), address, expireAt + ); + result.setAutoLoginExpiresAt(authorizedTerminal.getExpireAt().toString()); + + var tempSecret = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey( + requestId, info.getTmpEncryptedSecret()); + var userInfo = userInfoRepository.findByUserId(Long.valueOf(refreshToken.getUserId())); + var accountInfoResult = AccountInfoResult.of(userInfo.getRole().name(), userInfo.getPersonalName(), + userInfo.getPersonalSign(), userInfo.getCreateAt(),userInfo.getAoId(), userInfo.getClientUUID(), + userInfo.getPhoneModel(), userInfo.getUserDomain(), userInfo.getImageMd5(), null, null, null); + + var encryptedAuthUserInfo = securityUtils.encryptWithSecret(utils.objectToJson(EncryptedAuthUserInfo.of( + accountInfoResult, securityUtils.getDeviceInfo() + )), tempSecret, new IvParameterSpec(Base64.getDecoder().decode(result.getAlgorithmConfig().getTransportation().getInitializationVector()))); + result.setExContext(encryptedAuthUserInfo); + redisService.resetFailedLoginCounter(ERROR_COUNTER_LOGIN_FAILED, refreshToken.getUserId(), refreshToken.getClientUUID()); + return ResponseBase.ok(requestId, result).build(); + } else { + if(push){ // 第一次需要推送 + // 2、免扫码登录 推送一条消息到用户绑定端(成员、管理员) + if(redisService.increaseFailedLoginCounter(ERROR_COUNTER_LOGIN_FAILED, refreshToken.getUserId(), refreshToken.getClientUUID()) > 3){ + redisService.resetFailedLoginCounter(ERROR_COUNTER_LOGIN_FAILED, refreshToken.getUserId(), refreshToken.getClientUUID()); + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.NO_AUTH).build(); + } + var userInfo = userInfoRepository.findByUserId(authorizedTerminal.getUserid()); + var terminalInfo = new TerminalInfo(authorizedTerminal.getAoid(),authorizedTerminal.getUuid(), authorizedTerminal.getTerminalMode(), + authorizedTerminal.getAddress(), authorizedTerminal.getTerminalType()); + redisService.pushMessage(Message.of(String.valueOf(userInfo.getId()), + userInfo.getClientUUID(), NotificationEnum.LOGIN_CONFIRM.getType(), requestId, utils.objectToJson(terminalInfo))); + } + authorizedTerminalService.logoutAuthorizedTerminalInfo(requestId, refreshToken.getUserId(), refreshToken.getClientUUID()); + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.NO_AUTO_LOGIN).build(); + } + } + + + public CreateAuthCodeDTO getAuthResult(String bkey) { + var result = cacheService.getAuthCodeInfo(bkey); + if (result.isAuthResult()) { + cacheService.remove(bkey); + } + return result; + } +} diff --git a/src/main/java/space/ao/services/gateway/auth/qrcode/service/CacheService.java b/src/main/java/space/ao/services/gateway/auth/qrcode/service/CacheService.java new file mode 100644 index 0000000..501abcd --- /dev/null +++ b/src/main/java/space/ao/services/gateway/auth/qrcode/service/CacheService.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.auth.qrcode.service; + +import com.google.common.base.Stopwatch; +import io.quarkus.scheduler.Scheduled; +import org.jboss.logging.Logger; +import space.ao.services.gateway.auth.qrcode.dto.CreateAuthCodeDTO; + +import jakarta.enterprise.context.ApplicationScoped; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; + +@ApplicationScoped +public class CacheService { + static final Logger LOG = Logger.getLogger("app.log"); + + // 缓存超时时间 10分钟 + private static final Long TIME_OUT_SECOND = 10 * 60 * 1000L; + + private static final ConcurrentMap cacheMap = new ConcurrentHashMap<>(); + + public void setAuthCodeInfo(CreateAuthCodeDTO createAuthCodeDTO) { + cacheMap.put(createAuthCodeDTO.getBkey(), createAuthCodeDTO); + } + + public CreateAuthCodeDTO getAuthCodeInfo(String bkey) { + if (!cacheMap.containsKey(bkey)) { + throw new ServiceOperationException(ServiceError.BOX_KEY_NOT_MATCH); + } + return cacheMap.get(bkey); + } + + public boolean hasKey(String bkey) { + return cacheMap.containsKey(bkey); + } + + public CreateAuthCodeDTO remove(String bkey) { + return cacheMap.remove(bkey); + } + + @Scheduled(every = "30m") // 每半小时清理一次缓存 + @SuppressWarnings("unused") // Executing a Scheduled Task + void cleanMap(){ + Stopwatch stopwatch = Stopwatch.createStarted(); + cacheMap.entrySet().removeIf(entry -> System.currentTimeMillis() - entry.getValue().getCreateTime() > TIME_OUT_SECOND); + LOG.info("regularly clean bkey cache completed - "+stopwatch.elapsed(TimeUnit.SECONDS)); + } + +} diff --git a/src/main/java/space/ao/services/gateway/package-info.java b/src/main/java/space/ao/services/gateway/package-info.java new file mode 100644 index 0000000..fd969d2 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/package-info.java @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway; \ No newline at end of file diff --git a/src/main/java/space/ao/services/gateway/version/CompatibleCheckRes.java b/src/main/java/space/ao/services/gateway/version/CompatibleCheckRes.java new file mode 100644 index 0000000..d4d0209 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/version/CompatibleCheckRes.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.version; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data(staticConstructor = "of") +public class CompatibleCheckRes { + // app是否需要强制更新 + @Schema(description = "app是否需要强制更新") + private Boolean isAppForceUpdate = false; + + // box是否需要强制更新 + @Schema(description = "box是否需要强制更新") + private Boolean isBoxForceUpdate = false; + + // 最新app软件包信息 + private PackageRes lastestAppPkg; + + // 最新box软件包信息 + private PackageRes lastestBoxPkg; +} diff --git a/src/main/java/space/ao/services/gateway/version/PackageCheckRes.java b/src/main/java/space/ao/services/gateway/version/PackageCheckRes.java new file mode 100644 index 0000000..b15b903 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/version/PackageCheckRes.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.version; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@NoArgsConstructor +public class PackageCheckRes { + // 是否存在更新 + @Schema(description = "是否存在更新") + private Boolean newVersionExist = false; + + // app是否需要关联更新 + @Schema(description = "app是否需要关联更新") + private Boolean isAppNeedUpdate = false; + + // box是否需要关联更新 + @Schema(description = "box是否需要关联更新") + private Boolean isBoxNeedUpdate = false; + + // 最新app软件包信息 + private PackageRes latestAppPkg; + + // 最新box软件包信息 + private PackageRes latestBoxPkg; +} diff --git a/src/main/java/space/ao/services/gateway/version/PackageRes.java b/src/main/java/space/ao/services/gateway/version/PackageRes.java new file mode 100644 index 0000000..40c0a11 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/version/PackageRes.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.version; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data(staticConstructor = "of") +@Schema(description = "软件包信息") +public class PackageRes { + // 软件包名称 + @Schema(description = "软件包标识符") + private final String pkgName; + + // 软件包类型 ios、android、box + @Schema(description = "软件包类型", enumeration = {"android", "ios", "box"}) + private final String pkgType; + + // 版本号 长度0-20个字符 + @Schema(description = "软件包版本") + private final String pkgVersion; + + // 版本文件大小(字节),最大10GB + private final Long pkgSize; + + // 下载url + private final String downloadUrl; + + // 更新文案/版本特性 长度0-10000个字符 + @Schema(description = "版本特性") + private final String updateDesc; + + // md5 + private final String md5; + + // 是否强制更新 1-强制更新;0-可选更新 + @Schema(description = "是否强制更新") + private final Boolean isForceUpdate; + + @Schema(description = "兼容的最小App版本,用于box版本") + private final String minAndroidVersion; + + @Schema(description = "兼容的最小App版本,用于box版本") + private final String minIOSVersion; + + // 所需的最小盒子版本 + @Schema(description = "所需的最小盒子版本,用于app版本") + private final String minBoxVersion; + + @Schema(description = "是否需要重启") + private final Boolean restart; +} diff --git a/src/main/java/space/ao/services/gateway/version/VersionResource.java b/src/main/java/space/ao/services/gateway/version/VersionResource.java new file mode 100644 index 0000000..79d0f29 --- /dev/null +++ b/src/main/java/space/ao/services/gateway/version/VersionResource.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.gateway.version; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HeaderParam; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.gateway.version.dto.PkgVersionTypeEnum; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.RestConfiguration; +import space.ao.services.support.StringUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.PlatformOpstageServiceRestClient; +import space.ao.services.support.platform.check.CheckPlatformStatus; +import space.ao.services.support.platform.check.PlatformTypeEnum; +import space.ao.services.support.response.ResponseBase; + +@Path("/v1/api/gateway") +@Tag(name = "Space Gateway Version-checking Service", + description = "提供 app、box 版本查询相关接口.") +public class VersionResource { + + @Inject + @RestClient + PlatformOpstageServiceRestClient platformOpstageServiceRestClient; + + @Inject + ApplicationProperties properties; + + @Inject + OperationUtils utils; + + /** + * @param appName appName + * @param appType ios、android + * @param version 版本 + * @return 检查结果 + */ + @GET + @Logged + @Path("/version/app") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = + "app 版本检查, 转发平台侧 /v2/service/packages/version/check") + @CheckPlatformStatus(type = PlatformTypeEnum.PRODUCT, isNeedCheckNetworkChannel = false) + public ResponseBase app(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("appName") String appName, + @Valid @NotBlank @QueryParam("appType") String appType, + @Valid @NotBlank @QueryParam("version") String version, + @QueryParam("version_type") String versionType) { + if(StringUtils.isBlank(versionType)){ + versionType = PkgVersionTypeEnum.OPEN_SOURCE.getName(); + } + PackageCheckRes packageCheckRes; + packageCheckRes = platformOpstageServiceRestClient.check(requestId, "app_check", appName, + appType, version, properties.boxName(), properties.boxType(), utils.getBoxVersion(), versionType); + + return ResponseBase.ok(requestId, packageCheckRes).build(); + } + + @GET + @Logged + @Path("/version/box") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = + "box 版本检查, 转发平台侧 /v2/service/packages/version/check") + @CheckPlatformStatus(type = PlatformTypeEnum.PRODUCT, isNeedCheckNetworkChannel = false) + public ResponseBase box(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("appName") String appName, + @Valid @NotBlank @QueryParam("appType") String appType, + @Valid @NotBlank @QueryParam("version") String version) { + PackageCheckRes packageCheckRes; + packageCheckRes = platformOpstageServiceRestClient.check(requestId, "box_check", appName, + appType, version, properties.boxPkgName(), properties.boxType(), utils.getBoxVersion(), + PkgVersionTypeEnum.OPEN_SOURCE.getName()); + return ResponseBase.ok(requestId, packageCheckRes).build(); + } + + + @GET + @Logged + @Path("/version/compatible") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = + "app、box版本兼容性 转发平台侧 /v2/service/packages/compatibility/check") + @CheckPlatformStatus(type = PlatformTypeEnum.PRODUCT, isNeedCheckNetworkChannel = false) + public ResponseBase compatible(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("appName") String appName, + @Valid @NotBlank @QueryParam("appType") String appType, + @Valid @NotBlank @QueryParam("version") String version) { + CompatibleCheckRes packageCheckRes; + packageCheckRes = platformOpstageServiceRestClient.compatible(requestId, appName, + appType, properties.boxPkgName(), properties.boxType(), utils.getBoxVersion(), version, PkgVersionTypeEnum.OPEN_SOURCE.getName()); + + return ResponseBase.ok(requestId, packageCheckRes).build(); + } + + @GET + @Logged + @Path("/version/box/current") + @Produces(MediaType.APPLICATION_JSON) + @Operation(description = + "获取 box 当前版本") + public ResponseBase box(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId) { + return ResponseBase.ok(requestId, utils.getBoxVersion()).build(); + } +} diff --git a/src/main/java/space/ao/services/gateway/version/dto/PkgVersionTypeEnum.java b/src/main/java/space/ao/services/gateway/version/dto/PkgVersionTypeEnum.java new file mode 100644 index 0000000..f3e4d3a --- /dev/null +++ b/src/main/java/space/ao/services/gateway/version/dto/PkgVersionTypeEnum.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.gateway.version.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum PkgVersionTypeEnum { + COMMERCIAL("commercial", "商业版"), + COMMUNITY("community", "社区版"), + OPEN_SOURCE("open_source", "开源版"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; +} diff --git a/src/main/java/space/ao/services/push/dto/AfterOpenAction.java b/src/main/java/space/ao/services/push/dto/AfterOpenAction.java new file mode 100644 index 0000000..f8cb0ee --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/AfterOpenAction.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum AfterOpenAction { + GO_APP("go_app", "打开应用"), + GO_URL("go_url", "跳转到URL"), + GO_ACTIVITY("go_activity", "打开特定的activity"), + GO_CUSTOM("go_custom", "用户自定义内容"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; + +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/push/dto/ChannelProperties.java b/src/main/java/space/ao/services/push/dto/ChannelProperties.java new file mode 100644 index 0000000..e3ff3ca --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/ChannelProperties.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import jakarta.validation.constraints.NotEmpty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@AllArgsConstructor(staticName = "of") +@NoArgsConstructor +public class ChannelProperties { + @NotEmpty + @Schema(description = "必选,厂商通道相关的特殊配置。系统弹窗,只有display_type=notification时有效,表示华为、小米、oppo、vivo、魅族的设备离线时走系统通道下发时打开指定页面acitivity的完整包路径") + private String channelActivity; +} diff --git a/src/main/java/space/ao/services/push/dto/DisplayTypeEnum.java b/src/main/java/space/ao/services/push/dto/DisplayTypeEnum.java new file mode 100644 index 0000000..c1844c2 --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/DisplayTypeEnum.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum DisplayTypeEnum { + NOTIFICATION("notification", "通知"), + MESSAGE("message", "消息"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; + +} diff --git a/src/main/java/space/ao/services/push/dto/GoActivityEnum.java b/src/main/java/space/ao/services/push/dto/GoActivityEnum.java new file mode 100644 index 0000000..d291935 --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/GoActivityEnum.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum GoActivityEnum { + MAIN("go_app", "xyz.eulix.space.push.EulixMfrNotifyActivity"), + LOGIN_CONFIRM("login_confirm", "xyz.eulix.space.push.EulixMfrNotifyActivity"), + ; + @Getter + private final String action; + + @Getter + private final String activity; +} diff --git a/src/main/java/space/ao/services/push/dto/MemberJoinInfo.java b/src/main/java/space/ao/services/push/dto/MemberJoinInfo.java new file mode 100644 index 0000000..fc75240 --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/MemberJoinInfo.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import lombok.Data; + +@Data(staticConstructor = "of") +public class MemberJoinInfo { + private final String memberName; + private final String joinTime; +} diff --git a/src/main/java/space/ao/services/push/dto/Message.java b/src/main/java/space/ao/services/push/dto/Message.java new file mode 100644 index 0000000..829468b --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/Message.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +public record Message(String userId, String clientUUID, String optType, String requestId, String data) { + public static Message of(String userId, String clientUUID, String optType, String requestId, String data) { + return new Message(userId, clientUUID, optType, requestId, data); + } +} diff --git a/src/main/java/space/ao/services/push/dto/MessageIdInfo.java b/src/main/java/space/ao/services/push/dto/MessageIdInfo.java new file mode 100644 index 0000000..45ff5ae --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/MessageIdInfo.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import java.util.List; +import lombok.Data; + +@Data +public class MessageIdInfo { + List messageId; +} diff --git a/src/main/java/space/ao/services/push/dto/MessageTypeEnum.java b/src/main/java/space/ao/services/push/dto/MessageTypeEnum.java new file mode 100644 index 0000000..11e0b0c --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/MessageTypeEnum.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum MessageTypeEnum { + CLIENTCAST("clientcast", "推送目标设备"), + BROADCAST("broadcast", "广播"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; + +} diff --git a/src/main/java/space/ao/services/push/dto/NotificationEnum.java b/src/main/java/space/ao/services/push/dto/NotificationEnum.java new file mode 100644 index 0000000..12ed866 --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/NotificationEnum.java @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import io.quarkus.runtime.annotations.RegisterForReflection; + +import java.util.ArrayList; +import java.util.List; +import lombok.Getter; + +@RegisterForReflection +public enum NotificationEnum { + + LOGOUT("下线提醒", "您的登录已失效。请重新进行扫码授权 >>","logout", AfterOpenAction.GO_ACTIVITY), + MEMBER_DEL("空间注销提醒", "您的空间已被注销,将无法继续使用,请联系管理员。","member_delete", AfterOpenAction.GO_ACTIVITY), + MEMBER_SELF_DEL("空间注销提醒", "您的空间已注销,将无法继续使用。","member_self_delete", AfterOpenAction.GO_ACTIVITY), + REVOKE("下线提醒", "您的登录已失效。请重新进行扫码授权 >>","revoke", AfterOpenAction.GO_ACTIVITY), + MEMBER_JOIN("成员加入提醒", "","member_join", AfterOpenAction.GO_ACTIVITY), + LOGIN("登录提醒", "", "login", AfterOpenAction.GO_ACTIVITY), + LOGIN_CONFIRM("免扫码登录", "", "login_confirm", AfterOpenAction.GO_ACTIVITY), + + START("盒子启动", "你的盒子已成功启动", "start", AfterOpenAction.GO_ACTIVITY), + SECURITY_PASSWD_MOD_APPLY("账户安全提醒:", "您正在终端 %s 上进行安全密码相关操作,请及时确认 \n" + + "请注意保护空间内的数据安全", "security_passwd_mod_apply", AfterOpenAction.GO_ACTIVITY), + // 下面这条是安保专用的,非传统推送!!! + SECURITY_PASSWD_PARTICULAR_MOD_ACCEPT("账户安全提醒:", "安保专用的poll推送允许结果", "security_passwd_mod_accept", AfterOpenAction.GO_ACTIVITY), + SECURITY_PASSWD_MOD_SUCC("账户安全提醒:", "安全密码修改成功,请知晓! \n" + + "若非本人操作,请在【我的-设置-安全设置】里重置安全密码", "security_passwd_mod_succ", AfterOpenAction.GO_ACTIVITY), + SECURITY_PASSWD_RESET_APPLY("账户安全提醒:", "您正在终端 %s 上进行安全密码相关操作,请及时确认 \n" + + "请注意保护空间内的数据安全", "security_passwd_reset_apply", AfterOpenAction.GO_ACTIVITY), + // 下面这条是安保专用的,非传统推送!!! + SECURITY_PASSWD_PARTICULAR_RESET_ACCEPT("账户安全提醒:", "安保专用的poll推送允许结果", "security_passwd_reset_accept", AfterOpenAction.GO_ACTIVITY), + SECURITY_PASSWD_RESET_SUCC("账户安全提醒:", "安全密码重置成功,请知晓! \n" + + "若非本人操作,请在【我的-设置-安全设置】里重置安全密码", "security_passwd_reset_succ", AfterOpenAction.GO_ACTIVITY), + SECURITY_EMAIL_SET_SUCC("账户安全提醒:", """ + 您已成功绑定密保邮箱 %s!\s + 点击“查看详情”,查看更多信息 + 查看详情;""", "security_email_set_succ", AfterOpenAction.GO_ACTIVITY), + SECURITY_EMAIL_MOD_SUCC("账户安全提醒:", """ + 您已绑定新的密保邮箱 %s!\s + 点击“查看详情”,查看更多信息 + 查看详情;""", "security_email_mod_succ", AfterOpenAction.GO_ACTIVITY), + // 升级成功 + UPGRADE_SUCCESS("系统升级提醒", "傲空间系统已经升级到最新版本啦,点击查看 >>","upgrade_success", AfterOpenAction.GO_ACTIVITY), + // 下载成功 + UPGRADE_DOWNLOAD_SUCCESS("已下载未安装提醒", "傲空间 %s可用于您的设备,且已经可以安装,点击去安装>>","upgrade_download_success", AfterOpenAction.GO_ACTIVITY), + // 安装中 + UPGRADE_INSTALLING("正在安装系统", "正在安装系统更新,傲空间设备可能无法正常访问,升级完成后将自动恢复使用 >>","upgrade_installing", AfterOpenAction.GO_ACTIVITY), + // 盒子重启推送 + UPGRADE_RESTART("系统升级提醒","正在重启设备,请在重启完成后使用","upgrade_restart", AfterOpenAction.GO_ACTIVITY), + //备份进度和恢复进度 + BACKUP_PROGRESS("","", "backup_progress", AfterOpenAction.GO_ACTIVITY), + //恢复成功 + RESTORE_SUCCESS("数据恢复完成","您的空间数据已完成恢复操作,如有疑问,请联系管理员。", "restore_success", AfterOpenAction.GO_ACTIVITY), + + TODAY_IN_HIS("历史上的今天", "小傲帮您整理了今天的一些记忆,去重温下吧~","today_in_his", AfterOpenAction.GO_ACTIVITY), + MEMORIES("回忆", "小傲帮您整理了一些过往回忆,去重温下吧~","memories", AfterOpenAction.GO_ACTIVITY), + + + ABILITY_CHANGE("平台API发生变化", "平台API发生变化","ability_change", AfterOpenAction.GO_ACTIVITY), + + HISTORY_RECORD("文件状态发生变化", "文件状态发生变化","HISTORY_RECORD", AfterOpenAction.GO_CUSTOM), + + ; + + + private String title; + private String text; + + private final String type; + @Getter + private final AfterOpenAction afterOpenAction; + + NotificationEnum(String title, String text, String type, AfterOpenAction afterOpenAction) { + this.title = title; + this.text = text; + this.type = type; + this.afterOpenAction = afterOpenAction; + } + + public String getTitle() { + return title; + } + + public NotificationEnum setTitle(String title) { + this.title = title; + return this; + } + + public String getText() { + return text; + } + + public NotificationEnum setText(String text) { + this.text = text; + return this; + } + + public String getType() { + return type; + } + + public NotificationEnum setMemberJoin(String name){ + MEMBER_JOIN.text = name + " 接受了您的邀请并创建了傲空间。点击查看 >>"; + return MEMBER_JOIN; + } + + public NotificationEnum setLogin(String name){ + LOGIN.text = "您的空间已在设备:" + name +"登录,点击查看 >>"; + return LOGIN; + } + + public NotificationEnum setInnerLogin(String name){ + LOGIN.text = "您的空间已在 " + name +" 登陆"; + return LOGIN; + } + + public NotificationEnum setLoginConfirm(String name, String userdomain){ + LOGIN.text = name + " 申请登录您的傲空间(https://" + userdomain + "), 点击确认是否允许>>"; + return LOGIN; + } + + public NotificationEnum getSecurityPasswdModApply(String email){ + SECURITY_PASSWD_MOD_APPLY.text = "您正在终端 " + email + " 上进行安全密码相关操作,请及时确认 \n" + + "请注意保护空间内的数据安全"; + return SECURITY_PASSWD_MOD_APPLY; + } + + public NotificationEnum getSecurityPasswdResetApply(String email){ + SECURITY_PASSWD_RESET_APPLY.text = "您正在终端 " + email + " 上进行安全密码相关操作,请及时确认 \n" + + "请注意保护空间内的数据安全"; + return SECURITY_PASSWD_RESET_APPLY; + } + public NotificationEnum getSecurityEmailSetSucc(String email){ + SECURITY_EMAIL_SET_SUCC.text = "您已成功绑定密保邮箱 " + email+ "! \n" + + "点击“查看详情”,查看更多信息\n"; + return SECURITY_EMAIL_SET_SUCC; + } + public NotificationEnum getSecurityEmailModSucc(String email){ + SECURITY_EMAIL_MOD_SUCC.text = "您已绑定新的密保邮箱 " + email + "! \n" + + "点击“查看详情”,查看更多信息\n" + + "查看详情;"; + return SECURITY_EMAIL_MOD_SUCC; + } + public NotificationEnum getUpgradeDownloadSuccess(String version){ + UPGRADE_DOWNLOAD_SUCCESS.text = "傲空间 " + version + "可用于您的设备,且已经可以安装,点击去安装>>"; + return UPGRADE_DOWNLOAD_SUCCESS; + } + + + public static NotificationEnum of(String type){ + for (var notification: NotificationEnum.values()){ + if(notification.getType().equals(type)){ + return notification; + } + } + return null; + } + + public static List sendOnlyOnline(){ + var sendOnlyOnline = new ArrayList(); + sendOnlyOnline.add(NotificationEnum.ABILITY_CHANGE.type); + sendOnlyOnline.add(NotificationEnum.UPGRADE_RESTART.type); + + return sendOnlyOnline; + } + + public static List noNeedToSave(){ + var noNeedToSave = new ArrayList(); + noNeedToSave.add(NotificationEnum.ABILITY_CHANGE.type); + return noNeedToSave; + } + +} diff --git a/src/main/java/space/ao/services/push/dto/NotificationPageInfo.java b/src/main/java/space/ao/services/push/dto/NotificationPageInfo.java new file mode 100644 index 0000000..bb27d2c --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/NotificationPageInfo.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import java.util.List; + +import space.ao.services.push.entity.NotificationEntity; +import space.ao.services.support.model.PageInfo; + +public record NotificationPageInfo(List notification, PageInfo pageInfo) { + public static NotificationPageInfo of(List notification, PageInfo pageInfo) { + return new NotificationPageInfo(notification, pageInfo); + } +} diff --git a/src/main/java/space/ao/services/push/dto/NotificationPageQueryInfo.java b/src/main/java/space/ao/services/push/dto/NotificationPageQueryInfo.java new file mode 100644 index 0000000..52789ed --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/NotificationPageQueryInfo.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import java.util.List; +import java.util.Objects; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record NotificationPageQueryInfo(@Schema(defaultValue = "1") Integer page, + @Schema(defaultValue = "10") Integer pageSize, List optTypes) { + + @Override + public Integer page() { + if (Objects.isNull(page)) { + return 1; + } + return page; + } + + @Override + public Integer pageSize() { + if (Objects.isNull(pageSize)) { + return 10; + } + return pageSize; + } +} diff --git a/src/main/java/space/ao/services/push/dto/PushMessageExtra.java b/src/main/java/space/ao/services/push/dto/PushMessageExtra.java new file mode 100644 index 0000000..0afd3b7 --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/PushMessageExtra.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor(staticName = "of") +public class PushMessageExtra { + @NotBlank + public String messageId; + @NotBlank + public String subdomain; + @NotBlank + public String optType; +} diff --git a/src/main/java/space/ao/services/push/dto/PushNotificationResult.java b/src/main/java/space/ao/services/push/dto/PushNotificationResult.java new file mode 100644 index 0000000..361ed1e --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/PushNotificationResult.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import java.time.OffsetDateTime; +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import space.ao.services.push.entity.NotificationEntity; + +@Data +public class PushNotificationResult { + @NotNull + String messageId; + @NotNull + String optType; + @NotNull + String requestId; + @NotNull + Boolean read; + @NotNull + OffsetDateTime createAt; + @NotNull + String title; + @NotNull + String text; + @NotNull + String data; + + public static PushNotificationResult fromNotificationEntity(NotificationEntity notification){ + var pushNotificationResult = new PushNotificationResult(); + + pushNotificationResult.messageId = notification.getMessageId(); + pushNotificationResult.optType = notification.getOptType(); + pushNotificationResult.requestId = notification.getRequestId(); + pushNotificationResult.read = notification.getRead(); + pushNotificationResult.createAt = notification.getCreateAt(); + pushNotificationResult.data = notification.getData(); + + return pushNotificationResult; + } +} diff --git a/src/main/java/space/ao/services/push/dto/RedisArgsConstant.java b/src/main/java/space/ao/services/push/dto/RedisArgsConstant.java new file mode 100644 index 0000000..dda4473 --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/RedisArgsConstant.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +public class RedisArgsConstant { + public static final String ASTERISK = "*"; + public static final String USERID = "userId"; + public static final String CLIENTUUID = "clientUUID"; + public static final String REQUEST_ID = "requestId"; + public static final String OPTTYPE = "optType"; + public static final String TITLE = "title"; + public static final String TEXT = "text"; + public static final String DATA = "data"; + private RedisArgsConstant(){} +} diff --git a/src/main/java/space/ao/services/push/dto/TerminalInfo.java b/src/main/java/space/ao/services/push/dto/TerminalInfo.java new file mode 100644 index 0000000..f8d4761 --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/TerminalInfo.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto; + +import com.fasterxml.jackson.annotation.JsonCreator; + +public record TerminalInfo(String aoid, String uuid, String terminalMode, + String address, String terminalType) { + @JsonCreator + public TerminalInfo {} +} diff --git a/src/main/java/space/ao/services/push/dto/file/FilePopData.java b/src/main/java/space/ao/services/push/dto/file/FilePopData.java new file mode 100644 index 0000000..e456fd2 --- /dev/null +++ b/src/main/java/space/ao/services/push/dto/file/FilePopData.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.dto.file; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class FilePopData { + private String opType; + private List uuids; + + @JsonCreator + public FilePopData(@JsonProperty("operator_type") String opType, @JsonProperty("uuids") List uuids){ + this.opType = opType; + this.uuids = uuids; + } + +} diff --git a/src/main/java/space/ao/services/push/entity/NotificationEntity.java b/src/main/java/space/ao/services/push/entity/NotificationEntity.java new file mode 100644 index 0000000..743b22e --- /dev/null +++ b/src/main/java/space/ao/services/push/entity/NotificationEntity.java @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import java.time.OffsetDateTime; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotNull; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@EqualsAndHashCode(callSuper = true) +@Entity +@Getter +@Setter +@Table(name = "notification") +@Data +@NoArgsConstructor +@AllArgsConstructor +@ToString +public class NotificationEntity extends PanacheEntityBase { + @Id + @Column(name = "message_id") + @NotNull + String messageId; + @Column(name = "userid") + @NotNull + @JsonIgnore + Integer userid; + @Column(name = "client_uuid") + @NotNull + String clientUUID; + @Column(name = "opt_type") + @NotNull + String optType; + @Column(name = "request_id") + @NotNull + String requestId; + @Column(name = "data") + @NotNull + String data; + @Column(name = "read") + @NotNull + Boolean read; + @Column(name = "pushed") + Integer pushed; + @Column(name = "create_at") + @NotNull + private OffsetDateTime createAt; + public NotificationEntity(String messageId, Integer userid, String clientUUID, String optType, String requestId, String data){ + this.messageId = messageId; + this.userid = userid; + this.clientUUID = clientUUID; + this.optType = optType; + this.requestId = requestId; + this.data = data; + this.createAt = OffsetDateTime.now(); + this.read = false; + } +} diff --git a/src/main/java/space/ao/services/push/entity/RedisKey.java b/src/main/java/space/ao/services/push/entity/RedisKey.java new file mode 100644 index 0000000..0399313 --- /dev/null +++ b/src/main/java/space/ao/services/push/entity/RedisKey.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.entity; + +import lombok.AllArgsConstructor; + +@AllArgsConstructor +public enum RedisKey { + LFC("LFC-"), + + ; + final String key; +} diff --git a/src/main/java/space/ao/services/push/repository/NotificationRepository.java b/src/main/java/space/ao/services/push/repository/NotificationRepository.java new file mode 100644 index 0000000..00561c6 --- /dev/null +++ b/src/main/java/space/ao/services/push/repository/NotificationRepository.java @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.repository; + +import io.quarkus.hibernate.orm.panache.PanacheQuery; +import io.quarkus.hibernate.orm.panache.PanacheRepository; +import io.quarkus.panache.common.Page; +import java.util.List; +import java.util.Objects; +import jakarta.inject.Singleton; +import jakarta.transaction.Transactional; +import space.ao.services.push.dto.NotificationEnum; +import space.ao.services.push.entity.NotificationEntity; + +@Singleton +public class NotificationRepository implements PanacheRepository { + + @Transactional + public void add(NotificationEntity notificationEntity){ + NotificationEntity notification = find("messageId", notificationEntity.getMessageId()).firstResult(); + var isNeedSave = !NotificationEnum.noNeedToSave().contains(notificationEntity.getOptType()); + + if(notification == null && isNeedSave){ + notificationEntity.persist(); + } + } + public List getAllNotificationByClientUUIDAndUserid(String clientUUID, Integer userId, + int page, int pageSize, List optTypes){ + page--; + PanacheQuery notifications; + var sql = "clientUUID=?1 and userid =?2 order by createAt desc"; + notifications = find(sql, clientUUID, userId); + if (Objects.nonNull(optTypes) && !optTypes.isEmpty()){ + sql = "clientUUID=?1 and userid =?2 and optType in (?3) order by createAt desc"; + notifications = find(sql, clientUUID, userId, optTypes); + } + return notifications.page(Page.of(page, pageSize)).list(); + } + + public NotificationEntity getNotificationByMessageId(String messageId){ + return find("messageId", messageId).firstResult(); + } + + public long deleteByMessageId(String messageId){ + return delete("messageId=?1 ", messageId); + } + public long deleteByUserIdAndClientUUID(String userId, String clientUUID){ + return delete("userid=?1 and clientUUID=?2 ", Integer.valueOf(userId), clientUUID); + } + public long deleteByUserIdAndClientUUIDByMessageId(String userId, String clientUUID, List messageIds){ + return delete("userid=?1 and clientUUID=?2 and message_id in (?3) ", Integer.valueOf(userId), clientUUID, messageIds); + } + public int setReadStatus(String userId, String clientUUID, List messageIds, boolean readStatus){ + return update("set read=?1 where messageId in (?2) and userid=?3 and clientUUID=?4", readStatus, messageIds, + Integer.parseInt(userId), clientUUID); + } +} diff --git a/src/main/java/space/ao/services/push/rest/NotificationResource.java b/src/main/java/space/ao/services/push/rest/NotificationResource.java new file mode 100644 index 0000000..137ef17 --- /dev/null +++ b/src/main/java/space/ao/services/push/rest/NotificationResource.java @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.rest; + +import java.util.Objects; +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HeaderParam; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.push.entity.NotificationEntity; +import space.ao.services.push.repository.NotificationRepository; +import space.ao.services.push.services.NotificationService; +import space.ao.services.push.services.RedisService; +import space.ao.services.support.RestConfiguration; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.push.dto.Message; +import space.ao.services.push.dto.MessageIdInfo; +import space.ao.services.push.dto.NotificationPageInfo; +import space.ao.services.push.dto.NotificationPageQueryInfo; + +@Path("/v1/api/notification") +@Tag(name = "Space Gateway Notification Service", + description = "Provides Notification Service.") +public class NotificationResource { + @Inject + RedisService redisService; + @Inject + NotificationRepository notificationRepository; + + @Inject + NotificationService notificationService; + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "get notification.") + public ResponseBase get(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + @Valid @NotBlank @QueryParam("messageId") String messageId) { + return ResponseBase.ok(requestId, notificationRepository.getNotificationByMessageId(messageId)).build(); + } + + @POST + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "add notification.") + public String add(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid Message message) { + + return redisService.pushMessage(message); + } + + + @POST + @Path("/all") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "get all notification. page 页码,默认1 pageSize页码大小,默认10") + public ResponseBase getAll(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + @Valid @NotBlank @QueryParam("AccessToken-clientUUID") String clientUUID, + NotificationPageQueryInfo notificationPageQueryInfo) { + return ResponseBase.ok(requestId, notificationService.getNotification(clientUUID, Integer.valueOf(userid), + notificationPageQueryInfo.page(), notificationPageQueryInfo.pageSize(), notificationPageQueryInfo.optTypes())).build(); + } + + @POST + @Path("/all/delete") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "delete all notification.") + @Transactional + public ResponseBase deleteAll(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + @Valid @NotBlank @QueryParam("AccessToken-clientUUID") String clientUUID, + MessageIdInfo messageIdInfo) { + var messageIds = messageIdInfo.getMessageId(); + if(Objects.nonNull(messageIds) && !messageIds.isEmpty()){ + return ResponseBase.ok(requestId, notificationRepository.deleteByUserIdAndClientUUIDByMessageId(userid, clientUUID, messageIds)).build(); + } + return ResponseBase.ok(requestId, notificationRepository.deleteByUserIdAndClientUUID(userid, clientUUID)).build(); + } + + @DELETE + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "delete notification.") + @Transactional + public ResponseBase delete(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + @Valid @NotBlank @QueryParam("messageId") String messageId) { + return ResponseBase.ok(requestId, notificationRepository.deleteByMessageId(messageId)).build(); + } + + @POST + @Path("/set/read") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "set notification read status .") + @Transactional + public ResponseBase setRead(@Valid @NotBlank @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, @Valid @NotBlank @QueryParam("AccessToken-clientUUID") String clientUUID, + MessageIdInfo messageIdInfo) { + return ResponseBase.ok(requestId, notificationService.setRead(userid, clientUUID, messageIdInfo.getMessageId(), true)).build(); + } + + +} diff --git a/src/main/java/space/ao/services/push/rest/PollNotificationResource.java b/src/main/java/space/ao/services/push/rest/PollNotificationResource.java new file mode 100644 index 0000000..970915c --- /dev/null +++ b/src/main/java/space/ao/services/push/rest/PollNotificationResource.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.rest; + +import io.vertx.core.http.HttpServerRequest; +import io.vertx.core.http.HttpServerResponse; +import java.time.OffsetDateTime; +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HeaderParam; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.jboss.logging.Logger; +import space.ao.services.account.authorizedterminalinfo.service.AuthorizedTerminalService; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.push.services.NotificationService; +import space.ao.services.push.services.RedisService; +import space.ao.services.support.RestConfiguration; +import space.ao.services.support.StringUtils; +import space.ao.services.support.TokenUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.StatusResult; +import space.ao.services.support.security.SecurityUtils; + +@Tag(name = "Space Gateway Notification Service", + description = "Provides Notification Service.") +@Path("/v1/api/gateway/poll") +public class PollNotificationResource { + + @Inject + ApplicationProperties properties; + + @Inject + NotificationService notificationService; + + @Inject + SecurityUtils securityUtils; + @Inject + TokenUtils tokenUtils; + @Context + HttpServerResponse response; + @Context + HttpServerRequest request; + @Inject + AuthorizedTerminalService authorizedTerminalService; + static final Logger LOG = Logger.getLogger("app.log"); + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Logged + @Operation(description = "Try to poll the current Notification of server.") + public StatusResult poll(@Valid @HeaderParam(RestConfiguration.REQUEST_ID) String requestId, + @QueryParam("accessToken") String accessToken, @QueryParam("count")String count) { + if(StringUtils.isBlank(accessToken)){ + return StatusResult.of("ok", properties.version(),null, StatusResult.PlatformInfo.of( + properties.ssplatformUrl() + )); + } else { + var token = tokenUtils.checkAccessToken(requestId, accessToken); + var clientUUID = token.getClientUUID(); + + RedisService.setClientStatus(clientUUID, OffsetDateTime.now()); + authorizedTerminalService.updateAuthorizedTerminalValidTime(requestId, token.getUserId(), clientUUID); + //根据 response 获取 在线状态 + response.closeHandler(statusResponse->{ + RedisService.setClientStatus(clientUUID, OffsetDateTime.MIN); + LOG.infov("连接被关闭"); + }); + + var notification = notificationService.poll(clientUUID + token.getUserId(), token.getUserId(), StringUtils.isBlank(count)? 1 : Integer.parseInt(count)); + return StatusResult.of("ok", properties.version(), notification != null ? + securityUtils.encryptWithSecret(notification, token.getSharedSecret(), token.getSharedInitializationVector()): "",StatusResult.PlatformInfo.of( + properties.ssplatformUrl() + )); + } + } + +} diff --git a/src/main/java/space/ao/services/push/services/NotificationService.java b/src/main/java/space/ao/services/push/services/NotificationService.java new file mode 100644 index 0000000..8034196 --- /dev/null +++ b/src/main/java/space/ao/services/push/services/NotificationService.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.services; + +import java.time.Duration; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.jboss.logging.Logger; +import org.jose4j.json.JsonUtil; +import org.jose4j.lang.JoseException; +import space.ao.services.account.member.dto.MemberCreateInfo; +import space.ao.services.account.security.dto.ApplyPushNotificationRsp; +import space.ao.services.account.security.dto.SuccPushNotitificationRsp; +import space.ao.services.push.dto.*; +import space.ao.services.push.repository.NotificationRepository; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.PageInfo; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.push.entity.NotificationEntity; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.StringUtils; +import space.ao.services.support.redis.message.ReceiveMessage; +import space.ao.services.support.redis.message.RedisMessageService; + +@ApplicationScoped +public class NotificationService { + @Inject + ApplicationProperties properties; + + @Inject + OperationUtils utils; + @Inject + RedisMessageService redisMessageService; + @Inject + UserInfoRepository userInfoRepository; + @Inject + NotificationRepository notificationRepository; + static final Logger LOG = Logger.getLogger("push_message.log"); + public static final String PUSH_NOTIFICATION_PLATFORM_KEY = "push_notification_platform"; + + @Logged + public String poll(String key, String userId, int count) { + long millis = Duration.parse(properties.pushTimeout()).toMillis(); + var notification = redisMessageService.getMessage(properties.pushMqClientPrefix() + key, count, millis); + if(Objects.isNull(notification) || notification.isEmpty()){ + return null; + } + return notificationConsumer(notification,properties.pushMqClientPrefix() + key, userId).toString(); + } + + @Logged + public List notificationConsumer(List receiveMessages, String key, String userId){ + var result = new ArrayList(); + + for (var receiveMessage: receiveMessages){ + var notificationEntity = fromReceiveMessage(receiveMessage); + var pushNotificationResult = PushNotificationResult.fromNotificationEntity(notificationEntity); + + var notificationEnum = generateNotificationEnum(notificationEntity, false); + + pushNotificationResult.setTitle(notificationEnum.getTitle()); + pushNotificationResult.setText(notificationEnum.getText()); + if(receiveMessage.userId().equals(userId)){ + notificationEntity.setPushed(1); + if (redisMessageService.del(key, receiveMessage.messageId())){ + notificationRepository.add(notificationEntity); + } + result.add(utils.objectToJson(pushNotificationResult)); + } else { + redisMessageService.del(key, receiveMessage.messageId()); + } + } + return result; + } + + public NotificationPageInfo getNotification(String clientUUID, Integer userId, + int page, int pageSize, List optTypes) { + var sql = "clientUUID=?1 and userid =?2"; + var total = notificationRepository.find(sql, clientUUID, userId).count(); + total = total / pageSize + (total % pageSize == 0 ? 0 : 1); + return NotificationPageInfo.of(notificationRepository.getAllNotificationByClientUUIDAndUserid(clientUUID, userId, + page, pageSize, optTypes), PageInfo.of(total, page, pageSize)); + } + + public int setRead(String userId, String clientUUID, List messageId, boolean readStatus) { + return notificationRepository.setReadStatus(userId, clientUUID, messageId, readStatus); + } + + + @Logged + public NotificationEnum generateNotificationEnum(NotificationEntity notification, boolean isPlatform){ + NotificationEnum notificationEnum = NotificationEnum.of(notification.getOptType()); + + if(Objects.isNull(notificationEnum) || StringUtils.isBlank(notification.getClientUUID())){ + LOG.errorv("Invalid enumeration type: {0}, Invalid ClientUUID: {0}", notification.getOptType(), notification.getClientUUID()); + redisMessageService.del(PUSH_NOTIFICATION_PLATFORM_KEY, notification.getMessageId()); + redisMessageService.del(properties.pushMqClientPrefix() + notification.getClientUUID(), notification.getMessageId()); + return null; + } + + switch (notificationEnum){ + case LOGIN: + var terminalInfo = utils.jsonToObject(notification.getData(), TerminalInfo.class); + notificationEnum = notificationEnum.setInnerLogin(terminalInfo.terminalMode()); + if(isPlatform){ + notificationEnum = notificationEnum.setLogin(terminalInfo.terminalMode()); + } + break; + case MEMBER_JOIN: + var name = utils.jsonToObject(notification.getData(), MemberCreateInfo.class).nickName(); + notificationEnum = notificationEnum.setMemberJoin(name); + break; + case LOGIN_CONFIRM: + name = utils.jsonToObject(notification.getData(), TerminalInfo.class).terminalMode(); + var userEntity = userInfoRepository.findByUserId(notification.getUserid().longValue()); + notificationEnum = notificationEnum.setLoginConfirm(name, userEntity.getUserDomain()); + break; + case SECURITY_PASSWD_MOD_APPLY: + name = utils.jsonToObject(notification.getData(), ApplyPushNotificationRsp.class).getAuthDeviceInfo(); + notificationEnum = notificationEnum.getSecurityPasswdModApply(name); + break; + case SECURITY_PASSWD_RESET_APPLY: + name = utils.jsonToObject(notification.getData(), ApplyPushNotificationRsp.class).getAuthDeviceInfo(); + notificationEnum = notificationEnum.getSecurityPasswdResetApply(name); + break; + case SECURITY_EMAIL_SET_SUCC: + var mail = utils.jsonToObject(notification.getData(), SuccPushNotitificationRsp.class).getEmail(); + notificationEnum = notificationEnum.getSecurityEmailSetSucc(mail); + break; + case SECURITY_EMAIL_MOD_SUCC: + mail = utils.jsonToObject(notification.getData(), SuccPushNotitificationRsp.class).getEmail(); + notificationEnum = notificationEnum.getSecurityEmailModSucc(mail); + break; + case UPGRADE_DOWNLOAD_SUCCESS: + try { + var version = JsonUtil.parseJson(notification.getData()); + notificationEnum = notificationEnum.getUpgradeDownloadSuccess((String) version.get("version")); + } catch (JoseException e) { + LOG.errorv("Invalid data: {0}", notification.getData()); + } + break; + default: + } + return notificationEnum; + } + + public NotificationEntity fromReceiveMessage(ReceiveMessage receiveMessage) { + return new NotificationEntity( + receiveMessage.messageId(), + Integer.parseInt(receiveMessage.userId()), + receiveMessage.clientUUID(), + receiveMessage.optType(), + receiveMessage.requestId(), + receiveMessage.data()); + } +} diff --git a/src/main/java/space/ao/services/push/services/RedisService.java b/src/main/java/space/ao/services/push/services/RedisService.java new file mode 100644 index 0000000..45adbb0 --- /dev/null +++ b/src/main/java/space/ao/services/push/services/RedisService.java @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.push.services; + + +import io.quarkus.logging.Log; +import io.quarkus.runtime.Startup; +import lombok.Getter; +import org.jboss.logging.Logger; +import space.ao.services.account.authorizedterminalinfo.entity.TerminalType; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.PlatformUtils; +import space.ao.services.support.redis.RedisCommonStringService; +import space.ao.services.support.redis.message.SendMessage; +import space.ao.services.account.authorizedterminalinfo.repository.AuthorizedTerminalRepository; +import space.ao.services.account.personalinfo.entity.UserEntity.Role; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.push.dto.Message; +import space.ao.services.push.dto.NotificationEnum; +import space.ao.services.push.entity.NotificationEntity; + +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import space.ao.services.support.redis.message.ReceiveMessage; +import space.ao.services.support.redis.message.RedisMessageService; + +import java.time.Duration; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +@ApplicationScoped +@Startup +public class RedisService { + + @Inject + ApplicationProperties properties; + + @Inject + RedisMessageService redisMessageService; + @Inject + AuthorizedTerminalRepository authorizedTerminalRepository; + + @Inject + UserInfoRepository userInfoRepository; + @Inject + RedisCommonStringService redisCommonStringService; + @Inject + PlatformUtils platformUtils; + static final Logger LOG = Logger.getLogger("push_message.log"); + @Getter + private static final ConcurrentMap clientUUIDCacheMap = new ConcurrentHashMap<>(); // clientUUID , status 请求时间 缓存 + + /** + * + * @param flag flag = clientUUID + userId + * @param offsetDateTime time + */ + public static void setClientStatus(String flag, OffsetDateTime offsetDateTime){ + clientUUIDCacheMap.put(flag, offsetDateTime); + } + + + @PostConstruct + @SuppressWarnings("unused") // 启动程序时开启启动队列消费 + public void pushService() { + new Thread(() -> blockingSubscribeMain(properties.pushMqMain())).start(); + } + + @Logged + public String pushMessage(Message message){ + return redisMessageService.push(properties.pushMqMain(), + new SendMessage(message.userId(), message.clientUUID(), message.optType(), message.requestId(), message.data())); + } + + @Logged + public void sendNotification(NotificationEntity notification) { + var notificationEnum = NotificationEnum.of(notification.getOptType()); + Log.infov("notification type is " + notification.getOptType()); + if(Objects.isNull(notificationEnum)){ + LOG.error("Type is invalid"); + return; + } + switch (notificationEnum) { + case UPGRADE_INSTALLING -> sendAllTerminalExcludeAdmin(notification); + case ABILITY_CHANGE -> sendAllTerminal(notification); + case TODAY_IN_HIS, MEMORIES -> + sendAllTerminalByUserId(notification); + default -> sendClientUUID(notification); + } + } + + @Logged + public void sendClientUUID(NotificationEntity notification) { + + final String PUSH_TIMEOUT = properties.pushTimeout(); + final String PUSH_MQ_CLIENT_PREFIX = properties.pushMqClientPrefix(); + + var key = notification.getClientUUID() + notification.getUserid(); + var now = OffsetDateTime.now(); + + boolean isPlatformSupportMessagePush = platformUtils.isPlatformSupportPush(); + + boolean shouldSendOnlyOnline = sendOnlyOnline(notification); + + // 判断是否在线 + var clientStatus = clientUUIDCacheMap.get(key); + var isClientOnline = Objects.nonNull(clientStatus) && clientStatus.isAfter(now.minusSeconds(Duration.parse(PUSH_TIMEOUT).getSeconds() + 5)); + + LOG.infov("client key {0} 对应的消息队列状态: {1}, isPlatformSupportMessagePush: {2}, shouldSendOnlyOnline: {3}, isClientOnline: {4}", + key, clientStatus, isPlatformSupportMessagePush, shouldSendOnlyOnline, isClientOnline); + + redisMessageService.push(PUSH_MQ_CLIENT_PREFIX + key, new SendMessage(notification.getUserid() + .toString(), notification.getClientUUID(), notification.getOptType(), notification.getRequestId(), notification.getData())); + + + } + + public List getNotificationEntityByReceiveMessage(List receiveMessages) { + List result = new ArrayList<>(); + if (Objects.isNull(receiveMessages)) { + return result; + } + + for (var receiveMessage: receiveMessages){ + var notificationEntity = new NotificationEntity(receiveMessage.messageId(), + Integer.parseInt(receiveMessage.userId()), receiveMessage.clientUUID(), + receiveMessage.optType(), receiveMessage.requestId(), receiveMessage.data()); + + result.add(notificationEntity); + } + + return result; + } + + /** + * 阻塞式异步消费, 没有消息是阻塞,收到消息发送到对应客户端队列 然后开启下一次阻塞式读 + * @param key 对应客户端队列 client prefix + clientUUID + */ + @Logged + public void blockingSubscribeMain(String key) { + while (Objects.equals(key, properties.pushMqMain())){ + var notifications = getNotificationEntity(key, null, 60000L); + LOG.infov("get notifications from redis, notifications is: " + notifications); + for (var notification :notifications) { + sendNotification(notification); + redisMessageService.del(key, notification.getMessageId()); + } + } + } + + public List getNotificationEntity(String key, Integer count, Long milliseconds) { + var response = redisMessageService.getMessage(key, count, milliseconds); + return getNotificationEntityByReceiveMessage(response); + } + + public Integer increaseFailedLoginCounter(String errorCounterKey, String userId, String clientUUID){ + var key = errorCounterKey + userId + clientUUID; + int count; + var x = redisCommonStringService.get(key); + if(Objects.isNull(x)){ + redisCommonStringService.set(key, "1"); + count = 1; + } else { + count = (int) redisCommonStringService.incr(key); + } + return count; + } + + public void resetFailedLoginCounter(String errorCounterKey, String userId, String clientUUID){ + var key = errorCounterKey + userId + clientUUID; + redisCommonStringService.del(key); + } + + public boolean sendOnlyOnline(NotificationEntity notificationEntity){ + var terminal = authorizedTerminalRepository.findByUseridAndUuid(notificationEntity.getUserid().longValue(), notificationEntity.getClientUUID()); + var isWeb = terminal != null && TerminalType.web.name().equalsIgnoreCase(terminal.getTerminalType()); + return isWeb || NotificationEnum.sendOnlyOnline().contains(notificationEntity.getOptType()); + } + + @Logged + public void sendAllTerminalExcludeAdmin(NotificationEntity notificationEntity) { + var authors = authorizedTerminalRepository.findAllTerminal(); + var adminBinder = userInfoRepository.findByRole(Role.ADMINISTRATOR); + for (var client: authors){ + if(!client.getUuid().equals(adminBinder.getClientUUID())){ + notificationEntity.setUserid(client.getUserid().intValue()); + notificationEntity.setClientUUID(client.getUuid()); + sendClientUUID(notificationEntity); + } + } + } + + @Logged + public void sendAllTerminal(NotificationEntity notificationEntity) { + if(NotificationEnum.ABILITY_CHANGE.getType().equals(notificationEntity.getOptType())){ + platformUtils.queryPlatformAbility(); + } + var authors = authorizedTerminalRepository.findAllTerminal(); + for (var client: authors){ + notificationEntity.setUserid(client.getUserid().intValue()); + notificationEntity.setClientUUID(client.getUuid()); + sendClientUUID(notificationEntity); + } + } + + @Logged + public void sendAllTerminalByUserId(NotificationEntity notificationEntity) { + var authors = authorizedTerminalRepository.findByUserid(Long.valueOf(notificationEntity.getUserid())); + for (var client: authors){ + notificationEntity.setUserid(client.getUserid().intValue()); + notificationEntity.setClientUUID(client.getUuid()); + sendClientUUID(notificationEntity); + } + } + + @Logged + public void del(String userid, String clientUUID){ + var key = properties.pushMqClientPrefix() + clientUUID + userid; + redisCommonStringService.del(key); + } +} diff --git a/src/main/java/space/ao/services/support/ClassUtils.java b/src/main/java/space/ao/services/support/ClassUtils.java new file mode 100644 index 0000000..db1a354 --- /dev/null +++ b/src/main/java/space/ao/services/support/ClassUtils.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support; + +import javax.annotation.Nullable; + +public class ClassUtils { + + /** + * Return the default ClassLoader to use: typically the thread context + * ClassLoader, if available; the ClassLoader that loaded the ClassUtils + * class will be used as fallback. + *

Call this method if you intend to use the thread context ClassLoader + * in a scenario where you clearly prefer a non-null ClassLoader reference: + * for example, for class path resource loading (but not necessarily for + * {@code Class.forName}, which accepts a {@code null} ClassLoader + * reference as well). + * @return the default ClassLoader (only {@code null} if even the system + * ClassLoader isn't accessible) + * @see Thread#getContextClassLoader() + * @see ClassLoader#getSystemClassLoader() + */ + @Nullable + public static ClassLoader getDefaultClassLoader() { + ClassLoader cl = null; + try { + cl = Thread.currentThread().getContextClassLoader(); + } + catch (Throwable ex) { + // Cannot access thread context ClassLoader - falling back... + } + if (cl == null) { + // No thread context class loader -> use class loader of this class. + cl = ClassUtils.class.getClassLoader(); + if (cl == null) { + // getClassLoader() returning null indicates the bootstrap ClassLoader + try { + cl = ClassLoader.getSystemClassLoader(); + } + catch (Throwable ex) { + // Cannot access system ClassLoader - oh well, maybe the caller can live with null... + } + } + } + return cl; + } +} diff --git a/src/main/java/space/ao/services/support/FileUtils.java b/src/main/java/space/ao/services/support/FileUtils.java new file mode 100644 index 0000000..3f1d8cf --- /dev/null +++ b/src/main/java/space/ao/services/support/FileUtils.java @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support; + +import jakarta.inject.Singleton; +import lombok.SneakyThrows; +import org.jboss.logging.Logger; + +import com.google.common.io.ByteStreams; + +import space.ao.services.account.support.service.ServiceError; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; +import java.util.zip.ZipOutputStream; + +@Singleton +public class FileUtils { + + private static final Logger LOG = Logger.getLogger("app.log"); + + private FileUtils() { + } + + @SneakyThrows + public static File zipFiles(File[] srcFiles, String zipFileName) { + var tempPath = Files.createTempDirectory("temp"); + + // 创建压缩后的文件对象 + var zipFile = new File(tempPath.toFile(), zipFileName + ".zip"); + try(FileOutputStream fileOutputStream = new FileOutputStream(zipFile); + ZipOutputStream zipOutputStream = new ZipOutputStream(fileOutputStream)){ + // 创建 FileInputStream 对象 + + // 创建 ZipEntry 对象 + ZipEntry zipEntry; + // 遍历源文件数组 + for (File srcFile : srcFiles) { + // 将源文件数组中的当前文件读入 FileInputStream 流中 + try(FileInputStream fileInputStream = new FileInputStream(srcFile)){ + // 实例化 ZipEntry 对象,源文件数组中的当前文件 + zipEntry = new ZipEntry(srcFile.getName()); + zipOutputStream.putNextEntry(zipEntry); + // 该变量记录每次真正读的字节个数 + int len; + // 定义每次读取的字节数组 + byte[] buffer = new byte[1024]; + while ((len = fileInputStream.read(buffer)) > 0) { + zipOutputStream.write(buffer, 0, len); + } + } + } + + } + return zipFile; + } + + @SneakyThrows + public static String unzipAppletFile(String filePath) { + var path = Files.createTempDirectory("temp"); + try (ZipInputStream zip = new ZipInputStream(new FileInputStream(filePath))) { + ZipEntry zipEntry; + while ((zipEntry = zip.getNextEntry()) != null) { + String fileNameZip = zipEntry.getName(); + + var file = new File(path.toFile(), fileNameZip); + if (fileNameZip.endsWith("/")) { + var createResult = file.mkdirs(); + if(!createResult){ + LOG.error("failed to create folder while extracting the file"); + } + } else { + try (BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file))) { + byte[] byteS = new byte[1024]; + int num; + while ((num = zip.read(byteS, 0, byteS.length)) > 0) { + outputStream.write(byteS, 0, num); + } + } + } + } + } + return path.toString(); + } + + + public static void getFileFromInputStream(InputStream inputStream, File file){ + if(file.exists()){ + OperationUtils.deleteDirectoryStream(Paths.get(file.getPath())); + } + try(inputStream;FileOutputStream outputStream = new FileOutputStream(file)) { + byte[] b = new byte[2048]; + int bLength; + while((bLength = inputStream.read(b)) != -1) { + outputStream.write(b, 0, bLength); + } + } catch (Exception e) { + LOG.errorv("save file to local error: {0}", e.getMessage()); + } + } + + @SneakyThrows + public static void writeToFile(File file, String info){ + try(var fos = new FileOutputStream(file)) { + fos.write(info.getBytes()); + } + } + + public static File readDefaultFile(String path){ + var dir = path.substring(0, path.lastIndexOf("/")); + var fileName = path.substring(path.lastIndexOf("/") + 1); + + var tmpDir = Paths.get(System.getProperties().getProperty("java.io.tmpdir"), dir); + if (Files.notExists(tmpDir)) { + try { + Files.createDirectories(tmpDir); + } catch (IOException e) { + LOG.errorv("failed to create directory: {0}", e.getMessage()); + } + } + + File file = new File(tmpDir.toFile(), fileName); + saveFileToLocal(path, file); + return file; + } + + /** + * 保存默文件到盒子 + */ + @SneakyThrows + public static void saveFileToLocal(String resourceLocation, File file){ + if(!file.exists()){ + try (var inputStream = FileUtils.class.getClassLoader().getResourceAsStream(resourceLocation)) { + try (OutputStream stream = new FileOutputStream(file)) { + if (inputStream == null) { + LOG.errorv("failed to get file from resource: {0}", file.getPath()); + throw new NullPointerException(); + } + ByteStreams.copy(inputStream, stream); + } catch (IOException e) { + LOG.errorv("failed to copy file from resource to local: {0}", e.getMessage()); + } + } + } + } + + /** + * 文件不存在则新建 + */ + @SneakyThrows + public static void createFileIfNotExists(String imagePath){ + File file = new File(imagePath); + if(!file.exists()) { + var parentFile = file.getParentFile(); + if(!parentFile.exists()){ + boolean i = parentFile.mkdirs(); + if (i) { + LOG.info("文件夹创建成功!"); + } else { + LOG.error("文件夹创建失败!"); + } + } + LOG.info("create:" + imagePath); + if(!file.createNewFile()){ + LOG.error(ServiceError.FILE_INIT_FAILED); + } + } + } +} diff --git a/src/main/java/space/ao/services/support/MyObjectMapperCustomizer.java b/src/main/java/space/ao/services/support/MyObjectMapperCustomizer.java new file mode 100644 index 0000000..02e88f8 --- /dev/null +++ b/src/main/java/space/ao/services/support/MyObjectMapperCustomizer.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.quarkus.jackson.ObjectMapperCustomizer; + +import jakarta.inject.Singleton; + +@Singleton +public class MyObjectMapperCustomizer implements ObjectMapperCustomizer { + + @Override + public void customize(ObjectMapper objectMapper) { + // To suppress serializing properties with null values + objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + // To make all fields visible to serialize + objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY); + } +} diff --git a/src/main/java/space/ao/services/support/OperationUtils.java b/src/main/java/space/ao/services/support/OperationUtils.java new file mode 100644 index 0000000..7e4733e --- /dev/null +++ b/src/main/java/space/ao/services/support/OperationUtils.java @@ -0,0 +1,447 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.io.ByteStreams; +import com.google.common.io.CharStreams; +import java.lang.reflect.Method; +import java.math.BigInteger; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.X509EncodedKeySpec; +import java.util.*; +import java.util.stream.Stream; +import lombok.Getter; +import lombok.SneakyThrows; +import org.apache.commons.codec.binary.Hex; +import org.jboss.logging.Logger; +import org.jose4j.json.JsonUtil; +import org.jose4j.lang.JoseException; +import org.lionsoul.ip2region.DataBlock; +import org.lionsoul.ip2region.DbConfig; +import org.lionsoul.ip2region.DbSearcher; +import org.lionsoul.ip2region.Util; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.model.OfficialPlatform; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import jakarta.annotation.PostConstruct; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.time.Duration; + +@Singleton +public class OperationUtils { + + private static final Logger LOG = Logger.getLogger("app.log"); + + private static Random random; + @Inject + ObjectMapper objectMapper; + + @Inject + ApplicationProperties properties; + + @Getter + public PublicKey clientPublicKey; + + @Getter + public Map sharedInfo; + + private static Boolean enableInternetAccess; + + @PostConstruct + public void init() throws IOException, GeneralSecurityException, JoseException { + LOG.infov("utils start init"); + try { + try (Reader reader = getFileStreamReader(properties.sharedInfoFile())) { + sharedInfo = JsonUtil.parseJson(CharStreams.toString(reader)); + LOG.infov("read shared info completed, shared info:{0}", sharedInfo); + } + loadInternetServiceConfig("utils start init"); + } catch (Exception e) { + LOG.error("OperationUtils init failed", e); + } + LOG.infov("utils init completed"); + } + + public void loadInternetServiceConfig(String requestId) { + synchronized (OperationUtils.class){ + try (Reader reader = getFileStreamReader(properties.internetServiceConfig())) { + var internetServiceConfig = JsonUtil.parseJson(CharStreams.toString(reader)); + enableInternetAccess = (Boolean) internetServiceConfig.get("enableInternetAccess"); + LOG.infov("load internet service config completed, requestId:{0}, enableInternetAccess:{1}", requestId, enableInternetAccess); + } catch (Exception e) { + enableInternetAccess = Objects.isNull(enableInternetAccess) || enableInternetAccess; + LOG.errorv("load internet service config failed, requestId:{0}, error: {1}", requestId, getErrorInfoFromException(e)); + } + } + } + + public String getBoxVersion(){ + try (Reader reader = getFileStreamReader(properties.sharedInfoFile())) { + sharedInfo = JsonUtil.parseJson(CharStreams.toString(reader)); + LOG.infov("read shared info completed, shared info:{0}", sharedInfo); + } catch (IOException | JoseException e) { + throw new RuntimeException(e); + } + var boxVersion = String.valueOf(sharedInfo.get("boxVersion")); + if(StringUtils.isBlank(boxVersion)){ + boxVersion = properties.boxVersion(); + } + return boxVersion; + } + public static Random getRandom() { + if (random == null) { + random = new SecureRandom(); + } + return random; + } + + public Reader getFileStreamReader(String resourceLocation) { + try { + final File file = ResourceUtils.getFile(resourceLocation); + return new BufferedReader( + new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8)); + } catch (Exception fallback) { + InputStream in = getClass().getResourceAsStream(resourceLocation); + return new BufferedReader( + new InputStreamReader(Objects.requireNonNull(in), StandardCharsets.UTF_8)); + } + } + + public RSAPublicKey getRSAPublicKey(Reader reader) throws GeneralSecurityException, IOException { + final String key = CharStreams.toString(reader); + + final String pem = key.replaceAll("[\\n\\r]", "") + .replace("-----BEGIN PUBLIC KEY-----", "") + .replace("-----END PUBLIC KEY-----", ""); + + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(pem)); + return (RSAPublicKey) keyFactory.generatePublic(keySpec); + } + + @SneakyThrows + public String objectToJson(Object object) { + return objectMapper.writeValueAsString(object); + } + + @SneakyThrows + public T jsonToObject(String json, Class clz) { + return objectMapper.readValue(json, clz); + } + + @SneakyThrows + public T mapToObject(Map map, Class clz) { + var json = objectMapper.writeValueAsString(map); + return objectMapper.readValue(json, clz); + } + + @SneakyThrows + public T jsonToObject(String json, TypeReference valueTypeRef) { + return objectMapper.readValue(json, valueTypeRef); + } + + @SneakyThrows + public Map objectToMap(Object object) { + var json = objectMapper.writeValueAsString(object); + return objectMapper.>readValue(json, new TypeReference<>() {}); + } + + @SneakyThrows + public Map stringToMap(String json) { + return objectMapper.>readValue(json, new TypeReference<>() {}); + } + @SneakyThrows + public T objectToResponseBaseResult(Object object, Class clz) { + var json = objectMapper.writeValueAsString(object); + return objectMapper.readValue(json, clz); + } + + public String unifiedRandomCharters(int length) { + int startChar = '0'; + int endChar = 'z'; + return getRandom().ints(startChar, endChar + 1) + .filter(i -> (i <= 57 || i >= 65) && (i <= 90 || i >= 97)) + .limit(length) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + } + + public String unifiedRandomHexCharters(int length) { + int startChar = '0'; + int endChar = 'f'; + return getRandom().ints(startChar, endChar + 1) + .filter(i -> (i <= 57 || i >97) ) + .limit(length) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + } + + public String createRandomType4UUID() { + return UUID.randomUUID().toString(); + } + + public String createRandomNumbers(int length) { + int startChar = '0'; + int endChar = '9'; + + return getRandom().ints(startChar, endChar + 1) + .limit(length) + .collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append) + .toString(); + } + + public byte[] createRandomBytes(int length) { + byte[] bytes = new byte[length]; + getRandom().nextBytes(bytes); + return bytes; + } + + + /** + * 利用Apache的工具类实现SHA-256加密 + * 所需jar包下載 ... + * @param str 加密前的报文 + */ + @SneakyThrows + public String string2SHA256(String str){ + MessageDigest messageDigest; + var encodeStr = ""; + messageDigest = MessageDigest.getInstance("SHA-256"); + byte[] hash = messageDigest.digest(str.getBytes(StandardCharsets.UTF_8)); + encodeStr = Hex.encodeHexString(hash); + + return encodeStr; + } + + @SneakyThrows + public String encryptToMD5(String str) { + var md5 = MessageDigest.getInstance("md5"); + var digest = md5.digest(str.getBytes(StandardCharsets.UTF_8)); + return String.format("%032x", new BigInteger(1, digest)); + } + + public boolean delAllFile(String path){ + File file = new File(path); + if(!file.exists()) {return true;} + if(!file.isDirectory()) {return false;} + String[] fileLists = file.list(); + if(fileLists == null){ + return true; + } + for (String s : fileLists){ + var temp = new File(s); + if(temp.isFile()) { return temp.delete();} + } + return file.delete(); + } + + public void deleteFileDir(String path) { + try (Stream walk = Files.walk(Paths.get(path))) { + walk.sorted(Comparator.reverseOrder()) + .forEach(OperationUtils::deleteDirectoryStream); + } catch (Exception e) { + LOG.errorv("resources delete failed! , {0}", e); + } + } + + public static void deleteDirectoryStream(Path path) { + try { + Files.delete(path); + } catch (IOException e) { + LOG.errorv("无法删除的路径 {0}\n{1}", path, e); + } + } + + /** + * 向文件写信息 + */ + public void writeToFile(File file, Map mapInfo){ + try(var fos = new FileOutputStream(file)) { + fos.write(objectToJson(mapInfo).getBytes()); + } + catch (Exception ie){ + LOG.error("write admin into file failed :" + mapInfo); + } + } + + /** + * 读取文件信息 + */ + public Map readFromFile(File file) { + String line; + StringBuilder buff = new StringBuilder(); + try(var reader = new BufferedReader(new FileReader(file))){ + while ((line = reader.readLine()) != null){ + buff.append(line); + } + } catch (IOException e) { + LOG.error(e); + } + HashMap fileInfoMap; + try { + fileInfoMap = objectMapper.readValue(buff.toString(), new TypeReference<>() {}); + } catch (JsonProcessingException e) { + throw new ServiceOperationException(ServiceError.UNKNOWN); + } + return fileInfoMap; + } + + /** + * 根据IP地址获取城市 + * @param ip ip + * @return 城市 + */ + public String getCityInfo(String ip) { + //db + String dbPath = Objects.requireNonNull( + OperationUtils.class.getResource(properties.ip2regionLocation())).getPath(); + var file = new File(dbPath); + + if (!file.exists()) { + LOG.info("地址库文件不存在,进行其他处理"); + + String tmpDir = System.getProperties().getProperty("java.io.tmpdir"); + dbPath = tmpDir + File.separator + "ip2region.db"; + LOG.infov("临时文件路径:{0}", dbPath); + + file = new File(dbPath); + if (!file.exists() || (System.currentTimeMillis() - file.lastModified() > 86400000L)) { + LOG.info("文件不存在或者文件存在时间超过1天进入..."); + try (var inputStream = getClass().getResourceAsStream(properties.ip2regionLocation())) { + if(inputStream == null) { + return null; + } + try (OutputStream stream = new FileOutputStream(file)){ + ByteStreams.copy(inputStream, stream); + } catch (IOException ioe) { + LOG.error(ioe); + } + } catch (IOException ioe) { + LOG.error(ioe); + } + } + } + + //查询算法 + //B-tree + //DbSearcher.BINARY_ALGORITHM //Binary + //DbSearcher.MEMORY_ALGORITYM //Memory + try { + var config = new DbConfig(); + var searcher = new DbSearcher(config, file.getPath()); + Method method; + method = searcher.getClass().getMethod("btreeSearch", String.class); + DataBlock dataBlock; + if (!Util.isIpAddress(ip)) { + LOG.error("Error: Invalid ip address"); + return null; + } + dataBlock = (DataBlock) method.invoke(searcher, ip); + LOG.infov("result : {0}", dataBlock.getRegion()); + return dataBlock.getRegion(); + } catch (Exception e) { + LOG.error(e); + + } + return null; + } + + public long get100YearSeconds(){ + return Duration.ZERO.plusDays(36500).toSeconds(); + } + + public String getErrorInfoFromException(Exception e) { + try { + var sw = new StringWriter(); + var pw = new PrintWriter(sw); + e.printStackTrace(pw); + return "\r\n" + sw + "\r\n"; + } catch (Exception e2) { + return "bad getErrorInfoFromException"; + } + } + + public Boolean createFolder(String path) { + File fileFolder = new File(path); + //创建存储zip包路径 + if(!fileFolder.exists()){ + var createDir = fileFolder.mkdirs(); + if(!createDir){ + LOG.error("failed to create folder"); + return false; + } + } + return true; + } + + public String inputStreamToString(InputStream inputStream) { + try { + return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + } catch (IOException e) { + throw new ServiceOperationException(ServiceError.UNKNOWN); + } + } + public boolean isLocalAddress(String ipAddress) { + InetAddress addr; + try { + addr = InetAddress.getByName(ipAddress); + } catch (UnknownHostException e) { + LOG.errorv("unknown host {0}", ipAddress); + return false; + } + if (addr.isAnyLocalAddress() || addr.isLoopbackAddress()) { + return true; + } + String name = addr.getHostName(); + if (name.equals(addr.getHostAddress()) && !name.equals("")) { + return true; + } + return addr.isSiteLocalAddress(); + } + + public String getUserDomainSuffix() { + var platformInfo = OfficialPlatform.getOfficialPlatformByPlatformUrl(properties.ssplatformUrl()); + String userDomainSuffix; + if(Objects.nonNull(platformInfo)){ + userDomainSuffix = platformInfo.getUserDomain(); + } else { + userDomainSuffix = properties.ssplatformUserDomainSuffix(); + } + return userDomainSuffix; + } + + public Boolean getEnableInternetAccess(){ + if(Objects.isNull(enableInternetAccess)){ + loadInternetServiceConfig("enableInternetAccess"); + } + return enableInternetAccess; + } +} diff --git a/src/main/java/space/ao/services/support/ResourceUtils.java b/src/main/java/space/ao/services/support/ResourceUtils.java new file mode 100644 index 0000000..35e586f --- /dev/null +++ b/src/main/java/space/ao/services/support/ResourceUtils.java @@ -0,0 +1,402 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright 2002-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support; + +import java.io.File; +import java.io.FileNotFoundException; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLConnection; +import java.util.Objects; + +import javax.annotation.Nullable; + +/** + * Utility methods for resolving resource locations to files in the + * file system. Mainly for internal use within the framework. + * + *

Consider using Spring's Resource abstraction in the core package + * for handling all kinds of file resources in a uniform manner. + * + * @author Juergen Hoeller + * @since 1.1.5 + */ +public abstract class ResourceUtils { + + /** Pseudo URL prefix for loading from the class path: "classpath:". */ + public static final String CLASSPATH_URL_PREFIX = "classpath:"; + + /** URL prefix for loading from the file system: "file:". */ + public static final String FILE_URL_PREFIX = "file:"; + + /** URL prefix for loading from a jar file: "jar:". */ + public static final String JAR_URL_PREFIX = "jar:"; + + /** URL prefix for loading from a war file on Tomcat: "war:". */ + public static final String WAR_URL_PREFIX = "war:"; + + /** URL protocol for a file in the file system: "file". */ + public static final String URL_PROTOCOL_FILE = "file"; + + /** URL protocol for an entry from a jar file: "jar". */ + public static final String URL_PROTOCOL_JAR = "jar"; + + /** URL protocol for an entry from a war file: "war". */ + public static final String URL_PROTOCOL_WAR = "war"; + + /** URL protocol for an entry from a zip file: "zip". */ + public static final String URL_PROTOCOL_ZIP = "zip"; + + /** URL protocol for an entry from a WebSphere jar file: "wsjar". */ + public static final String URL_PROTOCOL_WSJAR = "wsjar"; + + /** URL protocol for an entry from a JBoss jar file: "vfszip". */ + public static final String URL_PROTOCOL_VFSZIP = "vfszip"; + + /** URL protocol for a JBoss file system resource: "vfsfile". */ + public static final String URL_PROTOCOL_VFSFILE = "vfsfile"; + + /** URL protocol for a general JBoss VFS resource: "vfs". */ + public static final String URL_PROTOCOL_VFS = "vfs"; + + /** File extension for a regular jar file: ".jar". */ + public static final String JAR_FILE_EXTENSION = ".jar"; + + /** Separator between JAR URL and file path within the JAR: "!/". */ + public static final String JAR_URL_SEPARATOR = "!/"; + + /** Special separator between WAR URL and jar part on Tomcat. */ + public static final String WAR_URL_SEPARATOR = "*/"; + + + /** + * Return whether the given resource location is a URL: + * either a special "classpath" pseudo URL or a standard URL. + * @param resourceLocation the location String to check + * @return whether the location qualifies as a URL + * @see #CLASSPATH_URL_PREFIX + * @see URL + */ + public static boolean isUrl(@Nullable String resourceLocation) { + if (resourceLocation == null) { + return false; + } + if (resourceLocation.startsWith(CLASSPATH_URL_PREFIX)) { + return true; + } + try { + new URL(resourceLocation); + return true; + } + catch (MalformedURLException ex) { + return false; + } + } + + /** + * Resolve the given resource location to a {@code java.net.URL}. + *

Does not check whether the URL actually exists; simply returns + * the URL that the given location would correspond to. + * @param resourceLocation the resource location to resolve: either a + * "classpath:" pseudo URL, a "file:" URL, or a plain file path + * @return a corresponding URL object + * @throws FileNotFoundException if the resource cannot be resolved to a URL + */ + public static URL getURL(String resourceLocation) throws FileNotFoundException { + Objects.requireNonNull(resourceLocation, "Resource location must not be null"); + if (resourceLocation.startsWith(CLASSPATH_URL_PREFIX)) { + String path = resourceLocation.substring(CLASSPATH_URL_PREFIX.length()); + ClassLoader cl = ClassUtils.getDefaultClassLoader(); + URL url = (cl != null ? cl.getResource(path) : ClassLoader.getSystemResource(path)); + if (url == null) { + String description = "class path resource [" + path + "]"; + throw new FileNotFoundException(description + + " cannot be resolved to URL because it does not exist"); + } + return url; + } + try { + // try URL + return new URL(resourceLocation); + } + catch (MalformedURLException ex) { + // no URL -> treat as file path + try { + return new File(resourceLocation).toURI().toURL(); + } + catch (MalformedURLException ex2) { + throw new FileNotFoundException("Resource location [" + resourceLocation + + "] is neither a URL not a well-formed file path"); + } + } + } + + /** + * Resolve the given resource location to a {@code java.io.File}, + * i.e. to a file in the file system. + *

Does not check whether the file actually exists; simply returns + * the File that the given location would correspond to. + * @param resourceLocation the resource location to resolve: either a + * "classpath:" pseudo URL, a "file:" URL, or a plain file path + * @return a corresponding File object + * @throws FileNotFoundException if the resource cannot be resolved to + * a file in the file system + */ + public static File getFile(String resourceLocation) throws FileNotFoundException { + Objects.requireNonNull(resourceLocation, "Resource location must not be null"); + if (resourceLocation.startsWith(CLASSPATH_URL_PREFIX)) { + String path = resourceLocation.substring(CLASSPATH_URL_PREFIX.length()); + String description = "class path resource [" + path + "]"; + ClassLoader cl = ClassUtils.getDefaultClassLoader(); + URL url = (cl != null ? cl.getResource(path) : ClassLoader.getSystemResource(path)); + if (url == null) { + throw new FileNotFoundException(description + + " cannot be resolved to absolute file path because it does not exist"); + } + return getFile(url, description); + } + try { + // try URL + return getFile(new URL(resourceLocation)); + } + catch (MalformedURLException ex) { + // no URL -> treat as file path + return new File(resourceLocation); + } + } + + /** + * Resolve the given resource URL to a {@code java.io.File}, + * i.e. to a file in the file system. + * @param resourceUrl the resource URL to resolve + * @return a corresponding File object + * @throws FileNotFoundException if the URL cannot be resolved to + * a file in the file system + */ + public static File getFile(URL resourceUrl) throws FileNotFoundException { + return getFile(resourceUrl, "URL"); + } + + /** + * Resolve the given resource URL to a {@code java.io.File}, + * i.e. to a file in the file system. + * @param resourceUrl the resource URL to resolve + * @param description a description of the original resource that + * the URL was created for (for example, a class path location) + * @return a corresponding File object + * @throws FileNotFoundException if the URL cannot be resolved to + * a file in the file system + */ + public static File getFile(URL resourceUrl, String description) throws FileNotFoundException { + Objects.requireNonNull(resourceUrl, "Resource URL must not be null"); + if (!URL_PROTOCOL_FILE.equals(resourceUrl.getProtocol())) { + throw new FileNotFoundException( + description + " cannot be resolved to absolute file path " + + "because it does not reside in the file system: " + resourceUrl); + } + try { + return new File(toURI(resourceUrl).getSchemeSpecificPart()); + } + catch (URISyntaxException ex) { + // Fallback for URLs that are not valid URIs (should hardly ever happen). + return new File(resourceUrl.getFile()); + } + } + + /** + * Resolve the given resource URI to a {@code java.io.File}, + * i.e. to a file in the file system. + * @param resourceUri the resource URI to resolve + * @return a corresponding File object + * @throws FileNotFoundException if the URL cannot be resolved to + * a file in the file system + * @since 2.5 + */ + public static File getFile(URI resourceUri) throws FileNotFoundException { + return getFile(resourceUri, "URI"); + } + + /** + * Resolve the given resource URI to a {@code java.io.File}, + * i.e. to a file in the file system. + * @param resourceUri the resource URI to resolve + * @param description a description of the original resource that + * the URI was created for (for example, a class path location) + * @return a corresponding File object + * @throws FileNotFoundException if the URL cannot be resolved to + * a file in the file system + * @since 2.5 + */ + public static File getFile(URI resourceUri, String description) throws FileNotFoundException { + Objects.requireNonNull(resourceUri, "Resource URI must not be null"); + if (!URL_PROTOCOL_FILE.equals(resourceUri.getScheme())) { + throw new FileNotFoundException( + description + " cannot be resolved to absolute file path " + + "because it does not reside in the file system: " + resourceUri); + } + return new File(resourceUri.getSchemeSpecificPart()); + } + + /** + * Determine whether the given URL points to a resource in the file system, + * i.e. has protocol "file", "vfsfile" or "vfs". + * @param url the URL to check + * @return whether the URL has been identified as a file system URL + */ + public static boolean isFileURL(URL url) { + String protocol = url.getProtocol(); + return (URL_PROTOCOL_FILE.equals(protocol) || URL_PROTOCOL_VFSFILE.equals(protocol) || + URL_PROTOCOL_VFS.equals(protocol)); + } + + /** + * Determine whether the given URL points to a resource in a jar file. + * i.e. has protocol "jar", "war, ""zip", "vfszip" or "wsjar". + * @param url the URL to check + * @return whether the URL has been identified as a JAR URL + */ + public static boolean isJarURL(URL url) { + String protocol = url.getProtocol(); + return (URL_PROTOCOL_JAR.equals(protocol) || URL_PROTOCOL_WAR.equals(protocol) || + URL_PROTOCOL_ZIP.equals(protocol) || URL_PROTOCOL_VFSZIP.equals(protocol) || + URL_PROTOCOL_WSJAR.equals(protocol)); + } + + /** + * Determine whether the given URL points to a jar file itself, + * that is, has protocol "file" and ends with the ".jar" extension. + * @param url the URL to check + * @return whether the URL has been identified as a JAR file URL + * @since 4.1 + */ + public static boolean isJarFileURL(URL url) { + return (URL_PROTOCOL_FILE.equals(url.getProtocol()) && + url.getPath().toLowerCase().endsWith(JAR_FILE_EXTENSION)); + } + + /** + * Extract the URL for the actual jar file from the given URL + * (which may point to a resource in a jar file or to a jar file itself). + * @param jarUrl the original URL + * @return the URL for the actual jar file + * @throws MalformedURLException if no valid jar file URL could be extracted + */ + public static URL extractJarFileURL(URL jarUrl) throws MalformedURLException { + String urlFile = jarUrl.getFile(); + int separatorIndex = urlFile.indexOf(JAR_URL_SEPARATOR); + if (separatorIndex != -1) { + String jarFile = urlFile.substring(0, separatorIndex); + try { + return new URL(jarFile); + } + catch (MalformedURLException ex) { + // Probably no protocol in original jar URL, like "jar:C:/mypath/myjar.jar". + // This usually indicates that the jar file resides in the file system. + if (!jarFile.startsWith("/")) { + jarFile = "/" + jarFile; + } + return new URL(FILE_URL_PREFIX + jarFile); + } + } + else { + return jarUrl; + } + } + + /** + * Extract the URL for the outermost archive from the given jar/war URL + * (which may point to a resource in a jar file or to a jar file itself). + *

In the case of a jar file nested within a war file, this will return + * a URL to the war file since that is the one resolvable in the file system. + * @param jarUrl the original URL + * @return the URL for the actual jar file + * @throws MalformedURLException if no valid jar file URL could be extracted + * @since 4.1.8 + * @see #extractJarFileURL(URL) + */ + public static URL extractArchiveURL(URL jarUrl) throws MalformedURLException { + String urlFile = jarUrl.getFile(); + + int endIndex = urlFile.indexOf(WAR_URL_SEPARATOR); + if (endIndex != -1) { + // Tomcat's "war:file:...mywar.war*/WEB-INF/lib/myjar.jar!/myentry.txt" + String warFile = urlFile.substring(0, endIndex); + if (URL_PROTOCOL_WAR.equals(jarUrl.getProtocol())) { + return new URL(warFile); + } + int startIndex = warFile.indexOf(WAR_URL_PREFIX); + if (startIndex != -1) { + return new URL(warFile.substring(startIndex + WAR_URL_PREFIX.length())); + } + } + + // Regular "jar:file:...myjar.jar!/myentry.txt" + return extractJarFileURL(jarUrl); + } + + /** + * Create a URI instance for the given URL, + * replacing spaces with "%20" URI encoding first. + * @param url the URL to convert into a URI instance + * @return the URI instance + * @throws URISyntaxException if the URL wasn't a valid URI + * @see URL#toURI() + */ + public static URI toURI(URL url) throws URISyntaxException { + return toURI(url.toString()); + } + + /** + * Create a URI instance for the given location String, + * replacing spaces with "%20" URI encoding first. + * @param location the location String to convert into a URI instance + * @return the URI instance + * @throws URISyntaxException if the location wasn't a valid URI + */ + public static URI toURI(String location) throws URISyntaxException { + return new URI(StringUtils.replace(location, " ", "%20")); + } + + /** + * Set the {@link URLConnection#setUseCaches "useCaches"} flag on the + * given connection, preferring {@code false} but leaving the + * flag at {@code true} for JNLP based resources. + * @param con the URLConnection to set the flag on + */ + public static void useCachesIfNecessary(URLConnection con) { + con.setUseCaches(con.getClass().getSimpleName().startsWith("JNLP")); + } + +} diff --git a/src/main/java/space/ao/services/support/RestConfiguration.java b/src/main/java/space/ao/services/support/RestConfiguration.java new file mode 100644 index 0000000..2e9f4d5 --- /dev/null +++ b/src/main/java/space/ao/services/support/RestConfiguration.java @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support; + +import com.google.common.base.Stopwatch; +import com.google.common.base.Strings; +import io.vertx.core.http.HttpServerRequest; +import io.vertx.core.http.HttpServerResponse; +import okhttp3.OkHttpClient; +import org.jboss.logging.Logger; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.service.ServiceOperationException; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.inject.Produces; +import jakarta.inject.Inject; +import jakarta.validation.ConstraintViolationException; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.container.ContainerRequestContext; +import jakarta.ws.rs.container.ContainerRequestFilter; +import jakarta.ws.rs.container.ContainerResponseContext; +import jakarta.ws.rs.container.ContainerResponseFilter; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.UriInfo; +import jakarta.ws.rs.ext.ExceptionMapper; +import jakarta.ws.rs.ext.Provider; +import java.time.Duration; +import java.util.Set; + +/** + * It provides application scoped {@code Mappers}, {@code Filters} etc. configurations + * for all the REST requests and responses, such as mapping error result or filtering & + * dumping request or response access log. You can also add additional configurations + * in this class. + * + * @since 0.1.0 + * @author Haibo Luo + */ +@ApplicationScoped +public class RestConfiguration { + + static final Logger LOG = Logger.getLogger("rest.log"); + + public static final String REQUEST_ID = "Request-Id"; + + @Inject + ApplicationProperties properties; + + @Produces + @SuppressWarnings("unused") // Used by DIC framework + public OkHttpClient httpClient() { + return new OkHttpClient.Builder() + .readTimeout(Duration.parse("PT" + properties.gatewayHttpClientReadTimeout())) + .writeTimeout(Duration.parse("PT" + properties.gatewayHttpClientWriteTimeout())) + .build(); + } + + /** + * It provides exception result mapping for REST responses. For more information: + * https://developer.jboss.org/docs/DOC-48310. + */ + @Provider + public static class ErrorMapper implements ExceptionMapper { + + @Context + HttpServerRequest request; + + @Override + public Response toResponse(Exception exception) { + + return convertToErrorResponse(request, exception); + } + } + + /** + * 提供专门针对 ConstraintViolationException 异常的拦截,因为默认通过 {@link ErrorMapper} 无法拦截到这类异常。 + * 具体参考:jaxrs-jersey-2-validation-errors-does-not-invoke-the-exceptionmapper + */ + @Provider + public static class ConstraintViolationErrorMapper implements ExceptionMapper { + + @Context + HttpServerRequest request; + + @Override + public Response toResponse(ConstraintViolationException exception) { + return convertToErrorResponse(request, exception); + } + } + + private static Response convertToErrorResponse(HttpServerRequest request, Exception exception) { + // 当 Rest 请求接口有未处理异常发生时,在对其错误转换之前,始终输出一条该请求的异常日志。 + LOG.error("error mapper", exception); + + var requestId = request.getHeader(REQUEST_ID); + requestId = ((requestId == null) ? request.getParam(REQUEST_ID) : requestId); + Response.StatusType status = Response.Status.INTERNAL_SERVER_ERROR; + String message = exception.getMessage(); + Integer errCode = null; + Object[] context = null; + + if (exception instanceof WebApplicationException) { + status = ((WebApplicationException) exception).getResponse().getStatusInfo(); + var entity = ((WebApplicationException) exception).getResponse().getEntity(); + // For those WebApplicationExceptions that ready have an entity, just response them immediately. + if (entity != null) { + return Response.status(status).entity(entity).build(); + } + } + + if (exception instanceof ConstraintViolationException) { + status = Response.Status.BAD_REQUEST; + } else if (exception instanceof ServiceOperationException) { + errCode = ((ServiceOperationException) exception).getErrorCode(); + context = ((ServiceOperationException) exception).getMessageParameters(); + } + + // account 模块异常 + if(exception instanceof space.ao.services.account.support.service.ServiceOperationException){ + errCode = ((space.ao.services.account.support.service.ServiceOperationException) exception).getErrorCode(); + context = ((space.ao.services.account.support.service.ServiceOperationException) exception).getMessageParameters(); + LOG.error("account exception: " + errCode); + if(errCode == ServiceError.REQ_RATE_OVER_LIMIT.getCode()){ + return ResponseBase.builder().code("GW-" + errCode) + .requestId(requestId) + .message(message != null ? (message) : (status.getReasonPhrase())) + .context(context) + .build() + .toNormalResponse(); + } + + return ResponseBase.fromAccountErrorCode(errCode) + .requestId(requestId) + .message(message != null ? (message) : (status.getReasonPhrase())) + .context(context) + .build() + .toResponse(); + } + + return ResponseBase.fromErrorCode( + errCode != null ? errCode : status.getStatusCode()) + .requestId(requestId) + .message( + message != null ? (message) : (status.getReasonPhrase())) + .context(context) + .build() + .toResponse(); + } + + private final static String STOPWATCH = "stopwatch"; + + /** + * It provides an access log recording for all REST requests. For more information: + * https://quarkus.io/guides/rest-json. + */ + @Provider + public static class LoggingRequestFilter implements ContainerRequestFilter { + + @Context + UriInfo info; + + @Context + HttpServerRequest request; + + @Override + public void filter(ContainerRequestContext context) { + context.setProperty(STOPWATCH, Stopwatch.createStarted()); + var requestId = request.getHeader(REQUEST_ID); + requestId = ((requestId == null) ? request.getParam(REQUEST_ID) : requestId); + if (request.params().isEmpty()) { + LOG.infof( + "[Request] %s %s, from ip: %s, req-id: %s", + context.getMethod(), + info.getPath(), + request.remoteAddress(), + requestId + ); + } else { + LOG.infof( + "[Request] %s %s, from IP %s, params: {%s}, req-id: %s", + context.getMethod(), + info.getPath(), + request.remoteAddress(), + request.params(), + requestId + ); + } + } + } + + /** + * It provides an access log recording for all REST responses. For more information: + * https://quarkus.io/guides/rest-json. + */ + @Provider + public static class LoggingResponseFilter implements ContainerResponseFilter { + + @Context + UriInfo info; + + @Context + HttpServerResponse response; + + @Context + HttpServerRequest request; + + @Override + public void filter( + ContainerRequestContext requestContext, ContainerResponseContext responseContext) { + var requestId = request.getHeader(REQUEST_ID); + requestId = ((requestId == null) ? request.getParam(REQUEST_ID) : requestId); + var stopwatch = (Stopwatch) requestContext.getProperty(STOPWATCH); + var method = requestContext.getMethod(); + var status = responseContext.getStatusInfo(); + try { + if (stopwatch != null) { // will be null when 404 error happens + stopwatch.stop(); + } + LOG.infof( + "[Response] %s %s (%d %s), elapsed: %s, req-id: %s", + method, + info.getPath(), + status.getStatusCode(), status.getReasonPhrase(), + stopwatch, + requestId + ); + } finally { + requestContext.removeProperty(STOPWATCH); + if (!Strings.isNullOrEmpty(requestId)) { + responseContext.getHeaders().add(REQUEST_ID, requestId); + } + } + } + } + + @Provider + public static class TokenAuthResponseFilter implements ContainerResponseFilter { + + @Context + UriInfo info; + + @Context + HttpServerResponse response; + + @Context + HttpServerRequest request; + + // 提供一个请求路径白名单,用于过滤请求,并为其添加安全相关的 HTTP header。 + // 参考:https://www.rfc-editor.org/rfc/rfc6749#section-5.1 + private final static Set ITEMS = Set.of( + "/v1/api/gateway/auth/token/create", + "/v1/api/gateway/auth/token/create/member", + "/v1/api/gateway/auth/token/refresh", + "/v1/api/gateway/openapi/auth/token/create", + "/v1/api/gateway/openapi/auth/token/refresh" + ); + + @Override + public void filter( + ContainerRequestContext requestContext, ContainerResponseContext responseContext) { + var path = info.getPath(); + if (path != null && ITEMS.contains(path)) { + response.headers().add("Cache-Control", "no-store"); + response.headers().add("Pragma", "no-cache"); + } + } + } +} diff --git a/src/main/java/space/ao/services/support/StringUtils.java b/src/main/java/space/ao/services/support/StringUtils.java new file mode 100644 index 0000000..fdded65 --- /dev/null +++ b/src/main/java/space/ao/services/support/StringUtils.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright 2002-2021 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support; + +import javax.annotation.Nullable; + +public abstract class StringUtils { + + /** + * Replace all occurrences of a substring within a string with another string. + * @param inString {@code String} to examine + * @param oldPattern {@code String} to replace + * @param newPattern {@code String} to insert + * @return a {@code String} with the replacements + */ + public static String replace(String inString, String oldPattern, String newPattern) { + if (!hasLength(inString) || !hasLength(oldPattern) || newPattern == null) { + return inString; + } + int index = inString.indexOf(oldPattern); + if (index == -1) { + // no occurrence -> can return input as-is + return inString; + } + + int capacity = inString.length(); + if (newPattern.length() > oldPattern.length()) { + capacity += 16; + } + StringBuilder sb = new StringBuilder(capacity); + + int pos = 0; // our position in the old string + int patLen = oldPattern.length(); + while (index >= 0) { + sb.append(inString, pos, index); + sb.append(newPattern); + pos = index + patLen; + index = inString.indexOf(oldPattern, pos); + } + + // append any characters to the right of a match + sb.append(inString, pos, inString.length()); + return sb.toString(); + } + + /** + * Check that the given {@code CharSequence} is neither {@code null} nor + * of length 0. + *

Note: this method returns {@code true} for a {@code CharSequence} + * that purely consists of whitespace. + *

+   * StringUtils.hasLength(null) = false
+   * StringUtils.hasLength("") = false
+   * StringUtils.hasLength(" ") = true
+   * StringUtils.hasLength("Hello") = true
+   * 
+ * @param str the {@code CharSequence} to check (may be {@code null}) + * @return {@code true} if the {@code CharSequence} is not {@code null} and has length + */ + public static boolean hasLength(@Nullable CharSequence str) { + return (str != null && str.length() > 0); + } + public static boolean isBlank(String strings) { + return org.apache.commons.lang3.StringUtils.isBlank(strings); + } +} diff --git a/src/main/java/space/ao/services/support/TokenUtils.java b/src/main/java/space/ao/services/support/TokenUtils.java new file mode 100644 index 0000000..d741c13 --- /dev/null +++ b/src/main/java/space/ao/services/support/TokenUtils.java @@ -0,0 +1,396 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.common.base.Stopwatch; +import io.quarkus.scheduler.Scheduled; +import io.smallrye.jwt.auth.principal.JWTParser; +import io.smallrye.jwt.build.Jwt; +import io.smallrye.jwt.build.JwtClaimsBuilder; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; +import lombok.Builder; +import lombok.Data; +import lombok.SneakyThrows; +import org.eclipse.microprofile.jwt.JsonWebToken; +import org.jboss.logging.Logger; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.gateway.auth.CreateTokenResult; +import space.ao.services.support.jwt.JwtUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.model.AccessToken; +import space.ao.services.support.model.AlgorithmConfig; +import space.ao.services.support.model.RefreshToken; +import space.ao.services.support.redis.RedisTokenService; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import javax.annotation.Nullable; +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import java.nio.charset.StandardCharsets; +import java.security.SecureRandom; +import java.time.Duration; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.*; +import java.util.concurrent.TimeUnit; + +@Singleton +public class TokenUtils { + private static final Logger LOG = Logger.getLogger("app.log"); + private static final String USER_ID = "userId"; + private static final String CLIENT_UUID = "clientUUID"; + private static final String TOKEN_TYPE_KEY = "tokenType"; + private static final String ACCESS_TOKEN_TYPE = "access"; + private static final String REFRESH_TOKEN_TYPE = "refresh"; + private static final String INFO = "info"; + + private static final String OPEN_API_ACCESS_TOKEN_TYPE = "open-api-access"; + private static final String OPEN_API_REFRESH_TOKEN_TYPE = "open-api-refresh"; + private static final String OPEN_API_APPLET_ID = "open-api-appletID"; + private static final String OPEN_API_APPLET_VER = "open-api-appletVER"; + private static final String OPEN_API_SCOPES = "open-api-scopes"; + + @Inject + SecurityUtils securityUtils; + @Inject + ApplicationProperties properties; + @Inject + OperationUtils operationUtils; + @Inject + JwtUtils jwtUtils; + @Inject + RedisTokenService redisTokenService; + @Inject + JWTParser jwtParser; + @Inject + ObjectMapper objectMapper; + + private static final Map accessTokenMap = new HashMap<>(); + + @Logged + public String createAccessToken(String requestId, String userId, ZonedDateTime expiresAt, String secret, + String iv, String clientUUID, @Nullable OpenApiArg openApiArg) { + + var builder = Jwt.upn(properties.boxUserName()) + .issuer(properties.boxEndpoint()) + .issuedAt(ZonedDateTime.now().toInstant()) + .expiresAt(expiresAt.toInstant()) + .claim(INFO, securityUtils.getSecurityProvider().encryptUsingBoxPublicKey(requestId, + userId + ","+ clientUUID +","+ secret)) + .claim(AccessToken.SHARED_IV_KEY, iv); + + return claimOpenApiAndSign(requestId, openApiArg, builder, ACCESS_TOKEN_TYPE, OPEN_API_ACCESS_TOKEN_TYPE); + } + + + public String createRefreshToken(String requestId, String userId, ZonedDateTime expiresAt, String clientUUID, @Nullable OpenApiArg openApiArg) { + final JwtClaimsBuilder builder = Jwt.upn(properties.boxUserName()) + .issuer(properties.boxEndpoint()) + .issuedAt(ZonedDateTime.now().toInstant()) + .expiresAt(expiresAt.toInstant()) + .claim(USER_ID, securityUtils.getSecurityProvider().encryptUsingBoxPublicKey(requestId, userId)) + .claim(CLIENT_UUID, securityUtils.getSecurityProvider().encryptUsingBoxPublicKey(requestId, clientUUID)) + .claim(AccessToken.JWT_ID, operationUtils.createRandomType4UUID()); + + return claimOpenApiAndSign(requestId, openApiArg, builder, REFRESH_TOKEN_TYPE, OPEN_API_REFRESH_TOKEN_TYPE); + } + + /** + * claim OpenApi + * @param requestId requestId + * @param openApiArg OpenApiArg + * @param builder JwtClaimsBuilder + * @param tokenType tokenType + * @param openApiTokenType openApiTokenType + * @return jwt token + */ + private String claimOpenApiAndSign(String requestId, @Nullable OpenApiArg openApiArg, JwtClaimsBuilder builder, String tokenType, String openApiTokenType) { + if (openApiArg == null) { + builder.claim(TOKEN_TYPE_KEY, tokenType); + } else { + builder.claim(TOKEN_TYPE_KEY, openApiTokenType) + .claim(OPEN_API_APPLET_ID, openApiArg.appletId) + .claim(OPEN_API_APPLET_VER, openApiArg.appletVersion) + .claim(OPEN_API_SCOPES, operationUtils.objectToJson(openApiArg.scopes)); + } + return tokenSign(requestId, builder); + } + + /** + * token signature + * @param requestId requestId + * @param builder JwtClaimsBuilder + * @return jwt token + */ + public String tokenSign(String requestId, JwtClaimsBuilder builder){ + builder.claim(AccessToken.JWT_ID, operationUtils.createRandomType4UUID()); + var unsignedJwt = jwtUtils.privateKeySignPre(builder); + return unsignedJwt + "." + securityUtils.getSecurityProvider().signByUrlEncodeUsingBoxPrivateKey(requestId, + Base64.getEncoder().encodeToString(unsignedJwt.getBytes(StandardCharsets.UTF_8))); + } + + /** + * Used to verify access token and returns the result or null if failed. + */ + public @Nullable + AccessToken verifyAccessToken(String requestId, String token) { + + if(accessTokenMap.containsKey(token)){ + return accessTokenMap.get(token); + } + + try { + final JsonWebToken jwt = jwtParser.verify(Objects.requireNonNull(token), securityUtils.getSecurityProvider().getBoxPublicKey(requestId)); + + if (!Objects.equals(ACCESS_TOKEN_TYPE, jwt.getClaim(TOKEN_TYPE_KEY)) && + !Objects.equals(OPEN_API_ACCESS_TOKEN_TYPE, jwt.getClaim(TOKEN_TYPE_KEY))) { + LOG.infov("requestId:{0}, verifyAccessToken jwt.getClaim(TOKEN_TYPE_KEY): {1}", requestId, jwt.getClaim(TOKEN_TYPE_KEY)); + return null; + } + + AccessToken.AccessTokenBuilder builder = AccessToken.builder().token(token); + + if (ZonedDateTime.now().toInstant().getEpochSecond() > jwt.getExpirationTime()) { + LOG.infov("requestId:{0}, verifyAccessToken jwt.getExpirationTime(): {1}", requestId, jwt.getExpirationTime()); + return null; + } else { + builder.expiresAt( + ZonedDateTime.ofInstant(Instant.ofEpochSecond(jwt.getExpirationTime()), + ZoneId.of("UTC"))); + } + if (!jwt.containsClaim(INFO)) { + LOG.infov("requestId:{0}, verifyAccessToken jwt.containsClaim(INFO): {1}", requestId, jwt.containsClaim(INFO)); + return null; + } else { + var info = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, jwt.getClaim(INFO)); + builder.userId(info.split(",")[0]) + .clientUUID(info.split(",")[1]) + .sharedSecret(info.split(",")[2]); + builder.sharedInitializationVector( + new IvParameterSpec(Base64.getDecoder().decode(jwt.getClaim(AccessToken.SHARED_IV_KEY)))); + } + + if (!jwt.getIssuer().equalsIgnoreCase(properties.boxEndpoint())) { + LOG.infov("requestId:{0}, verifyAccessToken jwt.getIssuer(): {1}", requestId, jwt.getIssuer()); + return null; + } else { + builder.endpoint(jwt.getIssuer()); + } + + // verify open api relevant claims + if (Objects.equals(OPEN_API_ACCESS_TOKEN_TYPE, jwt.getClaim(TOKEN_TYPE_KEY))) { + builder.openApi(true); + if (!jwt.containsClaim(OPEN_API_APPLET_ID)) { + LOG.infov("requestId:{0}, verifyAccessToken jwt.getClaim(OPEN_API_APPLET_ID): {1}", requestId, jwt.getClaim(OPEN_API_APPLET_ID)); + return null; + } else { + builder.openApiAppletId(jwt.getClaim(OPEN_API_APPLET_ID)); + } + + if (!jwt.containsClaim(OPEN_API_APPLET_VER)) { + LOG.infov("requestId:{0}, verifyAccessToken jwt.getClaim(OPEN_API_APPLET_VER): {1}", requestId, jwt.getClaim(OPEN_API_APPLET_VER)); + return null; + } else { + builder.openApiAppletVersion(jwt.getClaim(OPEN_API_APPLET_VER)); + } + + if (!jwt.containsClaim(OPEN_API_SCOPES)) { + LOG.infov("requestId:{0}, verifyAccessToken jwt.getClaim(OPEN_API_SCOPES): {1}", requestId, jwt.getClaim(OPEN_API_SCOPES)); + return null; + } else { + final Set scopes = objectMapper.readValue(jwt.getClaim(OPEN_API_SCOPES), new TypeReference<>() {}); + builder.openApiScopes(scopes); + } + } + + var result = builder.build(); + accessTokenMap.put(token, result); + return result; + + } catch (Exception e) { + LOG.error("verifyAccessToken failed", e); + return null; + } + } + public AccessToken checkAccessToken(String requestId, String accessToken) { + return Optional.ofNullable(verifyAccessToken(requestId, accessToken)) + .orElseThrow( + () -> new WebApplicationException("Invalid access token", Response.Status.FORBIDDEN) + ); + } + public RefreshToken verifyRefreshToken(String requestId, String token) { + + try { + final JsonWebToken jwt = jwtParser.verify(token, securityUtils.getSecurityProvider().getBoxPublicKey(requestId)); + + if (!Objects.equals(REFRESH_TOKEN_TYPE, jwt.getClaim(TOKEN_TYPE_KEY)) && + !Objects.equals(OPEN_API_REFRESH_TOKEN_TYPE, jwt.getClaim(TOKEN_TYPE_KEY))) { + return null; + } + + RefreshToken.RefreshTokenBuilder builder = RefreshToken.builder(); + + if (ZonedDateTime.now().toInstant().getEpochSecond() > jwt.getExpirationTime()) { + throw new ServiceOperationException(ServiceError.REFRESH_TOKEN_TIMEOUT); + } else { + builder.expiresAt( + ZonedDateTime.ofInstant(Instant.ofEpochSecond(jwt.getExpirationTime()), + ZoneId.of("UTC"))); + } + String userId; + if (jwt.getClaim(USER_ID) == null) { + return null; + } else { + userId = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, jwt.getClaim(USER_ID)); + builder.userId(userId); + } + + if (!properties.boxEndpoint().equalsIgnoreCase(jwt.getIssuer())) { + return null; + } else { + builder.endpoint(jwt.getIssuer()); + } + if (jwt.getClaim(CLIENT_UUID) == null) { + return null; + } else { + builder.clientUUID(securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, jwt.getClaim(CLIENT_UUID))); + } + + // verify open api relevant claims + if (Objects.equals(OPEN_API_REFRESH_TOKEN_TYPE, jwt.getClaim(TOKEN_TYPE_KEY))) { + builder.openApi(true); + if (!jwt.containsClaim(OPEN_API_APPLET_ID)) { + return null; + } else { + builder.openApiAppletId(jwt.getClaim(OPEN_API_APPLET_ID)); + } + + if (!jwt.containsClaim(OPEN_API_APPLET_VER)) { + return null; + } else { + builder.openApiAppletVersion(jwt.getClaim(OPEN_API_APPLET_VER)); + } + + if (!jwt.containsClaim(OPEN_API_SCOPES)) { + return null; + } else { + final Set scopes = objectMapper.readValue(jwt.getClaim(OPEN_API_SCOPES), new TypeReference<>() {}); + builder.openApiScopes(scopes); + } + } + + return builder.build(); + } catch (Exception e) { + LOG.error("verifyRefreshToken failed", e); + return null; + } + } + + @SneakyThrows + public Cipher createAndInitCipherWithAccessToken(AccessToken accessToken, int mode) { + var secretKey = new SecretKeySpec( + accessToken.getSharedSecret().getBytes(StandardCharsets.UTF_8), + properties.gatewayAlgInfoTransportationAlgorithm() + ); + var cipher = Cipher.getInstance(properties.gatewayAlgInfoTransportationTransformation()); + cipher.init(mode, secretKey, accessToken.getSharedInitializationVector()); + return cipher; + } + + @Data + @Builder + public static class OpenApiArg { + private String appletId; + private String appletVersion; + private Set scopes; + } + + SecureRandom random = new SecureRandom(); + + public CreateTokenResult createDefaultTokenResult(String requestId, + @Nullable String tempEncryptedSecret, String userId, String clientUUID, @Nullable OpenApiArg openApiArg) { + final String secret = operationUtils.unifiedRandomCharters(properties.gatewayAlgInfoTransportationKeySize()); + String sharedSecret; + byte[] ivBytes = new byte[16]; + random.nextBytes(ivBytes); + var iv = new IvParameterSpec(ivBytes); + + if (tempEncryptedSecret == null) { + sharedSecret = securityUtils.encryptUsingClientPublicKey(secret); + ivBytes = operationUtils.createRandomBytes(16); + } else { + String swapSecret = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, tempEncryptedSecret); + sharedSecret = securityUtils.encryptWithSecret(secret, swapSecret, iv); + } + + final String initializationVector = Base64.getEncoder().encodeToString(ivBytes); + final ZonedDateTime expiresAt = ZonedDateTime.now().plusSeconds( + Duration.parse(properties.gatewayTimeOfAkLife()).toSeconds()); + final String ak = createAccessToken(requestId, userId, expiresAt, secret, initializationVector, clientUUID, openApiArg); + final String rft = createRefreshToken(requestId, userId, + ZonedDateTime.now() + .plusSeconds(Duration.parse(properties.gatewayTimeOfRakLife()).getSeconds()),clientUUID, openApiArg); + + final AlgorithmConfig algorithmConfig = AlgorithmConfig.of( + properties.gatewayAlgInfoPublicKeyAlgorithm(), + properties.gatewayAlgInfoPublicKeyKeySize(), + properties.gatewayAlgInfoTransportationAlgorithm(), + properties.gatewayAlgInfoTransportationKeySize(), + properties.gatewayAlgInfoTransportationTransformation(), + initializationVector + ); + + redisTokenService.set("aoid-" + userId, secret, checkAccessToken(requestId, ak)); + + return CreateTokenResult.of(ak, rft, algorithmConfig, + sharedSecret, expiresAt.toString(), expiresAt.toEpochSecond(), requestId); + } + + public AlgorithmConfig createDefaultAlgorithmConfig() { + + final String initializationVector = Base64.getEncoder().encodeToString(operationUtils.createRandomBytes(16)); + + return AlgorithmConfig.of( + properties.gatewayAlgInfoPublicKeyAlgorithm(), + properties.gatewayAlgInfoPublicKeyKeySize(), + properties.gatewayAlgInfoTransportationAlgorithm(), + properties.gatewayAlgInfoTransportationKeySize(), + properties.gatewayAlgInfoTransportationTransformation(), + initializationVector + ); + } + + // 清理过期了的授权信息 + // 每七天执行一次 + @Scheduled(every = "{app.gateway.cron.cache-clean.clean-expired-ak}") + @SuppressWarnings("unused") // Executing a Scheduled Task + void cleanupCacheTokenData() { + Stopwatch stopwatch = Stopwatch.createStarted(); + accessTokenMap.values().forEach( + accessToken -> accessTokenMap.entrySet().removeIf(d -> accessToken.getExpiresAt().toEpochSecond() < ZonedDateTime.now().toEpochSecond())); + LOG.info("regularly clean token cache completed - " + stopwatch.elapsed(TimeUnit.SECONDS)); + } +} diff --git a/src/main/java/space/ao/services/support/agent/AgentService.java b/src/main/java/space/ao/services/support/agent/AgentService.java new file mode 100644 index 0000000..a4214c1 --- /dev/null +++ b/src/main/java/space/ao/services/support/agent/AgentService.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.agent; + +import io.quarkus.logging.Log; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import space.ao.services.gateway.auth.qrcode.dto.BoxLanInfo; + +@ApplicationScoped +public class AgentService { + @Inject + @RestClient + AgentServiceRestClient agentServiceRestClient; + + public BoxLanInfo getBoxLanInfo(String requestId) { + String lanIp = ""; + int port = 80; + int tlsPort = 443; + try { + var ipAddressInfo = agentServiceRestClient.getIpAddressInfo(requestId); + if(!ipAddressInfo.results().isEmpty()){ + lanIp = ipAddressInfo.results().get(0).getIp(); + port = ipAddressInfo.results().get(0).getPort(); + tlsPort = ipAddressInfo.results().get(0).getTlsPort(); + if(tlsPort == 0){ + tlsPort = 443; + } + } + } catch (Exception e){ + Log.errorv(e, "requestId: {0}, getBoxLanInfo error: {1}", requestId, e.getMessage()); + } + return BoxLanInfo.of(null , lanIp, null, port, tlsPort); + } +} diff --git a/src/main/java/space/ao/services/support/agent/AgentServiceRestClient.java b/src/main/java/space/ao/services/support/agent/AgentServiceRestClient.java new file mode 100644 index 0000000..1a2d72f --- /dev/null +++ b/src/main/java/space/ao/services/support/agent/AgentServiceRestClient.java @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.agent; + +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import space.ao.services.support.agent.info.DeviceInfo; +import space.ao.services.support.agent.info.DidDocResult; +import space.ao.services.support.agent.info.IpAddressInfo; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.log.Logged; + +import jakarta.ws.rs.core.MediaType; +import java.util.List; + +@RegisterRestClient(configKey = "system-agent-api") +public interface AgentServiceRestClient { + @GET + @Path("/device/localips") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + ResponseBase> getIpAddressInfo(@HeaderParam("Request-Id") @NotBlank String requestId); + + @GET + @Path("/device/version") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + ResponseBase getDeviceVersion(); + + @GET + @Path("/did/document") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + @Operation(description = "入参 did(可选),aoId(可选)。如果传 did,则直接返回 did 对应的 didDoc; 如果不传 did,但是传了 aoid 则取出该用户的 didDoc 返回;如果都没传则报参数错误 AG-400。") + ResponseBase getDidDocument(@HeaderParam("Request-Id") @NotBlank String requestId, @QueryParam("did") String did, + @QueryParam("aoId") String aoid); + + @PUT + @Path("/did/document/method") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + @Operation(description = "入参 did(可选),aoid(可选)。如果传 did,则直接返回 did 对应的 didDoc; 如果不传 did,但是传了 aoid 则取出该用户的 didDoc 返回;如果都没传则报参数错误 AG-400。") + ResponseBase changePasswordDidDocument(@HeaderParam("Request-Id") @NotBlank String requestId, @QueryParam("did") String did, + @QueryParam("aoId") String aoid, @QueryParam("newPassword") String newPassword); +} diff --git a/src/main/java/space/ao/services/support/agent/info/DeviceInfo.java b/src/main/java/space/ao/services/support/agent/info/DeviceInfo.java new file mode 100644 index 0000000..741e32d --- /dev/null +++ b/src/main/java/space/ao/services/support/agent/info/DeviceInfo.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.agent.info; + +import lombok.Data; + +import java.util.List; +import java.util.Map; + + +@Data +public class DeviceInfo { + private DeviceAbility deviceAbility; + private String deviceLogoUrl; + private String deviceName; + private String deviceNameEn; + private String generationEn; + private String generationZh; + private String osVersion; + private String productModel; + private List serviceDetail; + private List serviceVersion; + private String snNumber; + private String spaceVersion; + + @Data + static class DeviceAbility { + private int deviceModelNumber; + private boolean innerDiskSupport; + private boolean securityChipSupport; + private String snNumber; + private boolean supportUSBDisk; + } + + @Data + static class ServiceDetail { + private int containers; + private int created; + private String id; + private Map labels; + private String parentId; + private List repoDigests; + private String repoTag; + private List repoTags; + private int sharedSize; + private int size; + private int virtualSize; + } + + @Data + static class ServiceVersion { + private int created; + private String serviceName; + private String version; + } +} + + + + diff --git a/src/main/java/space/ao/services/support/agent/info/DidDoc.java b/src/main/java/space/ao/services/support/agent/info/DidDoc.java new file mode 100644 index 0000000..43d92a1 --- /dev/null +++ b/src/main/java/space/ao/services/support/agent/info/DidDoc.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.agent.info; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import io.quarkus.runtime.annotations.RegisterForReflection; + +@RegisterForReflection +@JsonIgnoreProperties(ignoreUnknown = true) +public record DidDoc(String id){} \ No newline at end of file diff --git a/src/main/java/space/ao/services/support/agent/info/DidDocResult.java b/src/main/java/space/ao/services/support/agent/info/DidDocResult.java new file mode 100644 index 0000000..c1c1895 --- /dev/null +++ b/src/main/java/space/ao/services/support/agent/info/DidDocResult.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.agent.info; + +public record DidDocResult(String didDoc) { +} diff --git a/src/main/java/space/ao/services/support/agent/info/IpAddressInfo.java b/src/main/java/space/ao/services/support/agent/info/IpAddressInfo.java new file mode 100644 index 0000000..69cddd3 --- /dev/null +++ b/src/main/java/space/ao/services/support/agent/info/IpAddressInfo.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.agent.info; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Data; + +@Data +public class IpAddressInfo { + @JsonSerialize + private String ip; + @JsonSerialize + private boolean wire; + @JsonSerialize + private String wifiName; + @JsonSerialize + private int port; + @JsonSerialize + private int tlsPort; + + @JsonCreator + public IpAddressInfo(@JsonProperty("ip") String ip, @JsonProperty("wire") boolean wire, + @JsonProperty("wifiName") String wifiName, @JsonProperty("port") int port, + @JsonProperty("tlsPort") int tlsPort) { + this.ip = ip; + this.wire = wire; + this.wifiName = wifiName; + this.port = port; + this.tlsPort = tlsPort; + } +} diff --git a/src/main/java/space/ao/services/support/file/FileServiceRestClient.java b/src/main/java/space/ao/services/support/file/FileServiceRestClient.java new file mode 100644 index 0000000..9016c45 --- /dev/null +++ b/src/main/java/space/ao/services/support/file/FileServiceRestClient.java @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.file; + +import jakarta.validation.constraints.NotBlank; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import space.ao.services.account.deviceinfo.dto.UserStorageInfo; +import space.ao.services.support.file.info.FileInfos; +import space.ao.services.support.file.info.FileResult; +import space.ao.services.support.file.info.LinkNameResult; +import space.ao.services.support.file.info.UUIDInfo; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.log.Logged; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; + +import java.util.List; +import java.util.Map; + +@RegisterRestClient(configKey="file-api") +public interface FileServiceRestClient { + @POST + @Path("/file/vod/symlink") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + ResponseBase createSoftLink(@Valid @NotNull @QueryParam("userId") Long userid, UUIDInfo uuidInfo); + + @GET + @Path("/user/storage") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + ResponseBase getUserStorageInfo(@HeaderParam("Request-Id") @NotBlank String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + @Valid @NotBlank @QueryParam("targetUserId") String targetUserId); + + + @POST + @Path("/user/init") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + ResponseBase fileUserInitial(@HeaderParam("Request-Id") @NotBlank String requestId, + @Valid @NotNull @QueryParam("userId") Long userid, + @QueryParam("spaceLimit") Long spaceLimit); + + @POST + @Path("/user/delete") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + ResponseBase fileUserDelete(@HeaderParam("Request-Id") @NotBlank String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + String targetUserId); + + @GET + @Path("/inner/file/info") + @Logged + ResponseBase getFile(@QueryParam("userId") String userId, @QueryParam("uuid") String uuid); + + @POST + @Path("/inner/file/infos") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Logged + ResponseBase getFiles(@QueryParam("userId") String userId, Map> uuids); +} diff --git a/src/main/java/space/ao/services/support/file/info/FileInfos.java b/src/main/java/space/ao/services/support/file/info/FileInfos.java new file mode 100644 index 0000000..128982a --- /dev/null +++ b/src/main/java/space/ao/services/support/file/info/FileInfos.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.file.info; + +import lombok.Data; + +import java.util.List; + +@Data(staticConstructor = "of") +public class FileInfos { + private List fileInfos; +} diff --git a/src/main/java/space/ao/services/support/file/info/FileResult.java b/src/main/java/space/ao/services/support/file/info/FileResult.java new file mode 100644 index 0000000..dc50208 --- /dev/null +++ b/src/main/java/space/ao/services/support/file/info/FileResult.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.file.info; + +import lombok.Data; + +@Data +public class FileResult implements Comparable{ + private String betag; + private String bucketName; + private String category; + private Long createdAt; + private boolean executable; + private Integer fileCount; + private boolean isDir; + private String mime; + private Long modifyAt; + private String name; + private Long operationAt; + private String path; + private Long size; + private String tags; + private Long transactionId; + private Long trashed; + private String userId; + private String uuid; + private Integer version; + private Long duration; + private String relativePath; + + public int compareTo(FileResult o) { + return o.operationAt.compareTo(operationAt); + } +} diff --git a/src/main/java/space/ao/services/support/file/info/LinkNameResult.java b/src/main/java/space/ao/services/support/file/info/LinkNameResult.java new file mode 100644 index 0000000..94b2327 --- /dev/null +++ b/src/main/java/space/ao/services/support/file/info/LinkNameResult.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.file.info; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Data; + +@Data +public class LinkNameResult { + @JsonSerialize + private final String linkName; + + @JsonCreator + public LinkNameResult(@JsonProperty("linkName") String linkName) { + this.linkName = linkName; + } +} diff --git a/src/main/java/space/ao/services/support/file/info/UUIDInfo.java b/src/main/java/space/ao/services/support/file/info/UUIDInfo.java new file mode 100644 index 0000000..3e0dabb --- /dev/null +++ b/src/main/java/space/ao/services/support/file/info/UUIDInfo.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.file.info; + +import lombok.Data; + +@Data(staticConstructor = "of") +public class UUIDInfo { + private final String uuid; +} diff --git a/src/main/java/space/ao/services/support/jwt/JwtUtils.java b/src/main/java/space/ao/services/support/jwt/JwtUtils.java new file mode 100644 index 0000000..76ab6d5 --- /dev/null +++ b/src/main/java/space/ao/services/support/jwt/JwtUtils.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.jwt; + +import io.smallrye.jwt.algorithm.SignatureAlgorithm; +import io.smallrye.jwt.build.JwtClaimsBuilder; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.Map.Entry; +import org.jose4j.jwa.AlgorithmConstraints; +import org.jose4j.jws.JsonWebSignature; +import org.jose4j.jwt.JwtClaims; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import jakarta.inject.Singleton; + +@Singleton +public class JwtUtils { + JwtUtils(){} + /** + * jwt 签名预处理 + * @param builder JwtClaimsBuilder + * @return 未签名的 header 和 payload + */ + public String privateKeySignPre(JwtClaimsBuilder builder){ + String result; + + try { + Class clazz = Class.forName("io.smallrye.jwt.build.impl.JwtSignatureImpl"); + + Field claimsField = clazz.getDeclaredField("claims"); + setFieldAccessible(claimsField); + JwtClaims claims = (JwtClaims) claimsField.get(builder); + + Field headersField = clazz.getDeclaredField("headers"); + setFieldAccessible(headersField); + HashMap headers = (HashMap) headersField.get(builder); + + JsonWebSignature jws = new JsonWebSignature(); + + for (Entry stringObjectEntry : headers.entrySet()) { + jws.setHeader((String) stringObjectEntry.getKey(), stringObjectEntry.getValue()); + } + + if (!headers.containsKey("typ")) { + jws.setHeader("typ", "JWT"); + } + + String algorithm = (String)headers.get("alg"); + if ("none".equals(algorithm)) { + jws.setAlgorithmConstraints(AlgorithmConstraints.ALLOW_ONLY_NONE); + } + if (algorithm == null) { + algorithm = SignatureAlgorithm.RS256.name(); + } + + jws.setAlgorithmHeaderValue(algorithm); + jws.setPayload(claims.toJson()); + + result = jws.getHeaders().getEncodedHeader() + "." + jws.getEncodedPayload(); + + } catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { + throw new ServiceOperationException(ServiceError.SIGNATURE_FAILED); + } + + return result; + } + + private static void setFieldAccessible(Field field){ + field.setAccessible(true); + } + +} diff --git a/src/main/java/space/ao/services/support/limit/LimitReq.java b/src/main/java/space/ao/services/support/limit/LimitReq.java new file mode 100644 index 0000000..ec69220 --- /dev/null +++ b/src/main/java/space/ao/services/support/limit/LimitReq.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.limit; + + +import jakarta.enterprise.util.Nonbinding; +import jakarta.interceptor.InterceptorBinding; +import java.lang.annotation.Documented; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * 请求频率限制的注解 + * 使用方式是在需要限制的 restful 接口函数上增加注解,示例如下, + *

+ * > @POST + * > @Path("/verify") + * > @LimitReq(keyPrefix="SCREQRATE-") + *

+ * 上述 LimitReq 注解表示此接口在 interval() 只允许调用 max() 次,超过最大限制将返回 http code 204 给客户端。 + * keyPrefix() 用于存储改接口请求次数的 key 的前缀。整个 key 会以 keyPrefix()-PATH 的形式存储到 redis。其中 PATH 是完成的请求路径. + * + */ +@Target({ TYPE, METHOD }) +@Retention(RUNTIME) +@Documented +@Inherited +@InterceptorBinding +public @interface LimitReq { + /** + * @return key的前缀 + */ + @Nonbinding String keyPrefix() default ""; + + /** + * @return 多久的间隔(秒) + */ + @Nonbinding int interval() default 600; + + /** + * @return 最大允许的请求次数 + */ + @Nonbinding int max() default 300; +} diff --git a/src/main/java/space/ao/services/support/limit/LimitReqInterceptor.java b/src/main/java/space/ao/services/support/limit/LimitReqInterceptor.java new file mode 100644 index 0000000..6e6e339 --- /dev/null +++ b/src/main/java/space/ao/services/support/limit/LimitReqInterceptor.java @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.limit; + + +import lombok.SneakyThrows; +import org.jboss.logging.Logger; +import space.ao.services.gateway.auth.qrcode.dto.EncryptAuthInfo; +import space.ao.services.support.redis.RedisCommonStringService; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.account.support.service.ServiceError; +import space.ao.services.account.support.service.ServiceOperationException; +import jakarta.annotation.Priority; +import jakarta.inject.Inject; +import jakarta.interceptor.AroundInvoke; +import jakarta.interceptor.Interceptor; +import jakarta.interceptor.InvocationContext; +import jakarta.ws.rs.Path; + +import java.lang.reflect.Parameter; +import java.util.Objects; +/** + * + * 请求频率限制的注解 + * 使用方式是在需要限制的 restful 接口函数上增加注解。 + * 详细使用方式请参见 public @interface LimitReq 定义。 + */ +@LimitReq +@Priority(210) +@Interceptor +@SuppressWarnings("unused") // Used by the framework +public class LimitReqInterceptor { + static final Logger LOG = Logger.getLogger("app.log"); + + @Inject + RedisCommonStringService redisCommonStringService; + @Inject + SecurityUtils securityUtils; + + @AroundInvoke + Object limitReqInvocation(InvocationContext context) { + Object ret; + + final LimitReq limitReq = context.getMethod().getAnnotation(LimitReq.class); + + // 这里取类上面的 Path 注解中的路径. + String pathClass = null; + Path annotationClass = context.getMethod().getDeclaringClass().getAnnotation(Path.class); + if(annotationClass != null){ + pathClass = annotationClass.value(); + } + + // 取函数上面的 Path 注解中的路径. + String pathMethod =null; + Path annotationMethod = context.getMethod().getAnnotation(Path.class); + if(annotationMethod != null){ + pathMethod = annotationMethod.value(); + } + + var clientUUid = ""; + var requestId = ""; + Parameter[] paramsName = context.getMethod().getParameters(); + Object[] paramsValues = context.getParameters(); + for (int idx=0;idx { + requestId = (String) paramsValues[idx]; + } + case "clientuuid" -> { + clientUUid = (String) paramsValues[idx]; + } + case "encryptauthinfo" -> { + clientUUid = ((EncryptAuthInfo) paramsValues[idx]).getClientUUID(); + if (clientUUid.length() > 36) { + clientUUid = securityUtils.getSecurityProvider().decryptUsingBoxPrivateKey(requestId, clientUUid); + } + } + default -> { + } + } + } + + LOG.debugv("clientUUid", clientUUid); + + if (Objects.nonNull(pathClass) && Objects.nonNull(pathMethod)) { + String fullPath = pathClass+pathMethod; // http restful 路径 + // 这里 key 的生成方式写在了拦截器内部,这样实现不太好。 + // 更好的方式应该是外部传入,这样不同的模块使用本拦截器时可以自己根据业务需要来定义 key, + // 但是目前注解的形式使用本拦截器可能不支持以变量方式传入,故暂时就用 http 请求的完整的路径加上一个前缀来作为 key。 + String key = limitReq.keyPrefix()+fullPath+"-"+clientUUid; + // 存入 redis + LOG.infov("limit key is: {0}",key); + var reqTimes = increaseCounter(key, limitReq.interval()); + LOG.warnv("request limit! reqTimes={0}", reqTimes); + + if (reqTimes>limitReq.max()) { + LOG.warnv("fullPath over request limit! reqTimes={0}", reqTimes); + throw new ServiceOperationException(ServiceError.REQ_RATE_OVER_LIMIT); + } + } + + try { + ret = doSneakyThrowsInvoke(context); + } catch (Exception rethrow) { + LOG.errorv(rethrow,"[Throw] method: {0}(), exception"); + throw rethrow; + } finally { + LOG.warnv("request ", pathClass); + } + LOG.warnv("request ", pathClass); + + return ret; + } + + @SneakyThrows + Object doSneakyThrowsInvoke(InvocationContext context) { + return context.proceed(); + } + + public Integer increaseCounter(String key, int expiredSeconds){ + int count = (int) redisCommonStringService.incr(key); + if (count==1) { + redisCommonStringService.expire(key, expiredSeconds); + } + return count; + } + public void resetCounter(String key){ + redisCommonStringService.del(key); + } +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/support/limit/LimitReqInterceptorUtils.java b/src/main/java/space/ao/services/support/limit/LimitReqInterceptorUtils.java new file mode 100644 index 0000000..61a3c4a --- /dev/null +++ b/src/main/java/space/ao/services/support/limit/LimitReqInterceptorUtils.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.limit; + +import jakarta.inject.Singleton; +import jakarta.inject.Inject; +import space.ao.services.support.redis.RedisCommonStringService; + +@Singleton +public class LimitReqInterceptorUtils { + @Inject + RedisCommonStringService redisCommonStringService; + + public void resetCounter(String key){ + redisCommonStringService.del(key); + } + +} diff --git a/src/main/java/space/ao/services/support/log/LogFileManagerUtils.java b/src/main/java/space/ao/services/support/log/LogFileManagerUtils.java new file mode 100644 index 0000000..6114dbf --- /dev/null +++ b/src/main/java/space/ao/services/support/log/LogFileManagerUtils.java @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.log; + +import com.google.common.base.Stopwatch; +import io.quarkus.runtime.Startup; +import io.quarkus.scheduler.Scheduled; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import lombok.SneakyThrows; +import org.eclipse.microprofile.config.inject.ConfigProperty; +import org.jboss.logging.Logger; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Comparator; +import java.util.Objects; +import java.util.concurrent.TimeUnit; +import java.util.stream.Stream; + +@ApplicationScoped +@Startup +public class LogFileManagerUtils { + static final Logger LOG = Logger.getLogger("app.log"); + @ConfigProperty(name = "quarkus.log.file.path") + String quarkusLogFilePath; + + @Scheduled(every = "P1D") + @SneakyThrows + @PostConstruct + void deleteOldLogs() { + Stopwatch stopwatch = Stopwatch.createStarted(); + var file = quarkusLogFilePath; + var parent = Paths.get(file).getParent(); + long totalSize = calculateTotalSize(parent); + + long maxFileSize = (long) 200 * 1024 * 1024; + if (totalSize > maxFileSize) { + try(Stream files = Files.list(parent)){ + var logFiles = files + .filter(Files::isRegularFile) + .sorted(Comparator.comparingLong(f -> f.toFile().lastModified())) + .toList(); + + for (var f : logFiles) { + long fileSize = f.toFile().length(); + if (totalSize > maxFileSize) { + LOG.info("delete log file: " + f + " - " + f.toFile().lastModified()); + Files.deleteIfExists(f); + totalSize -= fileSize; + } + } + } + } + LOG.info("regularly clean log file completed - " + stopwatch.elapsed(TimeUnit.SECONDS)); + + } + + private long calculateTotalSize(Path dir) throws IOException { + if(Objects.isNull(dir)){ + return 0; + } + try (Stream files = Files.walk(dir)) { + return files.filter(Files::isRegularFile) + .mapToLong(f -> f.toFile().length()) + .sum(); + } + } +} diff --git a/src/main/java/space/ao/services/support/log/Logged.java b/src/main/java/space/ao/services/support/log/Logged.java new file mode 100644 index 0000000..76be754 --- /dev/null +++ b/src/main/java/space/ao/services/support/log/Logged.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.log; + +import jakarta.enterprise.util.Nonbinding; +import jakarta.interceptor.InterceptorBinding; +import java.lang.annotation.Documented; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * Used to mark a class or method to be intercepted with logging function. + * + * @see LoggingInterceptor + * @since 0.1.0 + * @author Haibo Luo + */ +@Target({ TYPE, METHOD }) +@Retention(RUNTIME) +@Documented +@Inherited +@InterceptorBinding +public @interface Logged { + /** + * Used to check that if it's enable to log pre execution information. + * @return the indicator of pre execution logging. + */ + @Nonbinding boolean enablePreLog() default true; + + /** + * Used to check that if it's enable to log after execution information. + * @return the indicator of after execution logging. + */ + @Nonbinding boolean enableAfterLog() default true; +} diff --git a/src/main/java/space/ao/services/support/log/LoggingInterceptor.java b/src/main/java/space/ao/services/support/log/LoggingInterceptor.java new file mode 100644 index 0000000..a9d30a8 --- /dev/null +++ b/src/main/java/space/ao/services/support/log/LoggingInterceptor.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.log; + +import com.google.common.base.Stopwatch; +import lombok.SneakyThrows; +import org.jboss.logging.Logger; +import space.ao.services.support.OperationUtils; + +import jakarta.annotation.Priority; +import jakarta.inject.Inject; +import jakarta.interceptor.AroundInvoke; +import jakarta.interceptor.Interceptor; +import jakarta.interceptor.InvocationContext; +import java.util.Arrays; + +/** + * Provides the logging joint point to intercept the invocation of method or class + * which is marked by the annotation {@code Logged}. For more information: + * https://quarkus.io/guides/cdi#interceptors. + * + * @see Logged + * @since 0.1.0 + * @author Haibo Luo + */ +@Logged +@Priority(200) +@Interceptor +@SuppressWarnings("unused") // Used by the framework +public class LoggingInterceptor { + + static final Logger LOG = Logger.getLogger("app.log"); + + @Inject + OperationUtils utils; + + @AroundInvoke + Object logInvocation(InvocationContext context) { + final Logged logged = context.getMethod().getAnnotation(Logged.class); + final String mn = context.getMethod().getName(); + + if (logged.enablePreLog()) { + LOG.infov( + "[Invoke] method: {0}(), parameters: {1}", + mn, + Arrays.toString(context.getParameters()) + ); + } + + Stopwatch sw = Stopwatch.createStarted(); + Object ret; + try { + ret = doSneakyThrowsInvoke(context); + } catch (Exception rethrow) { + LOG.errorv( + rethrow, + "[Throw] method: {0}(), exception", + mn + ); + throw rethrow; + } finally { + sw.stop(); + } + + if (logged.enableAfterLog()) { + LOG.infov( + "[Return] method: {0}(), result: {1}, elapsed: {2}", + mn, + ret, + sw + ); + } + return ret; + } + + @SneakyThrows + Object doSneakyThrowsInvoke(InvocationContext context) { + return context.proceed(); + } +} diff --git a/src/main/java/space/ao/services/support/model/AccessToken.java b/src/main/java/space/ao/services/support/model/AccessToken.java new file mode 100644 index 0000000..42a1002 --- /dev/null +++ b/src/main/java/space/ao/services/support/model/AccessToken.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.Builder; +import lombok.Value; + +import javax.crypto.spec.IvParameterSpec; +import java.time.ZonedDateTime; +import java.util.Set; + +@Builder +@Value +public class AccessToken { + public static final String SHARED_SECRET_KEY = "sharedSecret"; + public static final String SHARED_IV_KEY = "sharedInitializationVector"; + public static final String USER_ID = "userId"; + public static final String CLIENT_UUID = "clientUUID"; + public static final String AK_CLIENT_UUID = "AccessToken-clientUUID"; + + public static final String JWT_ID = "jti"; + + String userId; + String clientUUID; + String endpoint; + String sharedSecret; + IvParameterSpec sharedInitializationVector; + ZonedDateTime expiresAt; + String openApiAppletId; + String openApiAppletVersion; + Set openApiScopes; + boolean openApi; // judge if it is an open api token + String token; // the original string based access token +} diff --git a/src/main/java/space/ao/services/support/model/AlgorithmConfig.java b/src/main/java/space/ao/services/support/model/AlgorithmConfig.java new file mode 100644 index 0000000..6c3eec6 --- /dev/null +++ b/src/main/java/space/ao/services/support/model/AlgorithmConfig.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@Schema(description = "网关总体加密算法相关的配置信息") +public class AlgorithmConfig { + PublicKey publicKey; + Transportation transportation; + + public static AlgorithmConfig of(String publicKeyAlg, Integer publicKeySize, String transportationAlg, + Integer transportationKeySize, String transformation, String initializationVector){ + AlgorithmConfig algorithmConfig = new AlgorithmConfig(); + PublicKey publicKey = new PublicKey(); + Transportation transportation = new Transportation(); + { + publicKey.algorithm = publicKeyAlg; + publicKey.keySize = publicKeySize; + transportation.algorithm = transportationAlg; + transportation.keySize = transportationKeySize; + transportation.transformation = transformation; + transportation.initializationVector = initializationVector; + + algorithmConfig.publicKey = publicKey; + algorithmConfig.transportation =transportation; + } + + return algorithmConfig; + } + +} diff --git a/src/main/java/space/ao/services/support/model/OfficialPlatform.java b/src/main/java/space/ao/services/support/model/OfficialPlatform.java new file mode 100644 index 0000000..288e9c8 --- /dev/null +++ b/src/main/java/space/ao/services/support/model/OfficialPlatform.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Objects; + +@AllArgsConstructor +public enum OfficialPlatform{ + PROD("https://ao.space", "ao.space"), + PROD_SERVICES("https://services.ao.space", "ao.space"), + RC("https://eulix.xyz", "eulix.xyz"), + RC_SERVICES("https://services.eulix.xyz", "eulix.xyz"), + + DEV("https://dev.eulix.xyz", "dev-space.eulix.xyz"), + DEV_SERVICES("https://dev-services.eulix.xyz", "dev-space.eulix.xyz"), + + QA("https://qa.eulix.xyz", "qa-space.eulix.xyz"), + QA_SERVICES("https://qa-services.eulix.xyz", "qa-space.eulix.xyz"), + + SIT("https://sit.eulix.xyz", "sit-space.eulix.xyz"), + SIT_SERVICES("https://sit-services.eulix.xyz", "sit-space.eulix.xyz"), + + TEST("https://test.eulix.xyz", "test-space.eulix.xyz"), + TEST_SERVICES("https://test-services.eulix.xyz", "test-space.eulix.xyz"), + + ; + + @Getter + private final String platformUrl; + @Getter + private final String userDomain; + public static boolean isOfficialByPlatformUrl(String platformUrl){ + for (var url: OfficialPlatform.values()) { + if(Objects.equals(url.platformUrl, platformUrl)){ + return true; + } + } + return false; + } + public static boolean isOfficialByUserDomain(String userDomain){ + int index = userDomain.indexOf('.'); + if (index != -1) { + userDomain = userDomain.substring(index + 1); + } + for (var url: OfficialPlatform.values()) { + if(Objects.equals(url.userDomain, userDomain)){ + return true; + } + } + return false; + } + + public static OfficialPlatform getOfficialPlatformByPlatformUrl(String platformUrl){ + for (var url: OfficialPlatform.values()) { + if(Objects.equals(url.platformUrl, platformUrl)){ + return url; + } + } + return null; + } + +} + diff --git a/src/main/java/space/ao/services/support/model/PageInfo.java b/src/main/java/space/ao/services/support/model/PageInfo.java new file mode 100644 index 0000000..5cb56a5 --- /dev/null +++ b/src/main/java/space/ao/services/support/model/PageInfo.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.Data; + +/** + * Used to define a group of properties to wrap the page info within a REST query request. + */ +@Data(staticConstructor = "of") +public class PageInfo { + private final long total; + private final int page; + private final int pageSize; +} diff --git a/src/main/java/space/ao/services/support/model/PageListResult.java b/src/main/java/space/ao/services/support/model/PageListResult.java new file mode 100644 index 0000000..b82e2bb --- /dev/null +++ b/src/main/java/space/ao/services/support/model/PageListResult.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.Data; + +import java.util.List; + +/** + * Used to define a group of properties to wrap the paged list result within a REST response. + * @param the element type of list + */ +@Data(staticConstructor = "of") +public class PageListResult { + private final List list; + private final PageInfo pageInfo; +} diff --git a/src/main/java/space/ao/services/support/model/PublicKey.java b/src/main/java/space/ao/services/support/model/PublicKey.java new file mode 100644 index 0000000..cec38de --- /dev/null +++ b/src/main/java/space/ao/services/support/model/PublicKey.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@Schema(description = "公钥的算法信息") +public class PublicKey{ + String algorithm; + Integer keySize; +} + diff --git a/src/main/java/space/ao/services/support/model/RefreshToken.java b/src/main/java/space/ao/services/support/model/RefreshToken.java new file mode 100644 index 0000000..1b3c050 --- /dev/null +++ b/src/main/java/space/ao/services/support/model/RefreshToken.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.Builder; +import lombok.Value; + +import java.time.ZonedDateTime; +import java.util.Set; + +@Builder +@Value +public class RefreshToken { + String userId; + String clientUUID; + String endpoint; + ZonedDateTime expiresAt; + public String openApiAppletId; + public String openApiAppletVersion; + public Set openApiScopes; + boolean openApi; // judge if it is an open api token +} diff --git a/src/main/java/space/ao/services/support/model/StatusResult.java b/src/main/java/space/ao/services/support/model/StatusResult.java new file mode 100644 index 0000000..85b3dcf --- /dev/null +++ b/src/main/java/space/ao/services/support/model/StatusResult.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.Data; + +/** + * Used to define a REST response for querying the server {@code status}. + */ +@Data(staticConstructor = "of") +public class StatusResult { + private final String status; + private final String version; + private final String message; + private final PlatformInfo platformInfo; + @Data + public static class PlatformInfo{ + private final String platformUrl; + private final boolean official; + public static PlatformInfo of(String platformUrl) { + return new PlatformInfo(platformUrl, OfficialPlatform.isOfficialByPlatformUrl(platformUrl)); + } + + } +} diff --git a/src/main/java/space/ao/services/support/model/Transportation.java b/src/main/java/space/ao/services/support/model/Transportation.java new file mode 100644 index 0000000..3c55c67 --- /dev/null +++ b/src/main/java/space/ao/services/support/model/Transportation.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.model; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@Schema(description = "数据传输的算法信息") +public class Transportation { + String algorithm; + Integer keySize; + String transformation; + @Schema(description = "base64 编码后的 16位字节数组 initializationVector") + String initializationVector; +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/support/platform/PlatformOpstageBoxRegKeyServiceRestClient.java b/src/main/java/space/ao/services/support/platform/PlatformOpstageBoxRegKeyServiceRestClient.java new file mode 100644 index 0000000..72ca965 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/PlatformOpstageBoxRegKeyServiceRestClient.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform; + +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.info.token.TokenCreateResults; +import space.ao.services.support.platform.info.token.TokenInfo; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; + +@RegisterRestClient(configKey = "psplatform-api") +@Tag(name = "Product Platform Service", + description = "Provides product platform related APIs.") +public interface PlatformOpstageBoxRegKeyServiceRestClient { + + @POST + @Path("/v2/platform/auth/box_reg_keys") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + TokenCreateResults createTokens(@Valid TokenInfo tokenInfo, @HeaderParam("Request-Id") @NotBlank String reqId); + +} diff --git a/src/main/java/space/ao/services/support/platform/PlatformOpstageServiceRestClient.java b/src/main/java/space/ao/services/support/platform/PlatformOpstageServiceRestClient.java new file mode 100644 index 0000000..6a71a2b --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/PlatformOpstageServiceRestClient.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Pattern; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.HeaderParam; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import org.eclipse.microprofile.openapi.annotations.parameters.Parameter; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import space.ao.services.support.platform.info.TrailUserRes; +import space.ao.services.gateway.version.CompatibleCheckRes; +import space.ao.services.gateway.version.PackageCheckRes; +import space.ao.services.support.log.Logged; + +@Path("/v2/service") +@RegisterRestClient(configKey = "psplatform-api") +@Tag(name = "Product Platform Service", + description = "Provides product platform related APIs.") +public interface PlatformOpstageServiceRestClient { + + + @GET + @Path("/packages/version/check") + @Produces(MediaType.APPLICATION_JSON) + PackageCheckRes check(@HeaderParam("Request-Id") String requestId, + @QueryParam("action") String action, + @QueryParam("app_pkg_name") String appName, + @QueryParam("app_pkg_type") String appType, + @QueryParam("cur_app_version") String curAppVersion, + @QueryParam("box_pkg_name") String boxName, + @QueryParam("box_pkg_type") String boxType, + @QueryParam("cur_box_version") String curBoxVersion, + @QueryParam("version_type") String versionType + ); + + + @GET + @Path("/packages/compatibility/check") + @Produces(MediaType.APPLICATION_JSON) + CompatibleCheckRes compatible(@NotBlank @Parameter(required = true) @HeaderParam("Request-Id") String requestId, + @NotBlank @Parameter(required = true) @QueryParam("app_pkg_name") String appPkgName, + @Parameter(required = true, schema = @Schema(enumeration = {"android", "ios"})) + @QueryParam("app_pkg_type") String appPkgType, + @NotBlank @Parameter(required = true) @QueryParam("box_pkg_name") String boxPkgName, + @Parameter(required = true, schema = @Schema(enumeration = {"box"})) + @QueryParam("box_pkg_type") String boxPkgType, + @NotNull @Pattern(regexp = "[a-zA-Z\\d.-]{0,50}") @QueryParam("cur_box_version") String curBoxVersion, + @NotNull @Pattern(regexp = "[a-zA-Z\\d.-]{0,50}") @QueryParam("cur_app_version") String curAppVersion, + @QueryParam("version_type") String versionType + ); + + @GET + @Path("/status") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "查询空间平台状态") + PlatformStatusResult status(@NotBlank @HeaderParam("Request-Id") String requestId); + + + @GET + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + @Logged + @Path("/trail/boxuser") + @Operation(description = "根据用户userid查询注册信息") + TrailUserRes trailUser(@NotBlank @Parameter(required = true) @HeaderParam("Request-Id") String requestId, + @NotNull @HeaderParam("Box-Reg-Key") String boxRegKey, + @Parameter(description = "试用用户类型,online/pc/pc_open") @QueryParam("type") String type, + @NotNull @QueryParam("box_uuid") String boxUUID, + @QueryParam("user_id") String userId); + +} diff --git a/src/main/java/space/ao/services/support/platform/PlatformRegistryServiceRestClient.java b/src/main/java/space/ao/services/support/platform/PlatformRegistryServiceRestClient.java new file mode 100644 index 0000000..53b5ae1 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/PlatformRegistryServiceRestClient.java @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; +import space.ao.services.support.platform.info.ability.PlatformApiResults; +import space.ao.services.support.platform.info.token.TokenCreateResults; +import space.ao.services.support.platform.info.token.TokenInfo; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.info.registry.ClientRegistryInfo; +import space.ao.services.support.platform.info.registry.ClientRegistryResult; +import space.ao.services.support.platform.info.registry.UserRegistryInfo; +import space.ao.services.support.platform.info.registry.UserRegistryResult; + +@Path("/v2/platform") +@RegisterRestClient(configKey = "ssplatform-api") +@Tag(name = "Registry Platform Service", + description = "Provides registry platform related APIs.") +public interface PlatformRegistryServiceRestClient { + + @POST + @Path("/auth/box_reg_keys") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + TokenCreateResults createTokens(@Valid TokenInfo tokenInfo, @HeaderParam("Request-Id") @NotBlank String reqId); + + @POST + @Path("/boxes/{box_uuid}/users") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + UserRegistryResult platformRegistryUser(@Valid UserRegistryInfo userRegistryInfo, + @HeaderParam("Request-Id") @NotBlank String reqId, + @HeaderParam("Box-Reg-Key") @NotBlank String boxRegKey, + @PathParam("box_uuid") @NotBlank String boxUUID); + + @DELETE + @Path("/boxes/{box_uuid}/users/{user_id}") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + void platformResetUser(@HeaderParam("Request-Id") @NotBlank String reqId, + @HeaderParam("Box-Reg-Key") @NotBlank String boxRegKey, + @PathParam("box_uuid") @NotBlank String boxUUID, + @PathParam("user_id") @NotBlank String userId); + + @POST + @Path("/boxes/{box_uuid}/users/{user_id}/clients") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + ClientRegistryResult platformRegistryClient(@Valid ClientRegistryInfo clientInfo, + @HeaderParam("Request-Id") @NotBlank String reqId, + @HeaderParam("Box-Reg-Key") @NotBlank String boxRegKey, + @PathParam("box_uuid") @NotBlank String boxUUID, + @PathParam("user_id") @NotBlank String userId); + + @DELETE + @Path("/boxes/{box_uuid}/users/{user_id}/clients/{client_uuid}") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Logged + void platformRestClient(@HeaderParam("Request-Id") @NotBlank String reqId, + @HeaderParam("Box-Reg-Key") @NotBlank String boxRegKey, + @PathParam("box_uuid") @NotBlank String boxUUID, + @PathParam("user_id") @NotBlank String userId, + @PathParam("client_uuid") @NotBlank String clientUUID); + + @GET + @Path("/ability") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "能力查询") + @Logged + PlatformApiResults ability(@NotBlank @HeaderParam("Request-Id") String requestId); + + @GET + @Path("/status") + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = "查询空间平台状态") + @Logged + PlatformStatusResult status(@NotBlank @HeaderParam("Request-Id") String requestId); + +} diff --git a/src/main/java/space/ao/services/support/platform/PlatformStatusResult.java b/src/main/java/space/ao/services/support/platform/PlatformStatusResult.java new file mode 100644 index 0000000..f68a402 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/PlatformStatusResult.java @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform; + +public record PlatformStatusResult(String status, String version) { + public static PlatformStatusResult of(String status, String version) { + return new PlatformStatusResult(status, version); + } +} diff --git a/src/main/java/space/ao/services/support/platform/PlatformUtils.java b/src/main/java/space/ao/services/support/platform/PlatformUtils.java new file mode 100644 index 0000000..fdef033 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/PlatformUtils.java @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform; + +import java.nio.charset.StandardCharsets; +import java.time.OffsetDateTime; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.TimeUnit; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +import com.google.common.base.Stopwatch; +import lombok.Getter; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.logging.Logger; +import space.ao.services.support.platform.info.ServiceEnum; +import space.ao.services.support.platform.info.ability.PlatformApis; +import space.ao.services.support.platform.info.token.TokenCreateResults; +import space.ao.services.support.platform.info.token.TokenInfo; +import space.ao.services.support.platform.info.token.TokenResult; +import space.ao.services.support.platform.info.token.TokenVerifySignInfo; +import space.ao.services.support.security.SecurityUtils; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.log.Logged; + +@ApplicationScoped +public class PlatformUtils { + + static final Logger LOG = Logger.getLogger("app.log"); + + @Inject + @RestClient + PlatformRegistryServiceRestClient platformRegistryServiceRestClient; + @Inject + @RestClient + PlatformOpstageBoxRegKeyServiceRestClient platformOpstageBoxRegKeyServiceRestClient; + @Inject + @RestClient + PlatformOpstageServiceRestClient platformOpstageServiceRestClient; + @Inject + ApplicationProperties properties; + + @Inject + OperationUtils utils; + @Inject + SecurityUtils securityUtils; + @Getter + private PlatformApis platformApis; + static final ConcurrentMap boxRegKeyCache = new ConcurrentHashMap<>(); + + public void setRegistryServiceRestClient(PlatformRegistryServiceRestClient platformRegistryServiceRestClient){ + this.platformRegistryServiceRestClient = platformRegistryServiceRestClient; + } + public String createRegistryBoxRegKey(String requestId){ + var token = boxRegKeyCache.get(ServiceEnum.REGISTRY.getServiceId()); + if (Objects.nonNull(token) && token.expiresAt().isAfter(OffsetDateTime.now().plusMinutes(5))){ + return token.boxRegKey(); + } + var serviceIds = new ArrayList(); + serviceIds.add(ServiceEnum.REGISTRY.getServiceId()); + return createBoxRegKey(requestId, serviceIds).tokenResults().get(0).boxRegKey(); + } + + + @Logged + public String createOpstageBoxRegKey(String requestId){ + var token = boxRegKeyCache.get(ServiceEnum.OPSTAGE.getServiceId()); + if (Objects.nonNull(token) && token.expiresAt().isAfter(OffsetDateTime.now().plusMinutes(5))){ + return token.boxRegKey(); + } + var serviceIds = new ArrayList(); + serviceIds.add(ServiceEnum.OPSTAGE.getServiceId()); + TokenCreateResults tokenResults = null; + try { + var sign = securityUtils.getSecurityProvider().signUsingBoxPrivateKey(requestId, + Base64.getEncoder().encodeToString( + utils.objectToJson(TokenVerifySignInfo.of(properties.boxUuid(), serviceIds)) + .getBytes(StandardCharsets.UTF_8))); + + tokenResults= platformOpstageBoxRegKeyServiceRestClient.createTokens(TokenInfo.of(properties.boxUuid(), serviceIds, sign), requestId); + for (var opstageToken : tokenResults.tokenResults()) { + boxRegKeyCache.put(opstageToken.serviceId(), opstageToken); + } + } catch (Exception e){ + LOG.errorv("createOpstageBoxRegKey error: {0}", e.getMessage()); + } + return tokenResults == null ? null : tokenResults.tokenResults().get(0).boxRegKey(); + } + + /** + * v1 老版本使用 boxUUID / v2 新版本使用私钥加密 sign + * @param requestId requestId + * @return Box Reg Key + */ + @Logged + public TokenCreateResults createBoxRegKey(String requestId, List serviceIds){ + var sign = securityUtils.getSecurityProvider().signUsingBoxPrivateKey(requestId, + Base64.getEncoder().encodeToString( + utils.objectToJson(TokenVerifySignInfo.of(properties.boxUuid(), serviceIds)) + .getBytes(StandardCharsets.UTF_8))); + var tokenResults= platformRegistryServiceRestClient.createTokens(TokenInfo.of(properties.boxUuid(), serviceIds, sign), requestId); + for (var token : tokenResults.tokenResults()) { + LOG.infov("service id {0} create new boxRegKey, {1}", token.serviceId(), token.boxRegKey()); + boxRegKeyCache.put(token.serviceId(), token); + } + return tokenResults; + } + + public TokenResult getTokenResult(String serviceId){ + return boxRegKeyCache.get(serviceId); + } + /** + * 查询空间服务平台是否可用 + */ + public boolean isRegistryPlatformAvailable(String requestId) { + try { + platformRegistryServiceRestClient.status(requestId); + } catch (Exception e){ + LOG.errorv("Registry Service Platform is not available - request-id: {0}, error: {1}, utils.getEnableInternetAccess(): {2}", + requestId, e.getMessage(), utils.getEnableInternetAccess()); + return false; + } + return true; + } + + /** + * 查询产品运营平台是否可用 + */ + public boolean isOpstagePlatformAvailable(String requestId) { + try { + platformOpstageServiceRestClient.status(requestId); + return true; + } catch (Exception e){ + LOG.warnv("Opstage Platform V2 is not available - request-id: {0}, error: {1}", requestId, e.getMessage()); + } + return false; + } + + /** + * 查询平台接口变化更新缓存 + */ + @PostConstruct + public void queryPlatformAbility() { + if(Boolean.TRUE.equals(utils.getEnableInternetAccess())){ + Stopwatch stopwatch = Stopwatch.createStarted(); + var requestId = utils.createRandomType4UUID(); + try { + var apis = platformRegistryServiceRestClient.ability(requestId); + var status = platformRegistryServiceRestClient.status(requestId); + + LOG.infov("Platform Ability has changed - request-id: {0}, PlatformApis: {1}", requestId, apis); + + platformApis = new PlatformApis(status.version(), new HashMap<>()); + + Map> services = platformApis.getServices(); + LOG.infov("eulixplatform-registry-service: {0}", toPlatformList(apis.platformApis())); + services.put("eulixplatform-registry-service", toPlatformList(apis.platformApis())); + platformApis.setServices(services); + platformApis.setVersion(status.version()); + LOG.infov("regularly query Platform Ability: {0} - request-id: {1}", stopwatch.elapsed(TimeUnit.SECONDS), requestId); + } catch (Exception e){ + LOG.errorv("regularly query Platform Ability failed - request-id: {0}, error: {1}", requestId, e.getMessage()); + } + } + } + + /** + * List platformApis; -> Map + */ + public Map toPlatformList(List platformApis){ + var result = new HashMap(); + for(var api: platformApis){ + result.put(api.briefUri().replace("/","_") + "_" + api.method(), api); + } + return result; + } + + /** + * 平台是否支持推送 + */ + public boolean isPlatformSupportPush() { + if (Objects.isNull(platformApis)) { + queryPlatformAbility(); + } + if (Objects.isNull(platformApis) || Objects.isNull(platformApis.getServices()) || Objects.isNull(platformApis.getServices().get("eulixplatform-registry-service"))) { + return false; + } + return platformApis.getServices().get("eulixplatform-registry-service").containsKey("message_push_post"); + } +} diff --git a/src/main/java/space/ao/services/support/platform/check/CheckApiStatus.java b/src/main/java/space/ao/services/support/platform/check/CheckApiStatus.java new file mode 100644 index 0000000..894f814 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/check/CheckApiStatus.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.support.platform.check; + +import jakarta.enterprise.util.Nonbinding; +import jakarta.interceptor.InterceptorBinding; + +import java.lang.annotation.Documented; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Target({ TYPE, METHOD }) +@Retention(RUNTIME) +@Documented +@Inherited +@InterceptorBinding +public @interface CheckApiStatus { + @Nonbinding String serviceName() default ""; + @Nonbinding String apiName() default ""; + +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/support/platform/check/CheckApiStatusInterceptor.java b/src/main/java/space/ao/services/support/platform/check/CheckApiStatusInterceptor.java new file mode 100644 index 0000000..4ad5589 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/check/CheckApiStatusInterceptor.java @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.check; + +import jakarta.annotation.Priority; +import jakarta.inject.Inject; +import jakarta.interceptor.AroundInvoke; +import jakarta.interceptor.Interceptor; +import jakarta.interceptor.InvocationContext; +import lombok.SneakyThrows; +import org.jboss.logging.Logger; +import space.ao.services.support.platform.PlatformUtils; +import java.lang.reflect.Parameter; +import java.util.Arrays; +import java.util.Objects; + +@CheckApiStatus +@Priority(220) +@Interceptor +@SuppressWarnings("unused") // Used by the framework +public class CheckApiStatusInterceptor { + static final Logger LOG = Logger.getLogger("app.log"); + @Inject + PlatformUtils platformUtils; + @AroundInvoke + Object checkApiStatus(InvocationContext context) { + final CheckApiStatus checkApiStatus = context.getMethod().getAnnotation(CheckApiStatus.class); + + Parameter[] paramsName = context.getMethod().getParameters(); + Object[] paramsValues = context.getParameters(); + + String requestId = Arrays.stream(paramsName) + .filter(param -> "Request-Id".equals(param.getName())) + .findFirst() + .map(param -> paramsValues[Arrays.asList(paramsName).indexOf(param)].toString()) + .orElse("CheckPlatformStatus"); + if(Objects.isNull(platformUtils.getPlatformApis())){ + platformUtils.queryPlatformAbility(); + } + var serviceName = platformUtils.getPlatformApis().getServices().get(checkApiStatus.serviceName()); + if(Objects.isNull(serviceName)){ + LOG.errorv("[Throw] method: {0}(), exception: {1}, requestId: {2}", context.getMethod().getName(), + "Service not found", requestId); + return null; + } + if(!serviceName.containsKey(checkApiStatus.apiName())){ + LOG.errorv("[Throw] method: {0}(), exception: {1}, requestId: {2}", context.getMethod().getName(), + "Api not found", requestId); + return null; + } + Object ret; + try { + ret = doSneakyThrowsInvoke(context); + } catch (Exception rethrow) { + LOG.errorv(rethrow,"[Throw] method: {0}(), exception"); + throw rethrow; + } + return ret; + } + + @SneakyThrows + Object doSneakyThrowsInvoke(InvocationContext context) { + return context.proceed(); + } +} diff --git a/src/main/java/space/ao/services/support/platform/check/CheckPlatformStatus.java b/src/main/java/space/ao/services/support/platform/check/CheckPlatformStatus.java new file mode 100644 index 0000000..bd12012 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/check/CheckPlatformStatus.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.check; + +import jakarta.enterprise.util.Nonbinding; +import jakarta.interceptor.InterceptorBinding; + +import java.lang.annotation.Documented; +import java.lang.annotation.Inherited; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * @author zhichuang + * @see CheckPlatformStatusInterceptor + * @date 2023/4/7 0007 + **/ +@Target({ TYPE, METHOD }) +@Retention(RUNTIME) +@Documented +@Inherited +@InterceptorBinding +public @interface CheckPlatformStatus { + @Nonbinding PlatformTypeEnum type() default PlatformTypeEnum.SPACE; + @Nonbinding boolean isNeedCheckNetworkChannel() default true; +} diff --git a/src/main/java/space/ao/services/support/platform/check/CheckPlatformStatusInterceptor.java b/src/main/java/space/ao/services/support/platform/check/CheckPlatformStatusInterceptor.java new file mode 100644 index 0000000..a7d4865 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/check/CheckPlatformStatusInterceptor.java @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.check; + +import jakarta.annotation.Priority; +import jakarta.inject.Inject; +import jakarta.interceptor.AroundInvoke; +import jakarta.interceptor.Interceptor; +import jakarta.interceptor.InvocationContext; +import lombok.SneakyThrows; +import org.jboss.logging.Logger; +import space.ao.services.support.response.ResponseBase; +import space.ao.services.support.response.ResponseBaseEnum; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.platform.PlatformUtils; +import space.ao.services.support.service.ServiceError; +import space.ao.services.support.service.ServiceOperationException; + +import java.lang.reflect.Parameter; +import java.util.Arrays; + +/** + * @author zhichuang + * @date 2023/4/7 0007 + **/ + +@CheckPlatformStatus +@Priority(220) +@Interceptor +@SuppressWarnings("unused") // Used by the framework +public class CheckPlatformStatusInterceptor { + static final Logger LOG = Logger.getLogger("app.log"); + @Inject + PlatformUtils platformUtils; + @Inject + OperationUtils operationUtils; + @AroundInvoke + Object checkPlatformStatus(InvocationContext context) { + final CheckPlatformStatus checkPlatformStatus = context.getMethod().getAnnotation(CheckPlatformStatus.class); + + Parameter[] paramsName = context.getMethod().getParameters(); + Object[] paramsValues = context.getParameters(); + + String requestId = Arrays.stream(paramsName) + .filter(param -> "RequestId".equalsIgnoreCase(param.getName())) + .findFirst() + .map(param -> paramsValues[Arrays.asList(paramsName).indexOf(param)].toString()) + .orElse("CheckPlatformStatus"); + + + switch (checkPlatformStatus.type()) { + case SPACE -> { + var spaceStatus = platformUtils.isRegistryPlatformAvailable(requestId); + if (!spaceStatus) { + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.SPACE_SERVICE_PLATFORM_ERROR).build(); + } + if (checkPlatformStatus.isNeedCheckNetworkChannel() && Boolean.FALSE.equals(operationUtils.getEnableInternetAccess())) { + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.SPACE_SERVICE_PLATFORM_ERROR).build(); + } + } + case PRODUCT -> { + var productStatus = platformUtils.isOpstagePlatformAvailable(requestId); + if (!productStatus) { + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.PRODUCT_SERVICE_PLATFORM_ERROR).build(); + } + if (checkPlatformStatus.isNeedCheckNetworkChannel() && Boolean.FALSE.equals(operationUtils.getEnableInternetAccess())) { + return ResponseBase.fromResponseBaseEnum(requestId, ResponseBaseEnum.PRODUCT_SERVICE_PLATFORM_ERROR).build(); + } + } + default -> throw new ServiceOperationException(ServiceError.PLATFORM_TYPE_ERROR); + } + + + Object ret; + try { + ret = doSneakyThrowsInvoke(context); + } catch (Exception rethrow) { + LOG.errorv(rethrow,"[Throw] method: {0}(), exception"); + throw rethrow; + } + return ret; + } + + @SneakyThrows + Object doSneakyThrowsInvoke(InvocationContext context) { + return context.proceed(); + } +} diff --git a/src/main/java/space/ao/services/support/platform/check/PlatformTypeEnum.java b/src/main/java/space/ao/services/support/platform/check/PlatformTypeEnum.java new file mode 100644 index 0000000..e786680 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/check/PlatformTypeEnum.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.check; + +/** + * @author zhichuang + * @date 2023/4/10 0010 + **/ +public enum PlatformTypeEnum { + PRODUCT, SPACE +} diff --git a/src/main/java/space/ao/services/support/platform/info/ServiceEnum.java b/src/main/java/space/ao/services/support/platform/info/ServiceEnum.java new file mode 100644 index 0000000..15c223e --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/ServiceEnum.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info; + +import java.util.Arrays; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum ServiceEnum { + REGISTRY("10001", "官方空间平台"), + OPSTAGE("10002", "官方产品服务平台"), + ; + + @Getter + final String serviceId; + final String serviceName; + + public static ServiceEnum fromValue(String value) { + return Arrays.stream(values()).filter(serviceType -> serviceType.getServiceId().equals(value)).findFirst().orElseThrow(); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/TrailUserRes.java b/src/main/java/space/ao/services/support/platform/info/TrailUserRes.java new file mode 100644 index 0000000..9b997e6 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/TrailUserRes.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info; + +import jakarta.persistence.Column; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import java.time.OffsetDateTime; + +@Data +public class TrailUserRes { + @Schema(description = "id") + private Long id; + + @Schema(description = "邮箱") + private String email; + + private String phoneNumber; + + @Schema(description = "姓名") + private String userName; + + private String address; + + private Long spaceId; + + private Long memberId; + + @Schema(description = "邀请链接") + private String inviteParam; + + @Schema(description = "试用用户类型,online/pc") + private String type; + + @Schema(description = "是否订阅") + private Boolean isSubscribed; + + @Schema(description = "试用用户阶段,trial/test/official") + private String stage; + + @Schema(description = "0-正常;1-禁用;2-已过期") + private Integer state; + + @Column(name = "extra") + private String extra; + + @Schema(description = "创建时间") + private OffsetDateTime createAt; + + @Schema(description = "更新时间") + private OffsetDateTime updateAt; + + @Schema(description = "过期时间") + private OffsetDateTime expiresAt; +} diff --git a/src/main/java/space/ao/services/support/platform/info/ability/PlatformApiResults.java b/src/main/java/space/ao/services/support/platform/info/ability/PlatformApiResults.java new file mode 100644 index 0000000..d3ad1c0 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/ability/PlatformApiResults.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.ability; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import java.util.List; + +/** + * 空间平台APIs + */ +public record PlatformApiResults(@Schema(description = "空间平台API列表") List platformApis) { + @JsonCreator + public PlatformApiResults(@JsonProperty("platformApis") List platformApis) { + this.platformApis = platformApis; + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/ability/PlatformApiTypeEnum.java b/src/main/java/space/ao/services/support/platform/info/ability/PlatformApiTypeEnum.java new file mode 100644 index 0000000..e690034 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/ability/PlatformApiTypeEnum.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.ability; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +@AllArgsConstructor +public enum PlatformApiTypeEnum { + BASIC_API("basic_api", "空间平台基础api"), + EXTENSION_API("extension_api", "空间平台扩展api"), + PRODUCT_SERVICE_API("product_service_api", "产品服务api"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; + + public static PlatformApiTypeEnum fromValue(String value) { + return Arrays.stream(values()).filter(apiType -> apiType.getName().equals(value)).findFirst().orElseThrow(); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/ability/PlatformApis.java b/src/main/java/space/ao/services/support/platform/info/ability/PlatformApis.java new file mode 100644 index 0000000..0f98bf0 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/ability/PlatformApis.java @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.ability; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.validator.ValueOfEnum; + +import java.util.List; +import java.util.Map; + +@Data +@NoArgsConstructor +public class PlatformApis { + @JsonCreator + public PlatformApis(@JsonProperty("version") String version, + @JsonProperty("services") Map> services) { + this.version = version; + this.services = services; + } + + private String version; + private Map> services; + + public record PlatformApi(@Schema(description = "http method") String method, + @Schema(description = "uri,如/platform/v*/api/registry/box") String uri, + @Schema(description = "简略uri,以四级目录开头,如/registry/box") String briefUri, + @Schema(description = "兼容的API版本列表,如1,2,3") List compatibleVersions, + @Schema(description = "API分类(空间平台基础api、空间平台扩展api、产品服务api),取值:basic_api、extension_api、product_service_api") @ValueOfEnum(enumClass = PlatformApiTypeEnum.class, valueMethod = "getName") String type, + @Schema(description = "API描述") String desc) { + } + + +} diff --git a/src/main/java/space/ao/services/support/platform/info/invites/ActivityReq.java b/src/main/java/space/ao/services/support/platform/info/invites/ActivityReq.java new file mode 100644 index 0000000..b329f43 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/invites/ActivityReq.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.invites; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.validator.ValueOfEnum; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import java.time.OffsetDateTime; +import java.util.List; + +@Data(staticConstructor = "of") +public class ActivityReq { + @Schema(description = "name") + @NotBlank + private String name; + + @Schema(description = "活动规则") + @NotBlank + private String content; + + @Schema(description = "活动封面地址") + private String imageUrl; + + @Schema(description = "活动奖励,元素1为第1档,元素2为第2档,元素3为第3档") + private List rewords; + + @Schema(description = "活动类型,trial/proposal/questionnaire") + @ValueOfEnum(enumClass = ActivityTypeEnum.class, valueMethod = "getName") + @NotNull + private String type; + + @Schema(description = "开始时间") + private OffsetDateTime startAt; + + @Schema(description = "结束时间") + private OffsetDateTime endAt; + + @Data(staticConstructor = "of") + public static class Reword { + @Schema(description = "阈值") + private Integer threshold; + + @Schema(description = "奖品名称") + private String rewardName; + + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/invites/ActivityTypeEnum.java b/src/main/java/space/ao/services/support/platform/info/invites/ActivityTypeEnum.java new file mode 100644 index 0000000..c6769d5 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/invites/ActivityTypeEnum.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.invites; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +@AllArgsConstructor +public enum ActivityTypeEnum { + TRIAL("trial", "试用裂表"), + PROPOSAL("proposal", "意见反馈"), + QUESTIONNAIRE("questionnaire", "问卷反馈"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; + + public static ActivityTypeEnum fromValue(String name) { + return Arrays.stream(values()) + .filter(value -> value.getName().equals(name)) + .findFirst() + .orElseThrow(); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteAcceptRes.java b/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteAcceptRes.java new file mode 100644 index 0000000..aac1c78 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteAcceptRes.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.invites; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import java.util.List; + +@Data(staticConstructor = "of") +public class TrailInviteAcceptRes { + @Schema(description = "激活人数") + private final Long activateCount; + + @Schema(description = "活动档数") + private final List rewords; +} diff --git a/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteReq.java b/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteReq.java new file mode 100644 index 0000000..93b3934 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteReq.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.invites; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.validation.constraints.NotNull; + +@Data(staticConstructor = "of") +public class TrailInviteReq { + @NotNull + @Schema(description = "活动id") + private Long activityId; + + @Schema(description = "email") + private String email; + + @Schema(description = "boxUUID, 由网关设置前端忽略") + private String boxUUID; + + @Schema(description = "userId, 由网关设置前端忽略") + private String userId; +} diff --git a/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteRes.java b/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteRes.java new file mode 100644 index 0000000..f2aa06a --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/invites/TrailInviteRes.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.invites; + +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import java.time.OffsetDateTime; + +@Data(staticConstructor = "of") +public class TrailInviteRes { + @Schema(description = "id") + private Long id; + + @Schema(description = "活动id") + private Long activityId; + + @Schema(description = "email") + private String email; + + @Schema(description = "boxUUID") + private String boxUUID; + + @Schema(description = "userId") + private String userId; + + @Schema(description = "试用邀请码") + private String inviteCode; + + @Schema(description = "试用邀请链接") + private String inviteParam; + + // 0-未使用;1-已使用 + @Schema(description = "邀请状态,0-未使用;1-已使用") + private Integer state; + + @Schema(description = "超时时间") + private OffsetDateTime expiresAt; + + @Schema(description = "创建时间") + private OffsetDateTime createAt; + + @Schema(description = "更新时间") + private OffsetDateTime updateAt; +} diff --git a/src/main/java/space/ao/services/support/platform/info/push/ChannelProperties.java b/src/main/java/space/ao/services/support/platform/info/push/ChannelProperties.java new file mode 100644 index 0000000..178b194 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/push/ChannelProperties.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.push; + +import jakarta.validation.constraints.NotEmpty; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@AllArgsConstructor(staticName = "of") +@NoArgsConstructor +public class ChannelProperties { + @NotEmpty + @Schema(description = "必选,厂商通道相关的特殊配置。系统弹窗,只有display_type=notification时有效,表示华为、小米、oppo、vivo、魅族的设备离线时走系统通道下发时打开指定页面acitivity的完整包路径") + private String channelActivity; +} diff --git a/src/main/java/space/ao/services/support/platform/info/push/DisplayTypeEnum.java b/src/main/java/space/ao/services/support/platform/info/push/DisplayTypeEnum.java new file mode 100644 index 0000000..c2cb244 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/push/DisplayTypeEnum.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.push; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum DisplayTypeEnum { + NOTIFICATION("notification", "通知"), + MESSAGE("message", "消息"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; + +} diff --git a/src/main/java/space/ao/services/support/platform/info/push/MessagePayload.java b/src/main/java/space/ao/services/support/platform/info/push/MessagePayload.java new file mode 100644 index 0000000..e01e894 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/push/MessagePayload.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.push; + +import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.validator.ValueOfEnum; + +@Data +@AllArgsConstructor(staticName = "of") +public class MessagePayload { + @ValueOfEnum(enumClass = DisplayTypeEnum.class, valueMethod = "getName") + @Schema(description = "消息类型,枚举:notification-通知/message-消息") + private String displayType; + + @Schema(description = "消息体") + private MessagePayloadBody body; + + @Schema(description = "可选,Map格式,用户自定义key-value") + private Map extra; +} diff --git a/src/main/java/space/ao/services/support/platform/info/push/MessagePayloadBody.java b/src/main/java/space/ao/services/support/platform/info/push/MessagePayloadBody.java new file mode 100644 index 0000000..8ca18bb --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/push/MessagePayloadBody.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.push; + +import jakarta.validation.constraints.NotBlank; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.validator.ValueOfEnum; +import space.ao.services.push.dto.AfterOpenAction; + +@Data +@AllArgsConstructor(staticName = "of") +public class MessagePayloadBody { + @Schema(description = "通知文字描述,当displayType=notification时必填") + private String text; + + @Schema(description = "通知标题,当displayType=notification时必填") + private String title; + + @ValueOfEnum(enumClass = AfterOpenAction.class, valueMethod = "getName") + @Schema(description = "点击通知的后续行为(默认为打开app),当displayType=notification时必填") + private String afterOpen; + + @Schema(description = "通知栏点击后跳转的URL,当after_open=go_url时必填") + private String url; + + @Schema(description = "通知栏点击后打开的Activity,当afterOpen=go_activity时必填") + private String activity; + + @Schema(description = "用户自定义内容,可以为字符串或者JSON格式。当display_type=message时,或者当display_type=notification且after_open=go_custom时,必填") + private String custom; + + @Data + @AllArgsConstructor(staticName = "of") + public static class Message { + @NotBlank + @Schema(description = "消息 id") + private String messageId; + } + +} diff --git a/src/main/java/space/ao/services/support/platform/info/push/MessagePolicy.java b/src/main/java/space/ao/services/support/platform/info/push/MessagePolicy.java new file mode 100644 index 0000000..f66a083 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/push/MessagePolicy.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.push; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@AllArgsConstructor(staticName = "of") +public class MessagePolicy { + @Schema(description = "可选,定时发送时,若不填写表示立即发送。格式: YYYY-MM-DD hh:mm:ss") + private String startTime; + + @Schema(description = "可选,消息过期时间,其值不可小于发送时间或者startTime。如果不填写此参数,默认为3天后过期。格式: YYYY-MM-DD hh:mm:ss") + private String expireTime; +} diff --git a/src/main/java/space/ao/services/support/platform/info/push/MessageTypeEnum.java b/src/main/java/space/ao/services/support/platform/info/push/MessageTypeEnum.java new file mode 100644 index 0000000..54e05e9 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/push/MessageTypeEnum.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.push; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum MessageTypeEnum { + CLIENTCAST("clientcast", "推送目标设备"), + BROADCAST("broadcast", "广播"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; + +} diff --git a/src/main/java/space/ao/services/support/platform/info/push/PushMessage.java b/src/main/java/space/ao/services/support/platform/info/push/PushMessage.java new file mode 100644 index 0000000..9e24916 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/push/PushMessage.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.push; + +import java.util.List; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.validator.ValueOfEnum; + +@Data +@AllArgsConstructor(staticName = "of") +@RegisterForReflection +public class PushMessage { + + @ValueOfEnum(enumClass = MessageTypeEnum.class, valueMethod = "getName") + @Schema(description = "消息发送类型,枚举值:clientcast-推送目标设备/broadcast-广播") + private String type; + + @Schema(description = "盒子的 UUID") + private String boxUUID; + + @Schema(description = "用户的 ID列表,当type=user_cast时,必填") + private List userIds; + + @Schema(description = "客户端的 UUID列表,当type=client_cast时,必填") + private List clientUUIDs; + + @Schema(description = "发送消息描述,可选") + private String description; + + @Schema(description = "消息") + private MessagePayload payload; + + @Schema(description = "发送策略") + private MessagePolicy policy; + + @Schema(description = "厂商通道相关的特殊配置") + private ChannelProperties channelProperties; + +} diff --git a/src/main/java/space/ao/services/support/platform/info/push/UserIdAndClientUUID.java b/src/main/java/space/ao/services/support/platform/info/push/UserIdAndClientUUID.java new file mode 100644 index 0000000..7089ee5 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/push/UserIdAndClientUUID.java @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.push; + +import io.quarkus.runtime.annotations.RegisterForReflection; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +@Data +@AllArgsConstructor(staticName = "of") +@RegisterForReflection +public class UserIdAndClientUUID { + + @Schema(description = "用户的 ID") + private String userId; + + @Schema(description = "客户端的 UUID") + private String clientUUID; +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/support/platform/info/registry/ClientRegistryInfo.java b/src/main/java/space/ao/services/support/platform/info/registry/ClientRegistryInfo.java new file mode 100644 index 0000000..f47a6c1 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/ClientRegistryInfo.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.registry; + +import jakarta.validation.constraints.NotBlank; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.validator.ValueOfEnum; + +public record ClientRegistryInfo(@NotBlank @Schema(description = "客户端的 UUID") String clientUUID, + @NotBlank @Schema(description = "客户端类型(绑定、扫码授权),取值:client_bind、client_auth") + @ValueOfEnum(enumClass = RegistryTypeEnum.class, valueMethod = "getName") String clientType) { + + public static ClientRegistryInfo of(String clientUUID, String clientType) { + return new ClientRegistryInfo(clientUUID, clientType); + } +} + diff --git a/src/main/java/space/ao/services/support/platform/info/registry/ClientRegistryResult.java b/src/main/java/space/ao/services/support/platform/info/registry/ClientRegistryResult.java new file mode 100644 index 0000000..937c6f7 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/ClientRegistryResult.java @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.support.platform.info.registry; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record ClientRegistryResult(@Schema(description = "盒子的 UUID") String boxUUID, + @Schema(description = "用户的 ID") String userId, + @Schema(description = "客户端的 UUID") String clientUUID, + @Schema(description = "客户端类型(绑定、扫码授权),取值:client_bind、client_auth") String clientType) { +} diff --git a/src/main/java/space/ao/services/support/platform/info/registry/RegistryTypeEnum.java b/src/main/java/space/ao/services/support/platform/info/registry/RegistryTypeEnum.java new file mode 100644 index 0000000..6244711 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/RegistryTypeEnum.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.registry; + +import java.util.Arrays; +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum RegistryTypeEnum { + BOX("box", "傲来盒子"), + USER_ADMIN("user_admin", "用户管理员"), + USER_MEMBER("user_member", "用户成员"), + CLIENT_BIND("client_bind", "绑定类型客户端"), + CLIENT_AUTH("client_auth", "授权类型客户端"), + ; + + @Getter + private final String name; + @Getter + private final String desc; + + public static RegistryTypeEnum fromValue(String value) { + return Arrays.stream(values()).filter(appType -> appType.getName().equals(value)).findFirst().orElseThrow(); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/registry/SubdomainGenInfo.java b/src/main/java/space/ao/services/support/platform/info/registry/SubdomainGenInfo.java new file mode 100644 index 0000000..7d7a27b --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/SubdomainGenInfo.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.registry; + +import jakarta.validation.constraints.Max; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record SubdomainGenInfo(@Schema(description = "有效期,单位秒,最长7天") @Max(604800) Integer effectiveTime) { + public static SubdomainGenInfo of(Integer effectiveTime) { + return new SubdomainGenInfo(effectiveTime); + } +} + diff --git a/src/main/java/space/ao/services/support/platform/info/registry/SubdomainGenResult.java b/src/main/java/space/ao/services/support/platform/info/registry/SubdomainGenResult.java new file mode 100644 index 0000000..ee9213c --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/SubdomainGenResult.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.registry; + +import java.time.OffsetDateTime; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record SubdomainGenResult(@Schema(description = "盒子的 UUID") String boxUUID, + @Schema(description = "全局唯一的 subdomain") String subdomain, + @Schema(description = "subdomain过期时间") OffsetDateTime expiresAt) { + public static SubdomainGenResult of(String boxUUID, String subdomain, OffsetDateTime expiresAt) { + return new SubdomainGenResult(boxUUID, subdomain, expiresAt); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/registry/SubdomainUpdateInfo.java b/src/main/java/space/ao/services/support/platform/info/registry/SubdomainUpdateInfo.java new file mode 100644 index 0000000..9c641e4 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/SubdomainUpdateInfo.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.registry; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record SubdomainUpdateInfo( + @Schema(description = "子域名,最长100字符") @Size(max = 100) @NotBlank String subdomain) { + public static SubdomainUpdateInfo of(String subdomain) { + return new SubdomainUpdateInfo(subdomain); + } +} + diff --git a/src/main/java/space/ao/services/support/platform/info/registry/SubdomainUpdateResult.java b/src/main/java/space/ao/services/support/platform/info/registry/SubdomainUpdateResult.java new file mode 100644 index 0000000..1f62f65 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/SubdomainUpdateResult.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.registry; + +import java.util.List; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record SubdomainUpdateResult(@Schema(description = "是否成功") Boolean success, + @Schema(description = "盒子的 UUID, success为true时返回") String boxUUID, + @Schema(description = "用户id, success为true时返回") String userId, + @Schema(description = "全局唯一的 subdomain, success为true时返回") String subdomain, + @Schema(description = "错误码, success为false时返回") Integer code, + @Schema(description = "错误消息, success为false时返回") String error, + @Schema(description = "推荐的subdomain, success为false时返回") List recommends) { + public static SubdomainUpdateResult of(Boolean success, String boxUUID, String userId, String subdomain, Integer code, String error, List recommends) { + return new SubdomainUpdateResult(success, boxUUID, userId, subdomain, code, error, recommends); + } +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/support/platform/info/registry/UserRegistryInfo.java b/src/main/java/space/ao/services/support/platform/info/registry/UserRegistryInfo.java new file mode 100644 index 0000000..4d90bf9 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/UserRegistryInfo.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.registry; + +import jakarta.validation.constraints.NotBlank; +import org.eclipse.microprofile.openapi.annotations.media.Schema; +import space.ao.services.support.validator.ValueOfEnum; + +public record UserRegistryInfo(@NotBlank @Schema(description = "用户的 ID") String userId, + @Schema(description = "用户被指定的子域名字段") String subdomain, + @NotBlank @Schema(description = "用户类型(管理员、普通成员),取值:user_admin、user_member") + @ValueOfEnum(enumClass = RegistryTypeEnum.class, valueMethod = "getName") String userType, + @NotBlank @Schema(description = "客户端的 UUID") String clientUUID) { + + public static UserRegistryInfo of(String userId, String subdomain, String userTyped, String clientUUID) { + return new UserRegistryInfo(userId, subdomain, userTyped, clientUUID); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/registry/UserRegistryResult.java b/src/main/java/space/ao/services/support/platform/info/registry/UserRegistryResult.java new file mode 100644 index 0000000..69b420a --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/registry/UserRegistryResult.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.registry; + +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record UserRegistryResult(@Schema(description = "盒子的 UUID") String boxUUID, + @Schema(description = "用户的 ao ID") String userId, + @Schema(description = "为用户分配的用户域名,该域名可以用于后续的业务访问") String userDomain, + @Schema(description = "用户类型(管理员、普通成员),取值:user_admin、user_member") String userType, + @Schema(description = "客户端的 UUID") String clientUUID) { + public static UserRegistryResult of(String boxUUID, String userId, String userDomain, String userTyped, String clientUUID) { + return new UserRegistryResult(boxUUID, userId, userDomain, userTyped, clientUUID); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/token/TokenCreateResults.java b/src/main/java/space/ao/services/support/platform/info/token/TokenCreateResults.java new file mode 100644 index 0000000..b0bd4a0 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/token/TokenCreateResults.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.token; + +import java.util.List; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record TokenCreateResults(@Schema(description = "盒子的 UUID") String boxUUID, + @Schema(description = "盒子的注册码") List tokenResults) { + public static TokenCreateResults of(String boxUUID, List tokenResults) { + return new TokenCreateResults(boxUUID, tokenResults); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/token/TokenInfo.java b/src/main/java/space/ao/services/support/platform/info/token/TokenInfo.java new file mode 100644 index 0000000..b9397c8 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/token/TokenInfo.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.token; + +import java.util.List; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record TokenInfo(@NotBlank @Schema(description = "盒子的 UUID") String boxUUID, + @NotEmpty @Schema(description = "平台id:空间平台(serviceId=10001)、产品服务平台(serviceId=10002)") List serviceIds, + @Schema(description = "签名,使用公钥验证盒子身份时必传") String sign) { + public static TokenInfo of(String boxUUID, List serviceIds, String sign) { + return new TokenInfo(boxUUID, serviceIds, sign); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/token/TokenResult.java b/src/main/java/space/ao/services/support/platform/info/token/TokenResult.java new file mode 100644 index 0000000..06a8a6f --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/token/TokenResult.java @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.token; + +import java.time.OffsetDateTime; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +public record TokenResult(@Schema(description = "平台id") String serviceId, + @Schema(description = "盒子在当前平台的注册码") String boxRegKey, + @Schema(description = "注册码 token 有效时间, OffsetDateTime 类型") OffsetDateTime expiresAt) { + public static TokenResult of(String serviceId, String boxRegKey, OffsetDateTime expiresAt) { + return new TokenResult(serviceId, boxRegKey, expiresAt); + } +} diff --git a/src/main/java/space/ao/services/support/platform/info/token/TokenVerifySignInfo.java b/src/main/java/space/ao/services/support/platform/info/token/TokenVerifySignInfo.java new file mode 100644 index 0000000..f50d63b --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/info/token/TokenVerifySignInfo.java @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.info.token; + +import java.util.List; + +public record TokenVerifySignInfo(String boxUUID, List serviceIds) { + public static TokenVerifySignInfo of(String boxUUID, List serviceIds) { + return new TokenVerifySignInfo(boxUUID, serviceIds); + } +} diff --git a/src/main/java/space/ao/services/support/platform/temp/RequestTypeEnum.java b/src/main/java/space/ao/services/support/platform/temp/RequestTypeEnum.java new file mode 100644 index 0000000..ab8bf14 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/temp/RequestTypeEnum.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.support.platform.temp; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +@AllArgsConstructor +public enum RequestTypeEnum { + + REGISTRY_AUTH_CLIENT("registry_auth_client", "注册授权客户端"), + REGISTRY_USER("registry_user", "注册用户"), + RESET_AUTH_CLIENT("reset_auth_client", "重置授权客户端"), + ; + + @Getter + private final String name; + + @Getter + private final String desc; + + public static RequestTypeEnum fromValue(String value) { + return Arrays.stream(values()).filter(appType -> appType.getName().equals(value)).findFirst().orElseThrow(); + } +} diff --git a/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java b/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java new file mode 100644 index 0000000..fb44322 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/temp/TempInfoHandleService.java @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.temp; + +import com.google.common.base.Stopwatch; +import io.quarkus.panache.common.Sort; +import io.quarkus.scheduler.Scheduled; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.transaction.Transactional; +import org.jboss.logging.Logger; +import space.ao.services.account.member.dto.Const; +import space.ao.services.account.member.service.MemberManageService; +import space.ao.services.account.member.service.PlatformRegistryService; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.log.Logged; +import space.ao.services.support.platform.PlatformUtils; +import space.ao.services.support.platform.info.registry.ClientRegistryInfo; +import space.ao.services.support.platform.info.registry.UserRegistryInfo; + +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +/** + * @author zhichuang + * @date 2023/3/30 0030 + **/ +@ApplicationScoped +public class TempInfoHandleService { + + @Inject + TempRegistryInfoRepository tempRegistryInfoRepository; + static final Logger LOG = Logger.getLogger("app.log"); + @Inject + PlatformRegistryService platformRegistryService; + @Inject + OperationUtils operationUtils; + @Inject + PlatformUtils platformUtils; + @Inject + MemberManageService memberManageService; + @Inject + UserInfoRepository userInfoRepository; + @Scheduled(every = "2m") + @SuppressWarnings("unused") // Executing a Scheduled Task + void handle() { + Stopwatch stopwatch = Stopwatch.createStarted(); + if(Boolean.TRUE.equals(operationUtils.getEnableInternetAccess()) && platformUtils.isRegistryPlatformAvailable(stopwatch.toString())) { + handleTempInfo(); + } + LOG.info("regularly handle temp registry info completed - " + stopwatch.elapsed(TimeUnit.SECONDS)); + } + + + public void handleTempInfo(){ + var tempInfos = tempRegistryInfoRepository.findAll(Sort.by("createAt")).list(); + for(var tempInfo : tempInfos) { + switch (RequestTypeEnum.fromValue(tempInfo.getType())) { + case REGISTRY_AUTH_CLIENT -> { + var clientRegistryInfo = operationUtils.jsonToObject(tempInfo.getTempInfo(), ClientRegistryInfo.class); + registryClient(tempInfo, clientRegistryInfo); + } + case REGISTRY_USER -> { + var userRegistryInfo = operationUtils.jsonToObject(tempInfo.getTempInfo(), UserRegistryInfo.class); + registryUser(tempInfo, userRegistryInfo); + } + case RESET_AUTH_CLIENT -> resetAuthClient(tempInfo); + default -> { + } + } + } + } + + @Logged + @Transactional + public void registryClient(TempRegistryInfoEntity tempInfo, ClientRegistryInfo clientRegistryInfo){ + platformRegistryService.registryClient(tempInfo.getRequestId(), clientRegistryInfo, "aoid-" + tempInfo.getUserId()); + tempRegistryInfoRepository.delete(tempInfo.getRequestId()); + } + + @Logged + @Transactional + public void registryUser(TempRegistryInfoEntity tempInfo, UserRegistryInfo userRegistryInfo){ + var userRegistryResult = platformRegistryService.registryUser(tempInfo.getRequestId(), userRegistryInfo, true); + if (Objects.equals(tempInfo.getUserId(), Long.valueOf(Const.Admin.ADMIN_ID))){ + memberManageService.writeUserDomainToAdminFile(userRegistryResult.userDomain()); + } + userInfoRepository.updateUserDomainByUserid(userRegistryResult.userDomain(), tempInfo.getUserId()); + tempRegistryInfoRepository.delete(tempInfo.getRequestId()); + } + + @Logged + @Transactional + public void resetAuthClient(TempRegistryInfoEntity tempInfo){ + platformRegistryService.platformRegistryClientReset(tempInfo.getRequestId(), "aoid-" + tempInfo.getUserId(), tempInfo.getClientUUID()); + tempRegistryInfoRepository.delete(tempInfo.getRequestId()); + } + +} diff --git a/src/main/java/space/ao/services/support/platform/temp/TempRegistryInfoEntity.java b/src/main/java/space/ao/services/support/platform/temp/TempRegistryInfoEntity.java new file mode 100644 index 0000000..dad73af --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/temp/TempRegistryInfoEntity.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.temp; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +import java.time.OffsetDateTime; + +/** + * @author zhichuang + * @date 2023/3/30 0030 + **/ + +@Entity +@Getter +@Setter +@Table(name = "temp_registry_info") +public class TempRegistryInfoEntity extends PanacheEntityBase { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "request_id") + @NotNull + String requestId; + + @Column(name = "type") + @NotNull + private String type; + + @Column(name = "userid") + @NotNull + private Long userId; + + @Column(name = "client_uuid") + @NotNull + private String clientUUID; + + @Column(name = "temp_info") + @NotNull + private String tempInfo; + + @Column(name = "create_at") + @NotNull + private OffsetDateTime createAt; +} diff --git a/src/main/java/space/ao/services/support/platform/temp/TempRegistryInfoRepository.java b/src/main/java/space/ao/services/support/platform/temp/TempRegistryInfoRepository.java new file mode 100644 index 0000000..cdb0663 --- /dev/null +++ b/src/main/java/space/ao/services/support/platform/temp/TempRegistryInfoRepository.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.platform.temp; + +import io.quarkus.hibernate.orm.panache.PanacheRepository; +import jakarta.inject.Singleton; +import space.ao.services.support.log.Logged; + +import jakarta.transaction.Transactional; + +/** + * @author zhichuang + * @date 2023/3/30 0030 + **/ +@Singleton +public class TempRegistryInfoRepository implements PanacheRepository { + + + @Transactional + @Logged + public void insert(TempRegistryInfoEntity tempRegistryInfoEntity){ + persist(tempRegistryInfoEntity); + } + + @Transactional + @Logged + public void delete(String requestId){ + delete("requestId", requestId); + } +} diff --git a/src/main/java/space/ao/services/support/redis/RedisCommonStringService.java b/src/main/java/space/ao/services/support/redis/RedisCommonStringService.java new file mode 100644 index 0000000..4306c2d --- /dev/null +++ b/src/main/java/space/ao/services/support/redis/RedisCommonStringService.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.redis; + +import io.quarkus.redis.datasource.RedisDataSource; +import io.quarkus.redis.datasource.keys.KeyCommands; +import io.quarkus.redis.datasource.value.ValueCommands; +import jakarta.enterprise.context.ApplicationScoped; + +import java.util.List; + +@ApplicationScoped +public class RedisCommonStringService { + private final KeyCommands keyCommands; + private final ValueCommands countCommands; + + public RedisCommonStringService(RedisDataSource ds) { + countCommands = ds.value(String.class); + keyCommands = ds.key(); + } + + public void setex(String key, String value, long expire) { + countCommands.setex(key, expire, value); + } + + public void expire(String key, long expire) { + keyCommands.expire(key, expire); + } + + public void set(String key, String value) { + countCommands.set(key, value); + } + + public int del(String key) { + return keyCommands.del(key); + } + + public String get(String key) { + return countCommands.get(key); + } + + public List keys(String s) { + return keyCommands.keys(s); + } + + public long incr(String key) { + return countCommands.incr(key); + } +} diff --git a/src/main/java/space/ao/services/support/redis/RedisTokenService.java b/src/main/java/space/ao/services/support/redis/RedisTokenService.java new file mode 100644 index 0000000..cbe7ac1 --- /dev/null +++ b/src/main/java/space/ao/services/support/redis/RedisTokenService.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.redis; + +import space.ao.services.support.OperationUtils; +import space.ao.services.support.model.AccessToken; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import space.ao.services.support.platform.info.push.UserIdAndClientUUID; + +import java.time.ZonedDateTime; + +/** + * 使用 redis 管理短 token + * 短 token = `TOKEN-{aoid}-{MD5(aoid + "-bp-" + secret).substring(0,20)}`, `TOKEN-` 为 网关和 nginx 加入,前端请求时不需要加入 + *

+ * 其中 secret 为 accessToken 对应的加密对称密钥。 例如: aoid 为 aoid1 , 对称密钥为 IqNM95M7Iq , + * md5(aoid1-bp-IqNM95M7Iq)=af4f0f3627eaf087ed1568246bf053c1, Token 为 aoid1-af4f0f3627eaf087ed15 + *

+ * 局域网请求方式前端从协议上相当于直接对接微服务(不再通过网关 call 接口),前端请求时在 header 增加 accessToken 。 + */ +@ApplicationScoped +public class RedisTokenService { + @Inject + OperationUtils utils; + + private static final String KEY_PREFIX = "TOKEN-"; + + @Inject + RedisCommonStringService redisCommonStringService; + /** + * set token to redis + * @param token TOKEN key TOKEN-AOID-md5(secret) + */ + public void set(String aoid, String secret, AccessToken token) { + var expire = token.getExpiresAt().toEpochSecond() - ZonedDateTime.now().toEpochSecond(); + var key = generateKey(aoid, secret); + var value = utils.objectToJson(UserIdAndClientUUID.of(token.getUserId(), token.getClientUUID())); + redisCommonStringService.setex(key, value, expire); + } + + public int delete(String aoid, String secret) { + var key = generateKey(aoid, secret); + return redisCommonStringService.del(key); + } + + public void deleteByAoid(String aoid) { + var keys = redisCommonStringService.keys(KEY_PREFIX + aoid + "*"); + for (var key: keys) { + redisCommonStringService.del(key); + } + } + + public String get(String aoid, String secret) { + var key = generateKey(aoid, secret); + return redisCommonStringService.get(key); + } + + String generateKey(String aoid, String secret) { + return KEY_PREFIX + aoid + "-" + utils.encryptToMD5(aoid + "-bp-" + secret).substring(0,20); + } +} diff --git a/src/main/java/space/ao/services/support/redis/SecurityMessageRedisService.java b/src/main/java/space/ao/services/support/redis/SecurityMessageRedisService.java new file mode 100644 index 0000000..3a9e655 --- /dev/null +++ b/src/main/java/space/ao/services/support/redis/SecurityMessageRedisService.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.redis; + +import io.quarkus.redis.datasource.RedisDataSource; +import io.quarkus.redis.datasource.keys.KeyCommands; +import io.quarkus.redis.datasource.list.ListCommands; +import jakarta.enterprise.context.ApplicationScoped; + +import java.util.List; + +/** + * @author zhichuang + * @date 2023/7/26 0026 + **/ +@ApplicationScoped +public class SecurityMessageRedisService { + private final KeyCommands keyCommands; + private final ListCommands listCommands; + public SecurityMessageRedisService(RedisDataSource ds) { + listCommands = ds.list(String.class); + keyCommands = ds.key(); + } + + public void rpush(String key, String value) { + listCommands.rpush(key, value); + } + + public void expire(String key, long l) { + keyCommands.expire(key, l); + } + + public List lrange(String k, long start, long stop) { + return listCommands.lrange(k, start, stop); + } + + public void ltrim(String k, long start, long stop) { + listCommands.ltrim(k, start, stop); + } +} diff --git a/src/main/java/space/ao/services/support/redis/message/ReceiveMessage.java b/src/main/java/space/ao/services/support/redis/message/ReceiveMessage.java new file mode 100644 index 0000000..885644b --- /dev/null +++ b/src/main/java/space/ao/services/support/redis/message/ReceiveMessage.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.redis.message; + +public record ReceiveMessage(String messageId, String userId, String clientUUID, String optType, String requestId, String data) { +} diff --git a/src/main/java/space/ao/services/support/redis/message/RedisArgsConstant.java b/src/main/java/space/ao/services/support/redis/message/RedisArgsConstant.java new file mode 100644 index 0000000..7480c1e --- /dev/null +++ b/src/main/java/space/ao/services/support/redis/message/RedisArgsConstant.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.redis.message; + +enum RedisArgsConstant { + ASTERISK("*"), + USERID("userId"), + CLIENT_UUID("clientUUID"), + OPT_TYPE("optType"), + REQUEST_ID("requestId"), + DATA("data"), + TITLE("title"), + TEXT("text") + ; + + final String key; + + RedisArgsConstant(String key) { + this.key = key; + } + +} diff --git a/src/main/java/space/ao/services/support/redis/message/RedisMessageService.java b/src/main/java/space/ao/services/support/redis/message/RedisMessageService.java new file mode 100644 index 0000000..c00bb5f --- /dev/null +++ b/src/main/java/space/ao/services/support/redis/message/RedisMessageService.java @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.redis.message; + +import io.quarkus.redis.datasource.RedisDataSource; +import io.quarkus.redis.datasource.stream.StreamCommands; +import io.quarkus.redis.datasource.stream.StreamMessage; +import io.quarkus.redis.datasource.stream.XReadArgs; +import jakarta.enterprise.context.ApplicationScoped; +import org.apache.commons.codec.binary.Base64; +import org.jboss.logging.Logger; + +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +@ApplicationScoped +public class RedisMessageService { + + static final Logger LOG = Logger.getLogger("redis_message.log"); + + private final StreamCommands streamCommands; + + public RedisMessageService(RedisDataSource ds) { + streamCommands = ds.stream(String.class); + } + + public String push(String key, SendMessage message) { + + var map = new HashMap(); + map.put(RedisArgsConstant.USERID.key, message.userId()); + map.put(RedisArgsConstant.CLIENT_UUID.key, message.clientUUID()); + map.put(RedisArgsConstant.OPT_TYPE.key, message.optType()); + map.put(RedisArgsConstant.REQUEST_ID.key, message.requestId()); + + var base64 = new Base64(); + String messageData; + if (message.data() == null || message.data().isEmpty()) { + messageData = ""; + } else { + messageData = message.data(); + } + map.put(RedisArgsConstant.DATA.key, base64.encodeToString(messageData.getBytes(StandardCharsets.UTF_8))); + + return streamCommands.xadd(key, map); + } + + /** + * 获取消息 + */ + public List getMessage(String key, Integer count, Long milliseconds) { + try { + var xReadArgs = new XReadArgs(); + if(count != null) { + xReadArgs.count(count); + } + if(milliseconds != null) { + xReadArgs.block(Duration.ofMillis(milliseconds)); + } + var messages = streamCommands.xread(key, "0", xReadArgs); + var result = new ArrayList(); + for (StreamMessage message: messages) { + var messageData = message.payload().get(RedisArgsConstant.DATA.key); + if (messageData != null) { + var base64 = new Base64(); + message.payload().put(RedisArgsConstant.DATA.key, new String(base64.decode(messageData), StandardCharsets.UTF_8)); + } + result.add(new ReceiveMessage(message.id(), message.payload().get(RedisArgsConstant.USERID.key), + message.payload().get(RedisArgsConstant.CLIENT_UUID.key), message.payload().get(RedisArgsConstant.OPT_TYPE.key), + message.payload().get(RedisArgsConstant.REQUEST_ID.key), message.payload().get(RedisArgsConstant.DATA.key))); + } + return result; + } catch (Exception e) { + LOG.errorv("获取消息异常 {0}", e); + return new ArrayList<>(); + } + } + + /** + * 删除消息 + */ + public boolean del(String key, String messageId) { + var result = streamCommands.xdel(key, messageId); + if (result == 1) { + LOG.infov("删除 key {0}, messageId {1} 成功", key, messageId); + return true; + } else if (result == 0) { + LOG.infov("重复消费消息 key {0}, messageId {1} ", key, messageId); + return false; + } + LOG.errorv("消费消息 key {0}, messageId {1} 异常", key, messageId); + return false; + } + +} diff --git a/src/main/java/space/ao/services/support/redis/message/SendMessage.java b/src/main/java/space/ao/services/support/redis/message/SendMessage.java new file mode 100644 index 0000000..7a86456 --- /dev/null +++ b/src/main/java/space/ao/services/support/redis/message/SendMessage.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.redis.message; + +public record SendMessage(String userId, String clientUUID, String optType, String requestId, String data) { +} diff --git a/src/main/java/space/ao/services/support/response/ResponseBase.java b/src/main/java/space/ao/services/support/response/ResponseBase.java new file mode 100644 index 0000000..8661f66 --- /dev/null +++ b/src/main/java/space/ao/services/support/response/ResponseBase.java @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.response; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Builder; +import org.eclipse.microprofile.openapi.annotations.media.Schema; + +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Response; +import java.text.MessageFormat; +import java.util.Arrays; +import java.util.Objects; + +import static jakarta.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR; + +@Builder +@Schema(description = "网关接口的统一格式的响应") +public record ResponseBase(@Schema(description = "返回码,格式为 GW-xxx。") String code, @Schema(description = + "错误信息,格式为 MessageFormat: {0} xx {1}, " + + "参考:https://docs.oracle.com/javase/8/docs/api/java/text/MessageFormat.html 。") String message, + @Schema(description = "请求标识 id,用于跟踪业务请求过程。") String requestId, T results, + @Schema(description = "错误信息中的上下文信息,用于通过 MessageFormat 格式化 message。") Object[] context) { + + public final static String CODE_PREFIX = "GW-"; + + public ResponseBase(String code, String message, String requestId, T results, Object[] context) { + this.code = code; + this.message = message; + this.requestId = requestId; + this.results = results; + this.context = context; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + ResponseBase that = (ResponseBase) o; + return Objects.equals(code, that.code) && Objects.equals(message, that.message) && Objects.equals(requestId, that.requestId) && Objects.equals(results, that.results) && Arrays.equals(context, that.context); + } + + @Override + public int hashCode() { + int result = Objects.hash(code, message, requestId, results); + result = 31 * result + Arrays.hashCode(context); + return result; + } + + @Override + public String toString() { + return "ResponseBase{" + + "code='" + code + '\'' + + ", message='" + message + '\'' + + ", requestId='" + requestId + '\'' + + ", results=" + results + + ", context=" + Arrays.toString(context) + + '}'; + } + + /** + * 创建和返回一个表示请求成功(200 OK)的结果响应 Builder。 + * + * @param requestId 请求 id + * @param results 请求响应结果 + * @param 请求响应结果的类型 + * @return 一个表示成功的结果响应 Builder。 + */ + public static ResponseBaseBuilder ok(String requestId, T results) { + return ResponseBase.builder() + .code(CODE_PREFIX + "200").message("OK").requestId(requestId).results(results); + } + + /** + * 创建和返回一个表示请求被禁止(403 Forbidden)的结果响应 Builder。 + * + * @param requestId 请求 id + * @param 请求响应结果的类型 + * @return 一个表示请求被禁止的结果响应 Builder。 + */ + public static ResponseBaseBuilder forbidden(String requestId) { + return ResponseBase.builder() + .code(CODE_PREFIX + "403").message("Not allowed request").requestId(requestId); + } + + /** + * 创建和返回一个表示请求不合法(406 Not Acceptable)的结果响应 Builder。 + * + * @param requestId 请求 id + * @param 请求响应结果的类型 + * @return 一个表示表示请求不合法的结果响应 Builder。 + */ + public static ResponseBaseBuilder notAcceptable(String requestId) { + return ResponseBase.builder() + .code(CODE_PREFIX + "406").message("Not qualified request").requestId(requestId); + } + + /** + * 创建和返回一个表示请求资源未找到(404 Not Found)的结果响应 Builder。 + * + * @param requestId 请求 id + * @param 请求响应结果的类型 + * @return 一个表示表示请求资源未找到的结果响应 Builder。 + */ + public static ResponseBaseBuilder notFound(String requestId) { + return ResponseBase.builder() + .code(CODE_PREFIX + "404").message("Resource not found").requestId(requestId); + } + + /** + * 创建和返回通过数字 error code 用于构建的响应 Builder。 + * + * @param errCode 指定响应的数字 error code + * @param 请求响应结果的类型 + * @return 包含数据 error code 的响应 Builder。 + */ + public static ResponseBaseBuilder fromErrorCode(int errCode) { + return ResponseBase.builder().code(CODE_PREFIX + errCode); + } + + public static ResponseBaseBuilder fromAccountErrorCode(int errCode) { + return ResponseBase.builder().code("ACC-" + errCode); + } + + /** + * 从 响应枚举中获取 用于构建的响应 Builder。 + * + * @return 响应枚举 对应的响应 Builder。 + */ + public static ResponseBaseBuilder fromResponseBaseEnum(String requestId, ResponseBaseEnum responseBaseEnum) { + return ResponseBase.builder().code(responseBaseEnum.getCode()).message( + responseBaseEnum.getMessage()).requestId(requestId); + } + + public Response toResponse() { + final Response.Status status = Response.Status.fromStatusCode(getErrorCode()); + return Response + .status(status != null ? status : INTERNAL_SERVER_ERROR) + .entity(this) + .build(); + } + + public Response toNormalResponse() { + final Response.Status status = Response.Status.OK; + return Response + .status(status) + .entity(this) + .build(); + } + + public WebApplicationException toWebException() { + return new WebApplicationException(toResponse()); + } + + @JsonIgnore + public String getFormattedMessage() { + return MessageFormat.format(message, context); + } + + @JsonIgnore + public int getErrorCode() { + return Integer.parseInt(code.split("-")[1]); + } + + // 兼容 网关和account 二合一之前的 account + public static ResponseBase forbidden(String message, String requestId) { + return ResponseBase.of("ACC-403", message, requestId, null); + } + public static ResponseBase internalError(String message, String requestId) { + return ResponseBase.of("ACC-500", message, requestId, null); + } + + public static ResponseBase okACC(String requestId, T results) { + return ResponseBase.of("ACC-200", "OK", requestId, results); + } + + public static ResponseBase of(String code, String message, String requestId, T results) { + return new ResponseBase<>(code, message, requestId, results, null); + } +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/support/response/ResponseBaseEnum.java b/src/main/java/space/ao/services/support/response/ResponseBaseEnum.java new file mode 100644 index 0000000..b4f4fc9 --- /dev/null +++ b/src/main/java/space/ao/services/support/response/ResponseBaseEnum.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.response; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@AllArgsConstructor +public enum ResponseBaseEnum { + NO_AUTO_LOGIN("GW-4044", "等待用户绑定端确认免扫码登录"), + NO_AUTH("GW-4045", "没有被授权"), + CANCEL_LOGIN("GW-4046", "用户绑定端取消登录"), + RESOURCE_DEPLOY_FAILED("GW-5001", "资源部署失败"), + //第三方应用错误码,统一用8开头 + DEV_OPTIONS_PARAMETER_ERRORS("GW-8001", "some paramsters error"), + IMAGE_NOT_FOUND("GW-8404", "Image not found"), + + AUTH_CODE_NOT_MATCH("GW-4013", "auth-code was not matched! "), + INVALID_USER("GW-4023", "user not exist"), + + SPACE_ID_NOT_UNIQUE("GW-4004", "personal space id is not unique"), + + SPACE_SERVICE_PLATFORM_ERROR("GW-5005", "space service platform connect error"), + PRODUCT_SERVICE_PLATFORM_ERROR("GW-5006", "product service platform connect error"), + + ; + + @Getter + private final String code; + @Getter + private final String message; +} diff --git a/src/main/java/space/ao/services/support/security/SecurityProviderFactory.java b/src/main/java/space/ao/services/support/security/SecurityProviderFactory.java new file mode 100644 index 0000000..2c27a5e --- /dev/null +++ b/src/main/java/space/ao/services/support/security/SecurityProviderFactory.java @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (c) 2023 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package space.ao.services.support.security; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.Produces; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.security.inf.SecurityProvider; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @author zhichuang + * @date 2023/7/25 0025 + **/ +@ApplicationScoped +public class SecurityProviderFactory { + + private static final String PROVIDER_NAME = "default"; + private static final Map map = new ConcurrentHashMap<>(); + + @Inject + ApplicationProperties properties; + + public static void putSecurityProvider(String name, SecurityProvider securityProvider){ + map.put(name, securityProvider); + } + + @Produces + public SecurityProvider getSecurityProvider() { + String securityMode = properties.securityMode(); + if (map.containsKey(securityMode)) { + return map.get(securityMode); + } else { + return map.get(PROVIDER_NAME); + } + } +} diff --git a/src/main/java/space/ao/services/support/security/SecurityTotpUtils.java b/src/main/java/space/ao/services/support/security/SecurityTotpUtils.java new file mode 100644 index 0000000..95084ae --- /dev/null +++ b/src/main/java/space/ao/services/support/security/SecurityTotpUtils.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.security; + +import jakarta.enterprise.context.ApplicationScoped; +import dev.samstevens.totp.code.*; +import dev.samstevens.totp.secret.DefaultSecretGenerator; +import dev.samstevens.totp.secret.SecretGenerator; +import dev.samstevens.totp.time.SystemTimeProvider; +import dev.samstevens.totp.time.TimeProvider; +import lombok.SneakyThrows; +import space.ao.services.gateway.auth.qrcode.dto.TotpAuthCode; +import space.ao.services.support.log.Logged; + +import java.time.Duration; +import java.time.Instant; + +@ApplicationScoped +public class SecurityTotpUtils { + + @Logged + public String generateTotpSecret(){ + SecretGenerator secretGenerator = new DefaultSecretGenerator(); + return secretGenerator.generate(); + } + + /**generate + * 生成基于时间的一次性密码 + */ + @SneakyThrows + @Logged + public TotpAuthCode generateCode(String secret) { + CodeGenerator codeGenerator = new DefaultCodeGenerator(); + var authCodeTotalExpiresAt = Duration.ofSeconds(30L).toMillis(); + return TotpAuthCode.of(codeGenerator.generate(secret, Instant.now().toEpochMilli() / authCodeTotalExpiresAt), + authCodeTotalExpiresAt - Instant.now().toEpochMilli() % authCodeTotalExpiresAt, + authCodeTotalExpiresAt); + } + + public Boolean verifyCode(String secret, String code){ + TimeProvider timeProvider = new SystemTimeProvider(); + CodeGenerator codeGenerator = new DefaultCodeGenerator(); + CodeVerifier verifier = new DefaultCodeVerifier(codeGenerator, timeProvider); + return verifier.isValidCode(secret, code); + } +} diff --git a/src/main/java/space/ao/services/support/security/SecurityUtils.java b/src/main/java/space/ao/services/support/security/SecurityUtils.java new file mode 100644 index 0000000..c272bba --- /dev/null +++ b/src/main/java/space/ao/services/support/security/SecurityUtils.java @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.security; + +import lombok.Getter; +import lombok.SneakyThrows; +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.logging.Logger; +import space.ao.services.support.agent.AgentServiceRestClient; +import space.ao.services.support.agent.info.DeviceInfo; +import space.ao.services.support.security.inf.SecurityProvider; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; +import space.ao.services.support.log.Logged; + +import jakarta.annotation.PostConstruct; +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import jakarta.inject.Inject; +import jakarta.inject.Singleton; + +import java.io.IOException; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.security.interfaces.RSAPublicKey; +import java.util.Arrays; +import java.util.Base64; +import java.util.Objects; + +@Singleton +public class SecurityUtils { + private static final Logger LOG = Logger.getLogger("app.log"); + + @Getter + @Inject + SecurityProvider securityProvider; + @Inject + ApplicationProperties properties; + @Getter + public PublicKey adminClientPublicKey; + @Inject + OperationUtils operationUtils; + @Inject + @RestClient + AgentServiceRestClient agentServiceRestClient; + + private DeviceInfo deviceInfo; + + @PostConstruct + public void init() throws IOException, GeneralSecurityException { + + LOG.infov("SecurityUtils start init"); + try { + loadAdminClientPublicFile(); + loadDeviceInfo(); + } catch (Exception e) { + LOG.error("SecurityUtils init failed", e); + } + LOG.infov("SecurityUtils init completed"); + } + + public void loadAdminClientPublicFile(){ + try (Reader reader = operationUtils.getFileStreamReader(properties.clientPublicKeyLocation())) { + adminClientPublicKey = getRSAPublicKey(reader); + } catch (Exception e) { + LOG.warnv("loadAdminClientPublicFile failed,Location {0} has no public key file", properties.clientPublicKeyLocation()); + } + } + + public void loadDeviceInfo(){ + try { + deviceInfo = agentServiceRestClient.getDeviceVersion().results(); + } catch (Exception e) { + LOG.warnv("loadDeviceInfo failed", properties.systemAgentUrlBase()); + } + } + + public DeviceInfo getDeviceInfo() { + if(Objects.isNull(deviceInfo)){ + loadDeviceInfo(); + } + return deviceInfo; + } + + @Logged + public String getPasscode(String requestId){ + return securityProvider.getPasscode(requestId); + } + + @Logged + public boolean setPasscode(String requestId, String passcode){ + return securityProvider.setPasscode(requestId, passcode); + } + + @Logged + public boolean resetPasscode(String requestId){ + return securityProvider.resetPasscode(requestId); + } + + /** + * Read from a pem text reader and returns a RSA public key based on X.509 standard format. + */ + public RSAPublicKey getRSAPublicKey(Reader reader) throws GeneralSecurityException, IOException { + return operationUtils.getRSAPublicKey(reader); + } + + @SneakyThrows + public String decryptWithSecret(String body, String secret, IvParameterSpec iv) { + byte[] key = secret.getBytes(StandardCharsets.UTF_8); + SecretKeySpec secretKey = new SecretKeySpec(key, + properties.gatewayAlgInfoTransportationAlgorithm()); + Cipher cipher = Cipher.getInstance(properties.gatewayAlgInfoTransportationTransformation()); + byte[] result = new byte[0]; + try { + cipher.init(Cipher.DECRYPT_MODE, secretKey, iv); + result = cipher.doFinal(Base64.getDecoder().decode(body)); + } catch (InvalidKeyException | InvalidAlgorithmParameterException | IllegalBlockSizeException | + BadPaddingException e) { + LOG.error("secret:" + secret + ", iv: " + Arrays.toString(iv.getIV()), e); + } + return new String(result, StandardCharsets.UTF_8); + } + + @SneakyThrows + public String encryptWithSecret(String body, String secret, IvParameterSpec iv) { + byte[] key = secret.getBytes(StandardCharsets.UTF_8); + SecretKeySpec secretKey = new SecretKeySpec(key, + properties.gatewayAlgInfoTransportationAlgorithm()); + Cipher cipher = Cipher.getInstance(properties.gatewayAlgInfoTransportationTransformation()); + cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv); + return Base64.getEncoder() + .encodeToString(cipher.doFinal(body.getBytes(StandardCharsets.UTF_8))); + } + + @SneakyThrows + public String encryptUsingClientPublicKey(String body) { + final Cipher dc = Cipher.getInstance(properties.gatewayAlgInfoPublicKeyAlgorithm()); + dc.init(Cipher.ENCRYPT_MODE, getAdminClientPublicKey()); + final byte[] encrypted = dc.doFinal(body.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(encrypted); + } + + /** + * 获取字符串形式盒子公钥 + */ + public String getBoxPublicKey(String requestId) { + String publicKeyString = Base64.getEncoder().encodeToString(securityProvider.getBoxPublicKey(requestId).getEncoded()); + String[] split = publicKeyString.split("(?<=\\G.{64})"); + StringBuilder sb = new StringBuilder("-----BEGIN PUBLIC KEY-----\n"); + for (String s : split) { + sb.append(s).append("\n"); + } + sb.append("-----END PUBLIC KEY-----"); + publicKeyString = sb.toString(); + return publicKeyString; + } +} diff --git a/src/main/java/space/ao/services/support/security/impl/SecurityProviderByLocalImpl.java b/src/main/java/space/ao/services/support/security/impl/SecurityProviderByLocalImpl.java new file mode 100644 index 0000000..093bb97 --- /dev/null +++ b/src/main/java/space/ao/services/support/security/impl/SecurityProviderByLocalImpl.java @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.security.impl; + +import com.google.common.io.CharStreams; +import lombok.Getter; +import lombok.SneakyThrows; +import org.jboss.logging.Logger; +import space.ao.services.support.security.inf.SecurityProvider; +import space.ao.services.account.member.respository.BoxInfoRepository; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.OperationUtils; +import jakarta.annotation.PostConstruct; +import javax.crypto.Cipher; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import space.ao.services.support.security.SecurityProviderFactory; + +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.util.Base64; + +@ApplicationScoped +public class SecurityProviderByLocalImpl implements SecurityProvider { + @Inject + ApplicationProperties properties; + @Getter + private PrivateKey boxPrivateKey; + @Getter + private PublicKey boxPublicKey; + private static final Logger LOG = Logger.getLogger("app.log"); + private static final String PROVIDER_NAME = "default"; + @Inject + BoxInfoRepository boxInfoRepository; + @Inject + OperationUtils utils; + + @PostConstruct + void init() { + LOG.infov("SecurityUtilsByLocalImpl start init"); + try { + try (Reader reader = getFileStreamReader(properties.boxPrivateKeyLocation())) { + this.boxPrivateKey = getRSAPrivateKey(reader); + } + + try (Reader reader = getFileStreamReader(properties.boxPublicKeyLocation())) { + this.boxPublicKey = getRSAPublicKey(reader); + } + + } catch (Exception e) { + LOG.error("SecurityUtilsByLocalImpl init failed", e); + } + LOG.infov("SecurityUtilsByLocalImpl init completed"); + SecurityProviderFactory.putSecurityProvider(PROVIDER_NAME, this); + } + + @SneakyThrows + public String encryptUsingBoxPublicKey(String requestId, String body) { + final Cipher dc = Cipher.getInstance(properties.gatewayAlgInfoPublicKeyAlgorithm()); + dc.init(Cipher.ENCRYPT_MODE, getBoxPublicKey()); + final byte[] encrypted = dc.doFinal(body.getBytes(StandardCharsets.UTF_8)); + return Base64.getEncoder().encodeToString(encrypted); + } + @SneakyThrows + public String decryptUsingBoxPrivateKey(String requestId, String body) { + final Cipher dc = Cipher.getInstance(properties.gatewayAlgInfoPublicKeyAlgorithm()); + dc.init(Cipher.DECRYPT_MODE, getBoxPrivateKey()); + final byte[] decrypted = dc.doFinal(Base64.getDecoder().decode(body)); + return new String(decrypted, StandardCharsets.UTF_8); + } + + @SneakyThrows + public String signUsingBoxPrivateKey(String requestId, String data) { + Signature privateSignature = Signature.getInstance(properties.gatewayAlgInfoSignatureAlgorithm()); + privateSignature.initSign(getBoxPrivateKey()); + privateSignature.update(Base64.getDecoder().decode(data.getBytes(StandardCharsets.UTF_8))); + byte[] signature = privateSignature.sign(); + return Base64.getEncoder().encodeToString(signature); + } + @SneakyThrows + public String signByUrlEncodeUsingBoxPrivateKey(String requestId, String data) { + Signature privateSignature = Signature.getInstance(properties.gatewayAlgInfoSignatureAlgorithm()); + privateSignature.initSign(getBoxPrivateKey()); + privateSignature.update(Base64.getDecoder().decode(data.getBytes(StandardCharsets.UTF_8))); + byte[] signature = privateSignature.sign(); + return Base64.getUrlEncoder().encodeToString(signature); + } + + @SneakyThrows + public boolean verifySignUsingBoxPublicKey(String requestId, String data, String signature) { + Signature sign = Signature.getInstance(properties.gatewayAlgInfoSignatureAlgorithm()); + sign.initVerify(getBoxPublicKey()); + sign.update(data.getBytes(StandardCharsets.UTF_8)); + return sign.verify(Base64.getDecoder().decode(signature)); + } + + @SneakyThrows + public PublicKey getBoxPublicKey(String requestId) { + return boxPublicKey; + } + + @Override + public boolean setPasscode(String requestId, String password) { + return boxInfoRepository.setPasscode(requestId, password); + } + + @Override + public String getPasscode(String requestId) { + return boxInfoRepository.getPasscode(requestId); + } + + @Override + public boolean resetPasscode(String requestId) { + return setPasscode(requestId, null); + } + + public Reader getFileStreamReader(String resourceLocation) { + return utils.getFileStreamReader(resourceLocation); + } + + /** + * Read from pem text reader and returns a RSA private key based on PKCS#8 standard format. + */ + public RSAPrivateKey getRSAPrivateKey(Reader reader) + throws GeneralSecurityException, IOException { + final String key = CharStreams.toString(reader); + + final String pem = key.replaceAll("[\\n\\r]", "") + .replace("-----BEGIN PRIVATE KEY-----", "") + .replace("-----END PRIVATE KEY-----", ""); + + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(pem)); + return (RSAPrivateKey) keyFactory.generatePrivate(keySpec); + } + + /** + * Read from a pem text reader and returns a RSA public key based on X.509 standard format. + */ + public RSAPublicKey getRSAPublicKey(Reader reader) throws GeneralSecurityException, IOException { + return utils.getRSAPublicKey(reader); + } + + +} diff --git a/src/main/java/space/ao/services/support/security/inf/SecurityProvider.java b/src/main/java/space/ao/services/support/security/inf/SecurityProvider.java new file mode 100644 index 0000000..7aa8345 --- /dev/null +++ b/src/main/java/space/ao/services/support/security/inf/SecurityProvider.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.security.inf; + +import java.security.PublicKey; + +public interface SecurityProvider { + String encryptUsingBoxPublicKey(String requestId, String body); + String decryptUsingBoxPrivateKey(String requestId, String body); + String signUsingBoxPrivateKey(String requestId, String data); + String signByUrlEncodeUsingBoxPrivateKey(String requestId, String data); + boolean verifySignUsingBoxPublicKey(String requestId, String data, String signature); + PublicKey getBoxPublicKey(String requestId); + boolean setPasscode(String requestId, String password); + String getPasscode(String requestId); + boolean resetPasscode(String requestId); +} diff --git a/src/main/java/space/ao/services/support/service/ServiceError.java b/src/main/java/space/ao/services/support/service/ServiceError.java new file mode 100644 index 0000000..582e83b --- /dev/null +++ b/src/main/java/space/ao/services/support/service/ServiceError.java @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.service; + +/** + * Used to define an error raised under the service layer. + * It consists of following parts: + *

    + *
  1. code: used to specify the error code. It can be report to top layer for error detecting.
  2. + *
  3. message: used to specify the default error message. It would include + * some placeholder used to format a final string result, + * and the format uses {@link java.text.MessageFormat}'s style.
  4. + *
+ * You can explicitly define all service errors here for further using. Note: we intend to reuse + * service error code that is greater than 0 and less than 600 as http status code. + * + * @see java.text.MessageFormat + * @see ServiceOperationException + * @since 1.0.0 + */ +public enum ServiceError { + /** + * Indicates an unknown error that might be somehow undefined currently. + */ + UNKNOWN(-1, "unknown error"), + AUTH_KEY_NOT_MATCH(4011, "auth key was not matched"), + CLIENT_UUID_NOT_MATCH(4012, "client uuid was not matched"), + AUTH_CODE_NOT_MATCH(4013, "auth-code was not matched! "), + BOX_KEY_NOT_MATCH(4014, "bkey was not matched! "), + ACCESS_TOKEN_INVALID(4015, "access token invalid"), + REFRESH_TOKEN_INVALID(4016, "refresh token invalid"), + INIT_UTIL_FAILED(4017, "init util failed, read pem error"), + CLIENT_UUID_NOT_FOUND(4018, "client uuid not found"), + APPLET_NOT_FOUND(4019, "applet not found"), + APPLET_ALREADY_EXIST(4020, "applet has already exist"), + VCFILE_UPLOAD_ERROR(4021, "vcfile upload error"), + ADDRESSBOOK_NOT_PRESENT(4022, "addressbook not present"), + INVALID_USER(4023, "user not exist"), + INVALID_APPLET(4024, "applet invalid"), + MESSAGE_PUSHED(5001,"Message push repeat "), + MESSAGE_PUSHED_TIMEOUT(5002, "Message push request timed out"), + DATABASE_ERROR(-1, "database exception"), + REFRESH_TOKEN_TIMEOUT(6016, "refresh token invalid"), + NO_MODIFY_RIGHTS(403, "You do not have the rights"), + MESSAGE_DELETE_FAILED(5005, "delete failed message not exist, messageId: "), + SIGNATURE_FAILED(5006, "signature failed"), + + NO_NOTIFICATION_ENUM(404, "not found enum"), + API_JSON_EXCEPTION(2057, "apis Json Processing Exception"), + API_IO_EXCEPTION(2058, "apis Json Processing Exception"), + NO_OFFICE_PLATFORM(4404, "This feature is not supported on unofficial platforms"), + VOD_SERVICE_ERROR(7001, "vod service error"), + VOD_SERVICE_NOT_SUPPORT_VIDEO_CODING(7002, "vod service not support Video coding"), + DEV_OPTIONS_DOMAIN_PREFIX_CONFLICT(8001, "this domain prefix already exists"), + DEV_OPTIONS_SERVICE_NAME_CONFLICT(8002, "this service name already exists"), + UNSUPPORTED_ALGORITHM(3404, "TOTP algorithm not supported"), + PLATFORM_TYPE_ERROR(404, "platform type error"), + PLATFORM_SERVICE_NOT_FOUND(404, "platform service not found"), + PLATFORM_API_NOT_FOUND(404, "platform api not found") + + ; + /** + * The identity of an error. + */ + private final int code; + + /** + * The default message of an error + */ + private final String message; + + ServiceError(int code, String message) { + this.code = code; + this.message = message; + } + + public static ServiceError valueOf(int code) { + for (ServiceError e : ServiceError.values()) { + if (e.code == code) { + return e; + } + } + throw new IllegalArgumentException("invalid code for service error - " + code); + } + + /** + * Return the code of this error. + */ + public String getMessage() { + return message; + } + + /** + * Return the default message of this error. + */ + public int getCode() { + return code; + } +} diff --git a/src/main/java/space/ao/services/support/service/ServiceOperationException.java b/src/main/java/space/ao/services/support/service/ServiceOperationException.java new file mode 100644 index 0000000..62bf51c --- /dev/null +++ b/src/main/java/space/ao/services/support/service/ServiceOperationException.java @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.service; + +import java.text.MessageFormat; +import java.util.Objects; + +/** + * Runtime exception for service layer reporting specific operation error. + *

+ * This exception can only be used on the surface of service public method. + * It consists of a error code and a message which would be translate to a + * locale message. And the error can be a value of {@linkplain ServiceError}. + * + * @see ServiceError + * @since 1.0.0 + */ +public class ServiceOperationException extends RuntimeException { + + private final int errorCode; + private final Object[] messageParameters; + + public ServiceOperationException(Throwable cause, ServiceError error, Object... parameters) { + super(Objects.requireNonNull(error).getMessage(), Objects.requireNonNull(cause)); + this.errorCode = error.getCode(); + this.messageParameters = parameters; + } + + public ServiceOperationException(ServiceError error, Object... parameters) { + super(error.getMessage()); + this.errorCode = error.getCode(); + this.messageParameters = parameters; + } + + public ServiceOperationException(Throwable cause, int errorCode, String message, Object... parameters) { + super(Objects.requireNonNull(message), Objects.requireNonNull(cause)); + this.errorCode = errorCode; + this.messageParameters = parameters; + } + + public ServiceOperationException(int errorCode, String message, Object... parameters) { + super(Objects.requireNonNull(message)); + this.errorCode = errorCode; + this.messageParameters = parameters; + } + + public int getErrorCode() { + return errorCode; + } + + public String getFormattedMessage() { + return MessageFormat.format(super.getMessage(), getMessageParameters()); + } + + public Object[] getMessageParameters() { + return messageParameters; + } +} diff --git a/src/main/java/space/ao/services/support/task/ScheduledService.java b/src/main/java/space/ao/services/support/task/ScheduledService.java new file mode 100644 index 0000000..9b82c7e --- /dev/null +++ b/src/main/java/space/ao/services/support/task/ScheduledService.java @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.task; + + +import io.quarkus.runtime.Startup; +import java.time.Instant; +import java.util.Date; +import java.util.List; +import jakarta.annotation.PostConstruct; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; + +import org.jboss.logging.Logger; +import org.quartz.Job; +import org.quartz.JobBuilder; +import org.quartz.JobDetail; +import org.quartz.Scheduler; +import org.quartz.SchedulerException; +import org.quartz.Trigger; +import org.quartz.TriggerBuilder; +import space.ao.services.account.security.service.SecurityPasswordModifyJob; + +@ApplicationScoped +@Startup +public class ScheduledService { + @Inject + Scheduler quartz; + JobDetail job; + static final Logger LOG = Logger.getLogger("app.log"); + + public void onStart(String requestId, TaskBaseEntity task, Class jobClass) { + job = JobBuilder.newJob(jobClass) + .withIdentity(task.getType(), "Task" + "-" + task.getId()) + .usingJobData("taskData", task.getData()) + .usingJobData("taskId", String.valueOf(task.getId())) + .usingJobData("requestId", requestId) + .build(); + + + Trigger trigger = TriggerBuilder.newTrigger() + .withIdentity(task.getType(), "Task" + "-" + task.getId()) + .startAt(new Date(task.getEffectiveAt().toEpochMilli())).build(); + try { + quartz.scheduleJob(job, trigger); + } catch (SchedulerException e) { + throw new RuntimeException(e); + } + LOG.info("task: "+ task.getId() + ", start at: " + task.getCreatedAt() + ", data: " + task.getData() + ", requestId: " + requestId); + + } + + @PostConstruct + @SuppressWarnings("unused") // 开机自启动,运行修改密码定时任务 + public void checkPasswordModifyTask(){ + List tasks = TaskBaseEntity.findAllTasks(); + for (var task: tasks){ + if (task.getEffectiveAt().isBefore(Instant.now())){ + TaskBaseEntity.delete(task.getId()); + } else { + onStart(task.getRequestId(), task, SecurityPasswordModifyJob.class); + } + } + } +} + diff --git a/src/main/java/space/ao/services/support/task/TaskBaseEntity.java b/src/main/java/space/ao/services/support/task/TaskBaseEntity.java new file mode 100644 index 0000000..7a79e6d --- /dev/null +++ b/src/main/java/space/ao/services/support/task/TaskBaseEntity.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.task; + +import io.quarkus.hibernate.orm.panache.PanacheEntityBase; +import java.time.Instant; +import java.util.List; +import jakarta.persistence.Column; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +import jakarta.persistence.Entity; +import jakarta.transaction.Transactional; +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Entity +@Table(name = "TASKS") +@Getter +@Setter +@NoArgsConstructor +@ToString +public class TaskBaseEntity extends PanacheEntityBase { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "request_id") + @NotNull + private String requestId; + @Column(name = "created_at") + @NotNull + private Instant createdAt; + @Column(name = "effective_at") + @NotNull + private Instant effectiveAt; + @Column(name = "data") + @NotNull + private String data; + @Column(name = "type") + @NotNull + private String type; + public TaskBaseEntity(String requestId , Instant effectiveAt, String data, String type){ + this.requestId = requestId; + this.effectiveAt = effectiveAt; + this.createdAt = Instant.now(); + this.data = data; + this.type = type; + } + + @Transactional + public static void delete(Long taskId){ + findById(taskId).delete(); + } + + @Transactional + public static TaskBaseEntity findTaskById(Long taskId){ + return findById(taskId); + } + + @Transactional + public static List findAllTasks(){ + return find("type","passwordModify").list(); + } +} diff --git a/src/main/java/space/ao/services/support/validator/ValueOfEnum.java b/src/main/java/space/ao/services/support/validator/ValueOfEnum.java new file mode 100644 index 0000000..b8eed65 --- /dev/null +++ b/src/main/java/space/ao/services/support/validator/ValueOfEnum.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.validator; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.*; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + + +/** + * The annotated element must be any of specified enum class values. + *

+ * You need to provide a {@link ValueOfEnum#valueMethod()} to help get the values of + * enum class which is also specified by {@link ValueOfEnum#enumClass()}. + * By default, it will use {@link Enum#name()} as the value method. For the default + * validation implementation, please refer to {@link ValueOfEnumValidator}. + *

+ * Supported types are: + *

    + *
  • all types from {@code java.lang.Enum}
  • + *
+ *

+ * {@code null} elements are considered valid. + * + * @author Haibo Luo + * @since 1.0 + */ +@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE}) +@Retention(RUNTIME) +@Documented +@Constraint(validatedBy = ValueOfEnumValidator.class) +public @interface ValueOfEnum { + /** + * Used to specify enum class which must be derived from {@code java.lang.Enum}. + */ + Class> enumClass(); + String message() default "must be any of enum {enumClass} values"; + Class[] groups() default {}; + Class[] payload() default {}; + + /** + * Used to specify the value fetching method. By default, it + * uses {@link Enum#name()}. + */ + String valueMethod() default "name"; +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/support/validator/ValueOfEnumValidator.java b/src/main/java/space/ao/services/support/validator/ValueOfEnumValidator.java new file mode 100644 index 0000000..ce47445 --- /dev/null +++ b/src/main/java/space/ao/services/support/validator/ValueOfEnumValidator.java @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.support.validator; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import lombok.SneakyThrows; + +import java.lang.reflect.Method; +import java.util.Collection; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * Provides an implementation used to validate the constraint that element + * is any of specified enum class values. + * + * @since 1.0 + * @see ValueOfEnum + * @author Haibo Luo + */ +public class ValueOfEnumValidator implements ConstraintValidator { + + /* + * Implementation note: + * + * This implementation is inspired by following discussion and article + * 1. https://www.baeldung.com/javax-validations-enums + * 2. https://stackoverflow.com/questions/18205787/how-to-use-hibernate-validation-annotations-with-enums + * 3. https://quarkus.io/guides/validation + */ + + /** + * Used to hold all values of enum class. + */ + private Collection enumValues; + + @SneakyThrows + @Override + public void initialize(ValueOfEnum annotation) { + final Method method = annotation.enumClass().getMethod(annotation.valueMethod()); + enumValues = Stream.of(annotation.enumClass().getEnumConstants()) + .map(e -> invokeValueMethod(method, e)) + .collect(Collectors.toUnmodifiableSet()); + } + + @SneakyThrows + private static Object invokeValueMethod(Method method, Enum e) { + return method.invoke(e); + } + + @Override + public boolean isValid(Object value, ConstraintValidatorContext context) { + return (value == null) || enumValues.contains(value); + } +} \ No newline at end of file diff --git a/src/main/java/space/ao/services/vod/VodResource.java b/src/main/java/space/ao/services/vod/VodResource.java new file mode 100644 index 0000000..83d6367 --- /dev/null +++ b/src/main/java/space/ao/services/vod/VodResource.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.vod; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import space.ao.services.support.response.ResponseBase; + +import jakarta.inject.Inject; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; + +import java.util.Objects; + +import static space.ao.services.support.RestConfiguration.REQUEST_ID; + +@Tag(name = "Space Gateway Video On Demand Service", + description = "Provides Video On Demand APIs.") +@Path("/v1/api/vod") +public class VodResource { + @Inject + VodService vodService; + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "check vod coding status") + @Path("/check") + public ResponseBase check(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + @Valid @NotBlank @QueryParam("uuid") String fileUUID) { + var m3u8Info = vodService.getM3U8Info(requestId, Long.valueOf(userid), fileUUID); + if(Objects.equals(m3u8Info, "1011")) { + return ResponseBase.builder().code("VOD-404").requestId(requestId).message("file not exits").build(); + } else if(Objects.equals(m3u8Info, "1002")) { + return ResponseBase.builder().code("VOD-400").requestId(requestId).message("Field validation for file uuid").build(); + } else if(m3u8Info.contains("segment-1-v1-a1.m4s")){ + return ResponseBase.builder().code("VOD-4001").requestId(requestId).message("The H265 encoding format is not supported").build(); + } else { + return ResponseBase.builder().code("VOD-200").requestId(requestId).message("OK").build(); + } + + } + + @GET + @Produces(MediaType.APPLICATION_OCTET_STREAM) + @Consumes(MediaType.APPLICATION_JSON) + @Operation(description = + "get vod m3u8 file") + @Path("/m3u8") + public Response get(@Valid @NotBlank @HeaderParam(REQUEST_ID) String requestId, + @Valid @NotBlank @QueryParam("userId") String userid, + @Valid @NotBlank @QueryParam("uuid") String fileUUID) { + return vodService.getM3U8(requestId, Long.valueOf(userid), fileUUID); + } +} diff --git a/src/main/java/space/ao/services/vod/VodService.java b/src/main/java/space/ao/services/vod/VodService.java new file mode 100644 index 0000000..b3efea9 --- /dev/null +++ b/src/main/java/space/ao/services/vod/VodService.java @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.vod; + +import org.eclipse.microprofile.rest.client.inject.RestClient; +import org.jboss.logging.Logger; +import space.ao.services.account.personalinfo.repository.UserInfoRepository; +import space.ao.services.config.ApplicationProperties; +import space.ao.services.support.agent.AgentServiceRestClient; +import space.ao.services.support.file.FileServiceRestClient; +import space.ao.services.support.file.info.UUIDInfo; +import space.ao.services.support.log.Logged; +import space.ao.services.support.service.ServiceOperationException; +import space.ao.services.support.FileUtils; +import space.ao.services.support.service.ServiceError; + +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import jakarta.ws.rs.core.Response; +import java.io.*; +import java.nio.file.Files; +import java.util.Objects; + +@ApplicationScoped +public class VodService { + private static final Logger LOG = Logger.getLogger("app.log"); + + @Inject + @RestClient + VodServiceRestClient vodServiceRestClient; + @Inject + UserInfoRepository userInfoRepository; + @Inject + @RestClient + AgentServiceRestClient agentServiceRestClient; + @Inject + @RestClient + FileServiceRestClient fileServiceRestClient; + @Inject + ApplicationProperties properties; + + @Logged + public Response getM3U8(String requestId, Long userid, String fileUUID) { + var user = userInfoRepository.findByUserId(userid); + var url = user.getUserDomain(); + var m3u8Info = getM3U8Info(requestId, userid, fileUUID); + if(m3u8Info.contains("segment-1-v1-a1.m4s")){ + throw new ServiceOperationException(ServiceError.VOD_SERVICE_NOT_SUPPORT_VIDEO_CODING); + } + var resultFile = FileUtils.zipFiles(handleM3U8(requestId, m3u8Info, url), "index"); + return Response.ok(resultFile) + .header("Content-Disposition", "attachment;filename=" + fileUUID +".zip") + .header("Content-Length", resultFile.length()) + .build(); + } + + @Logged + String getM3U8Info(String requestId, Long userid, String fileUUID) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + LOG.info(e); + // Restore interrupted state... + Thread.currentThread().interrupt(); + } + var symlinkResult = fileServiceRestClient.createSoftLink(userid, UUIDInfo.of(fileUUID)); + LOG.warnv("symlinkResult: {0}", symlinkResult); + if(!Objects.equals(symlinkResult.code(), "200")){ + return symlinkResult.code(); + } + String m3u8Info; + try(var response = vodServiceRestClient.getM3U8(requestId, symlinkResult.results().getLinkName())){ + var entity = response.readEntity(InputStream.class); + var tempFilePath = Files.createTempFile(fileUUID + "-index", ".m3u8"); + var tempFile = tempFilePath.toFile(); + FileUtils.getFileFromInputStream(entity, tempFile); + m3u8Info = Files.readString(tempFilePath); + } catch (IOException e) { + LOG.error("read m3u8 file error", e); + throw new ServiceOperationException(ServiceError.VOD_SERVICE_ERROR); + } + return m3u8Info; + } + + public File[] handleM3U8(String requestId, String m3u8Info, String userDomain) { + File file1 = null; + File file2 = null; + try { + var tempPath = Files.createTempDirectory("temp"); + file1 = new File(tempPath + File.separator + "index-lan.m3u8"); + file2 = new File(tempPath + File.separator + "index-wan.m3u8"); + } catch (IOException e) { + LOG.error("create temp file error", e); + } + var ipAddressInfo = agentServiceRestClient.getIpAddressInfo(requestId); + LOG.debugv("IpAddressInfo: {0}", ipAddressInfo); + String lanIp = ""; + if(!ipAddressInfo.results().isEmpty()){ + lanIp = ipAddressInfo.results().get(0).getIp(); + } + LOG.debugv("IpAddressInfo: {0}", lanIp); + var lanM3U8Info = m3u8Info.replace(properties.appVodUrl().split("/")[2], lanIp); + FileUtils.writeToFile(file1, lanM3U8Info); + if(Objects.nonNull(userDomain)){ + var wanM3U8Info = m3u8Info.replace("http://" + properties.appVodUrl().split("/")[2], "https://" + userDomain); + FileUtils.writeToFile(file2, wanM3U8Info); + LOG.debugv("wanM3U8Info: {0}, \n lanM3U8Info: {1}", wanM3U8Info, lanM3U8Info); + } + return new File[]{ file1, file2, }; + } + + +} diff --git a/src/main/java/space/ao/services/vod/VodServiceRestClient.java b/src/main/java/space/ao/services/vod/VodServiceRestClient.java new file mode 100644 index 0000000..cc9de0f --- /dev/null +++ b/src/main/java/space/ao/services/vod/VodServiceRestClient.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package space.ao.services.vod; + +import jakarta.ws.rs.*; +import jakarta.ws.rs.core.Response; +import org.eclipse.microprofile.rest.client.inject.RegisterRestClient; + +import jakarta.ws.rs.core.MediaType; + +@RegisterRestClient(configKey = "vod-api") +public interface VodServiceRestClient { + + @GET + @Path("/{uuid}/index.m3u8") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + @Consumes(MediaType.APPLICATION_JSON) + Response getM3U8(@HeaderParam("Request-Id") String requestId, @PathParam("uuid") String fileUUID); +} diff --git a/src/main/resources/META-INF/resources/_assets/xinshouzhinan.png b/src/main/resources/META-INF/resources/_assets/xinshouzhinan.png new file mode 100644 index 0000000000000000000000000000000000000000..20d063527619f5c4247d980c0448925e3962b856 GIT binary patch literal 1240996 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%0AoVWrYnh8!+2lo1HgwLwxGDt`Rz`v#EBz~XQ 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

    fW)KQ={qqpK_Np#`X=TW6 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%0A&3(S8ZTxr@G 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

    9rdt zE;iF^IzfDMGrdo5Auh#pm5G0`neM%pH#>6Rd)+)PfzSLhu0VJ#zzKxU2(KW1RXq09 z#FOdzXQqg!WBnQ8+1TeC@vW>suXmZ-h*x9I8u5DUd4p>N;qL+Btx6SBSqF_s`cj_UmcQE}ZPMcm10T2gKiq z=lv$}VXS#Xd>s2cAn^jtN*vX$;7oLrTTXF3?~jN>?gFvl+9hqTgt z^3YbtIdE@h@#e!@;a=OqNq0J)=^_5nR=N&9Mx1M-NF#@v*WQpO?+L6EIDv58 zUqt-kR=S=y5f@|66T~;ix!girign7wFK?yy!Yha&yhnW{@nkE#cczGciTZx-_+{eP zw9;qJYneN^ZdIIs&z#KbS{*qE?^|#`_&8{l(n7blf;JX39T)ZU)ftmEXiILCL; z!@JY`EbaxLMSXZWj?dri05`$&ws5i<^Ve9zKT7v}56*$l-aJkq zJY)Zux!jqKS8?*EaeSR|@P4V{1Va7>@ki2gWj;#08TZT<@yFx+^$FtbR{A=-LtKkF zb>h#&{q|Yn^Ks8#Aa2C{xl8&4P5g&ZiDX)_V7OV8gYOR z!S9Wa@G*G3PVg!Ce)tS05Y{vM`Hn$wpAX>@cn_BGB!urh@HBX?89WQ-%;5^$!tbwE z@jQIE?|x5Oz>AKvf0pnvSbqhtg7@qiUXSA&coV$uw(vIC+YYXQ_fZ`;!1M0nCRnqD z+u$7c90Thg;6pI~2p@y_C-@Yc%Nb7Mc;-Q$?>Glx&*NUOP9Giw>kQ!n_#SK+kATm; zQ9K6bkK<{u&J3Of&pU@J;A?Ib&x6nH1-uAeuO++;VXg2gc-}R<4z9@t-URD!;cam4 zJGchs*Kq@^vx}SHb!_1_gtfx^VEzF<1apq?Fu7q3c>oxmk!Tck948DIj!KdK$J;Mov?-?G9!QQgC8(fDToCAM`lE?kv zx((n#@R|T!XN$a0ATQ#Z7RXTeuBAhxhP4 zn16r|!TaI}AA|Ec!KYw9XE*`pm3atr0_$gSH`sp<&Vkn=k9)y2?8E(FodH|~*M9<+ z;&>TPg6EyW(_sA>JP%<_@M0Wa!pq=!SMVyBvxe8f@1-~JCfM^9-Uf4aa1Gqsb=&~^ z+{I1D+2<|XHYR5eAA)Ojgpa}e6MPExe1;PU@9iJT8bDYd+zIyCg%2N|jvwJ;@LVT2 z0ej1IbF8q2S=B8OMxq5I8%+KRq2o#0al?-_6c=45*47d$qLJ0Ywg?uM|2I0wGQ<#8`qrw{jo z`2%LM?f@|2qZE%n6;e9aY0H1=_?hK!MWO^;KxD(9j!rfq<9-M=)e{e7Ooaw{;VEzCu zfH}i>1Uz;WkAdqvj*DQ<1TKMlpo}NMHJQTGaeM~Pg4bmZSHQVc@jQ5+F5pG*zF5NR zV9gD@={Re+g}1>zcW@0{=Q?hH$L``LgmuGhu+Kew2<9K*Q?Sk%PQczWkD_-lCyTqm zV|#E8%+KRqaE^VrAKb$Oco3{JgbQHKFdhN#wNX3<_BoEH!TK|J7M$-Ku0Ys7cpiL) zFW_ZxUMqMN>}L(HgLO9WCRl$9Z-aGqa0ATW#Z7P@ws0HV|9f~J%s;?~VEz$425X++ zQ*e%FI05Tqew4XF_{fAj^iSjGl5IsT9xr6c&;ft4X*7Bo{i&kcpj{?fEOXW=Hg|r&I(=y>#X5*aPAv; zGmdZJZLo(OTm$!W9XG)GySNF~Y2h}QzlRUw_z^yZu(mh>kInoTYYX zCA!1U&C39s{3C84`n%tb^2G?^3*TC1%I&OgVcX1P}*}`pb zpX}j%Fy{atf;mU{7`$F5_!P`J!wJ}b<|nu=U``fyf;nBd8?4iVbKu(MaW8ni`fxv3 zX8;d^b05M52+u=20^wf9V-Q|ba1mV330wlNbs0}WSVKG=$7k>?*uxyIfa_Vs^I)F~ zco97B5?%(MEh~5xtiOiW3vYvUc5n^Muj2-I-d)@T`)}bkc)j-UKDdSl z_z+yfBYX^AqZ51z);z-rgx|G$H2p$&mf~J8rw{jo^#|}aSZ4>W73=~?gZ;};qExzgLB~Z&EsCMejn}!^9S%C*yj*l1ap?~ zGT6fkUInkq8s3Dk=kYd#J&$YPKB?md*z+!Kg841n26OiCejGo*hv0dS@G*Go2|fjn zJ;MpOhMC9G3-}t8#hu`qbm4Ar{d;f@+&_8T3t{fKADq_!9t87;Z~@u>KCNfj!i5 z1MG7bx4~og@IE-l1AGYPAK~LTeu7WI>wbn4@LtF~j`alRmBpQ4oi5xBKF4}+4t#Fp zaW8l+`fxvl^~8hV^%}wju(x462Ih?8BDe=8a0Tq4is!)|7VsjNzl4{;bFJW2u(vh5 z3Fd6!ZE#I?a1E?k#|^NDUEBooTeuD0?|XPZjvwG-aNSOD62~*WtPg}|EbavBbm4BW zpB|h8=at93U_X7h0AU^Q2zVcj;vzV&30wkm%6Kx4PvK1nbHv+V&JM1DYgNY$u+A=S zf_tom+u%Oj!}}2S2JY@l=h%aDV9h-41#|jvKe!G9co5t(L%0Cu4C4_nXB3ZteU9T| z9G}1?u(vXv1lMp1PlJ1D2G4>$%;8nA{u*8f--m4AO>iG>;cf8eBRjYTu5%qXzkQyQa9%^W0PdM#JOZ9~6pw+=hjCnluupIa%qin}u>S?T2==gqm%-jv@G3a> zHM|aCJ@F>k+ZL{Y$JTKJthtNZ;JNnjKG?$nKJ>q-e}s?0{!j2Jc&;;?fHgBuVBTQO zEbauaV;AlQ->3E99GH{Gz2JHKa6fo258y%YS`Xm@SbrFgfya*HVjQ2qCGh=88BZG1 z^Aw&2-z(1G3V5z6o(Jc+fEVNV60U)Btm6h)a~C(k^R{ps!dl^daBUCpA$T2+@G-bP zC-@Zn4)Y8r5cb&B7{XfNPVj!|!rkC}d+;WhvxT?8es*vT?7xnW!G2EgDTLQhoPft> zuHjr@P8R3DoID-`&ozV#V9qce0qc+AF))7|7s2Z?flJ`r%Xk}{?+&g(SVP=^u!gt^ z)@t;_zkME-ZM=Pd37d+5U5V4WUZ0q0W1^Wc71 zz>DB_GD~_78l>Vr91+zGCK7w!hvya(qXTvOZ&&bJTugLMY*AlUy9 z9s&Cq#baPU<9Hf8*9@Ko>&)Q_Sig$r!TB!WMX={3ybAWVhS$MkH}EFd!xr8Kb9QhI zJZ~L0!0Wz?n_&GGZiClr5ATD$9pFQ-<`F&y=XHWl!J21y`6tslD|i*mU&BqXP7Ale zJ-LVX!Sy`AhhPs!_!vC)1fPOAXE*`tWS&Cr;5uY+C;0P=F5C?s+kw9y^CC;IUOa z53bt+UIy!|;7zdSExZjLyMt@sYiJ!epo`x{+{I0BzAfAa``^R+;2aO|A%wNX$Kbh6 z@F|#oh7$D^``Qx|<)|tR1 zuznd&g1t@QSqSTfE8zQ?DxL@DvVa%C=iU-t276e+tKizM;m)5**Rus}^p9$L`^M2>T5mg0H_v_!wNb6MPExe})sVW@ZS3$7XRa z`26X^{b2n8JP1D9hj0O0lVLmp_Bo1+;4^aqm%ut@TmkD;@jUqcWC1UN$1dSzu+J5| z4*r~R1J}S~>$m~t@8TwSt`=@XcxK|>r>FDk!~GEM1w05|>mgi#@SMS8V9jw{1b;p| zflG0`j3>d~rtma)?Pl;S*xMYQ2lw*=UId>rOL!Tqzk*l6I%{|n>}LyagX_72Yhe94 zZh-G;cX1Q!xrN){dH3)>_*^=`hhWYTJ_gTwf=|KT&Ts+Ikfm{Z3M2zwqM zg6BQL$KV>C;8QUF3@2btroc4>=bpu#;M#WKZt(XvdT=j}LV5g2%4m^*FwPH^Kh5@HW`n4z7X6)^P*uVHdaK_#WN| zuf+jA1p7I{$6)>mK85hU2q)mZkQw2eVEruagmB$)FZdkm!~I~-19%YZa|jo}V~6nw zc-~Pw2H}~Bi{M-)a0#qa#*^T6nZncH`p@85u(vr}0rRVP9-PYpUId?4OL!UVVFj;( z=UT(-;ISKc6TGLk@HTj^9b5zR>$nlecX4hst(nIqFu#l^!Tc#a4Za_n!Ltyahj&J3Of z=QxKe;QCkbJh(R&@FG}e2`_{BD|i*GxrW!l9yahM*xMG~2K(8;H3-)cH{$p%Zh~vx z!fmj(J>2;->3O?wH@FTxI0xqBaW7cE5BGz;4d4RU!!RBJ@2OEd1|B<(i(t(OTmt7( z#*<*3DLfs=XYed|9p`WbtY5|R;QB1!MX;YGybR{7;8pNGUBl~O{s!Iz^SAIec<=1s zCfH{S=Wa;z^SBqnd~rXx<^y;zjt}7y_^dADJ&|1pA!A)8HPM!L#6go5Kw-e;2pGntOOZ zjvwGd@ERTAW3c84J_V0G!`&}TkL|%Z@O31Qd%<({;eH77!h>MXL%0Bbb{@tf5axx) zzdhox-!=exAdXI9|o`5T1>A5j^h_UIx##f>*)yS;L!gd<$>K z@g3X-&$Wm5!DA2bA-F$}@G+Qkf)g+&Gsc>M`znh&!S(FI-Qb?@!8tHLk9)!VK0FB4 z9Kr=~KMdm$FlQ8xfjQ&22-cs#C2+oFJPFpH!qZ^>44wtA;~bs`a~AL-*xM3b2G@24 zuR>TWybkuWfj7a=^;>uw>}?0vz|Yim+yLwE;wIQz3%9}iJ$wx2oZwS%|D53j-2a(z z)>GJrS=I!L#7{%;81w*d@FS_OOCi!E3aJ*TK1O;7#znTX-AH*}*k1r;Zz7on737 z@C?Uou(v(D4}Pb5fDggzc!ZC^d*KA1f;G=@xIUSim><}G7WaaCvJVe}Jq+Oj*uyX$fv|7! z7+7Z<7r~qfTmpM5<4LfGDLf4xJA-Gzy*Gy|5Z<5Td2o&kcoD*W#+zXMExZjLyMt@s z+Sc(QSpNtggE=So6wEop37C_43C~7wybE`O^?Ptm_`HzEy;WY&pA*>HBfi=r`GLBE-Y4BRi;8}2O=WqqwOI17%)?dJjV4Wqr3FdF% z8kk?lO)#g0+hF}YydTF8@FCdS5k8LNC-@Y?^AIQCwaB~_gFR$%CwOcZ&VhR@k9#4k z8}0|!VE_+;`9pXF!dl@m2zv>aAgm9bjN?;y8r<76cozH_!5prD$5!z?IL8IN2%dKd zFM~B#@H*J%2Hphw*}{WAo8}DR0+=(5N5J(Q#be-Sjd5HA&pUxDV15<(^#{p{in!1A z@E%;jtKjFUHM|byY~W1@*9C9K@g3X**S3Y*V9p-ihwvJN599a|J_c)^;O>buzX#_a zydTEBU``+I2YVa9MQ~mdcpA)^!LtyaUAPj*t9Tx~E(>@)j&I;5cwE`s?JxB~W2 z#p`i=18;)IZsA%Suj2-I-|gak@Yn-<2wwLid<@~W6(3E1@K(McmzDxC@zA>PT&&Q ze;H4L&%G%;4X)J;o(0!%4p+cEQ^kv5%_Y1H=C9yYFnkaYcpE%+2iL&$ zujBSD>7Loc`(SSe_z-;WeT0v}eRYCQ!DG+xxtFE$%HmE4Ylw5;x$?LlJazyNg7t@R z5yG0_5;&JKo&@u!@HF_{(F~pi-#^UZ3V5z6o(IphfEU4MnZdIVt_9wPu!gt>{(QEM8{qR~7dOH6Z{arB=N{e%=XHP&!5)tA zG1%J)J_U2mZ~~q;Q(|qvHP7Nsu!k<(4c6(wxj3H3y?c!ZUf{ZA zaVJ>63wML(?ZG*4P4c)G?5z*?gKIK?3t$h!cnrcb3Kzk1P2fo|X9`b)*JuXMLb$%T z0%2d_dGIsu0$v1rTf)m=ofW(a-ur8K9qerbZ-V`A;cf751?=D&Sf`E~5cVE!g6D1F zHducT?}O`nfDgf(BYXU&71ab9e=>g4bdVZ-X^=a0ATW#mzY0!fo)H?rHFT zKfs6Ju}AnA+)F3;G>)I)$(N@!r|>j{XDOZsk6plv;9QpQGWeWd!K>gpuiXH z+&fy9;mnxnI&%1yZ z!JH+$4Ax)4t8sh{uY)~r;7#z@ExZk0#~oY)>(p@q=44*UntKAgi9Fu#iD!8!|g5!@R~csY)*;8h5F5+~rXnO9Q} z+{0Ns2(IT4E`WPu7>_{cACG~@j^iSjGl5HB4`nhS$MrCJhc-}Ie1nW%UY4ABegJ;2eVGdWooGP9N_tgSk z1bbe>%V5nFyb505HM|ZUyMb%qyz00CVb9^@FAFUgpVQIEIjxz;z2JQNa6edc z01txeGlUD^T!!%o*v}{)1J65-i{QK_a0%?8j3>dL4Nc)`@Vd|7S#aIva0RSc#q(gF z3wRyuX9I77Ia_!etiOY6;C`;-CYayCZLrQBF8xZ{e;H4LIa7EVtT}^cA$*sGD{;Jv z=fP*l0$v1bF5y)O`xCdpe)jMoSpNtggY!MXr(m5keC{=AKUv%fu3;C>LD);U0G?|Y zkAUkxipRh@}>|mf<4dS3ivmot9Twfb^&jL=i0%wI9|tX za9(?OAMEV_AA+yfNB9`R&*kwcm~(~`ux949^a7qMi+jPEeYhW7s{uR+<_zHiIG15O z0_Kn6F$m9ITm*9_@HCh+gXba43ok-=&fsM*X9cf<$FAY^IKF{5!E3RFw;{YI!8LF_ z>$nNlY2h~bK64N6$MFMv3ZC~2CviOUI%{%oSRO^^SBrM9-|NU$MFF?2-X?G1@L(?jK{#<#&HqC?^NRwm|w=z z;CW~8ESNusE8w25;(0J<0WX5j#wENQ$5-$wc-}R<4j#LKH^Ft-!rNfZ4z7XkGwZkk zVcl>O%xU2^cBIft zejdPs;GP`91@K(Mcm#arkK(a7K8{OZ{W6{e>rCNk@bz~F&q7#RTme7xR`D@->gFT<%QwYxloPhU2<_)Y5IF~H$1lObscZ2yoco01A5FP=08^vQ_{c&7`@I1t& zI9|q+U~f}+I*!laS+LF=uEg;wUI+K>2HphEyM?#G>$rn!;IVbw0G~O#xC!RBa2wnY zdw5^idk47pt!dAFxF1~q0XzcM8O3AZ`-gE{1lM5#m%#dEJPBUMDLf6n#|!v z@Yp4M3?6%ePr?4ra00G*rb55qcouhp`CYghT*Drm19S4YAIurRg*ZNpM>l0+&vk$g!Fe6wW3c}ddKle2Xi*?CfM5+-Uj#54z7WH)^P*O-^ERE{ad&V z=Ir4^aD9&OF}VIG_!PptZ~|doZ|8pp&zr@aU``kA2It#@b722@+zZ}2eYgPbrC~e* zo_7?Ffpx}l5$tUOPlJ142G4>ybGQN?TgCHWZwq)4ynmPQGMKZ1H^G`)cpJ>$!L>ME z#|`k=wTqkJu`QfHnES2F9lUl~+zGCE7w!go>%loNCy#rrln>;Qm>_ix8e^co{s`3f=_kY~dPsY#leiHQB{Yu>TfrgZpX^??ad`J_L_F!pC6E z6MPCDdxjGT&&+p_3+7~TCwQ(d+zsaU;NCdihx@@bAHaj)d53TTT<2jt0@fVGW8fYe z$3<}6CU6Nnwu~pib4}rCu>K6LfOV>P9_(!aFM`)%2`_{DY6Y)?e{*;ZuY>Ebfj7bH zvW2(7bM4?7Sig?jaeNQ&gU{gudZ@LJ??FPPJZ`{Vck9t7(Q;R4wIFdhMW8^uMi z=LuW_>zDC7c zUAP;p--8Fi`*a8wz@CTk2v~mtr!Sj>4F7RTR?#dW(Ci|4uxi{tOW z;<3Ml#hiI8)>**fKKyMguI=w&ac$p;#m`*t!s5O2ZYo7)42%2iBUl{&C>GcA&#_qNV_58e6N}?pSUmPGu(tDyY`=#rX z$Bzcr{4rR(?vKUd-hLbw$9wVP!Sg-=i*vski$9aP1`o#ZAuRUrbSyr*o`J>lJ`;=U z_AFcguiY>f$FIfW+@FKRW3R*Fp1&T8-#I@Qi|h70Eas13abBZXtp9v0&gEyY_?mkI z7T5DeJO<8v9Nz?9$CqHSx0hn^TtAD&nnf(G{{+4noZ~H6tn)G~*7*f2o~wkDA4vPm z+@JW0^jc>g@Wqb%gU4Qh&w=?_d=*%~13x&9|1cKk`w%SdnTO(T@cQ;(G3Q6HIQ|GM zjz1EM*Yr_12c9>N#q<6+7T5VFu=rZ@Xe{PG28%Txi+jPj_hIomJ|2ttPrzdRtFd@} zufb0ObNaD(PYvK_g89$F&jzpKPh;`e0v69ZjKw+uM9tw-?< z;JI$ZAE-h{>Vd4j7VpPbVDUbBB^G;l6&8DbH5SJwv3TAoJPr0UgWnj(--Ktu{^#(U z!8&ij;u`)Yu7EjJd@Hz5Zo}gEJMcWX-xlyY!JK#DMX;YGd^>pE--nmM_cJT_{a~Fx zz~UNy0E@@ofyMC;;#F`ztYITGG5isYY_+#L)n^?@>!s2JHzrf=7 zUt;lf^W#`tpHJXzu;vc_B$)px{I}pbe;SMDs$nswjxT`6Uc}-x`WzN>8d%%|yZ9b3 z|6VMvVH1lvE&O?K|NLJp*7*V!$M3`9b@?I|Ykmof`E4wY?_qJiU&iA2SFqUgSFw0q zzJ~X~ItN&Mmi|2!_w7Gmar_%tT%T`ZvHrL4VH`ig{|>I_ckwB>$IkHgznd?psx@LBkJu>Nzg znDaa=j*nompHVE~Jvn|pc)$D%7O&9_SnTsgEWUqu0T#z!h{ZJ-!(u<<_(kA#c`+9A zZ^B}4FTq9d8cpDv!9H)nv*6t4uvq8Uv3TrnU~&A-SnTaBSUlHnVzK61u{f^^7Ux^V zw}L&~hTj1m`&(GNU*_>|gLQrfi`Vy^SnT0lSiCRZjm7%!!Q!!tSUh$K-wvMZeRvr> zb_K73`D^$?;5yui*TMa^fj$NmKt_sm~nas1<0JoXcK8=U(N{v>$q zK80)G&yMT(Jh*Nba0Bdr7heKv-i^gRFJm$19xR^gUM%J}v6$b&;v3TuHvAE~Yu$c2-_`ktA-^1eEzmLW9{tp(9{a-Ae zE5YL0X3i0VuVtC+7dymb?}x>6{QwrNu!pO#Sib{{ z`9Fxo_rpJg#rmCCyvMt+INt|jG5?3LxCb7B#bY0e6R>{fLG%ovXM6>CzdrzrpH&}- zvta&%uy{?c#Nx46VF~>^2KMuVSiG-)2#YzLxC`75560q}|1cJ7J_L*F^H40V+rzNf z+rzOq$8Id%vpx8cV9$@jV$C1L;(31zi@oLWPk?nEjm7-OU~!!vi^XgDINS@)u@651 z%)c6o^{>JGU=IWMnc#i#EPO54=X0=l>~&b2E5MvrV)1&t3X46z z8jHtHV)581{3~D&ufgJd{aP%}@pV`{b{dQ8KZD-{=KLxa_wBD?aeNkw*KQ8K8SL#X zSnTaL@ms-uDp)+Wif;vL-iGJF&r=In%=v9BUen*f;ySz&i}l}y7s39Q@a^FBdLLc} zk6poH5AVlfoj<^0{s*vl-aGIrn7@WU1g_zoSRDToEYAH;u~=svi*+{e$HCq{fjvIX;1FplpSlqWw+yZkx zkN+=t-Y;NreeT0zpI^k{{`nFXk8NWye-DfKU&dbn*Ws&JT*I&7eel=={0%Vwn^?^M z78d*YM}1|Q{|GFe>ycQT`=juWg2(Us ze;pR*em#C3xV9r$tTT$mI?u=Ab^jTB16b!qJO=KiaV%cn7vY=0-d=)V3fB2qEcRc- z;`js>>;D`Ud-!=Q*1s8xIk(^vxNc?qa92%`J9g53iesS;(V)E%zqme*XQl{ zR`6W6VX=pII0n|4$KrVxu$c4PSgiRwSj>MX7SH=GEatx(i|2h07Wc^_UILGOFTNeD z`93V>{~i|m{CzC0^D-9CwSvW(@5dhiYuj%R&#*ZD z5iIueQ7o>>pJQ<^eGH4|-Na)47XCQ64xhkc&R=2i{`zYy&T$)y^V-3m1pEIK7LWZ~ zEY|!q7RPH?tW(G5!Tv8`v7d`r%>Nt~#~WD8-^G`}I(K6+|1uVH?!jWty;yucG_hE- zg}(si--pHgFJf_>zl7Uh{XHz^e;JG8U%}$|SFw0sd<~0h^>r-1p8g#c_rpFGk3GQu z0Pde}V6mTXVln?)Sj_)NEMDJ3EcSDR{|P+TKVxz3|ALRfoD(cwyKiH${&(y+^;z++#D#d*C7i#@*@i~C^`i^opkUk2y$D_HFFHFz4#nZe?*ugBt=ya9{ndLtI+ z`zHLW;Jkhfi{rCcJl7olb#RaU1{TNPjK%L---5+se-j6Y-%2d5PX$Z(cOUp|V4b&P zvA0{XIG5Y-JUGV%{5xR&JF%GaF8pqAPre6>`(Y7_IZOCz z&g&ES(_qaSu7mlX!Q!?4EEbPFkHxjRfSX_sE&K&=Kir4g;5FUDUj@(gH7uU%>sYMw zcUa8d$6^l$Sp3ZR_gI|QKVUKE8(6IQO)U2LE&PvQZ--dSIl})89{Vp?+*kjK{|)Tt z7>nmR!D9Zm@xOz0zKc)6W6$vSz-RUMaRT0JnGU{x0N3z-SX`eUz+(OTW3m1fSX`?I z;B(-)viLz@Z&zaRyjNkdP6w9%&(ayd`CQ+R|0^2Jce^VZ8+BLIY1Ca&6zi^76m^P? zjqR@3XlxW4Mcub(>`ze?8yg!%QFp~gW8D=+(P*qY?uxnN6vd+0kNW(d&(G)m_&uJF z=WFlB>+^cQ-tW)*^Z9=7@XNJ-1B*R;6N`1Su(&7LSbTQQ$Kv<}SR8MK#rmyrJ20m` z7T0o-2J2spbHMfHVsTxU;0|E_9kF=rWmtTsF2`b>JS?uI6Bfs>z~2SybjITMx-M9p z_ew1Ge-#$@Dj#4|Ry`zgfYcoFUk?oU4~ zj^B#K_1=cX`_dnaYaD>Z-_P8R#rk((vHxN$u5ln1`@a*5{ojQLf%6W=L%@E9Vln4O zSgikJEanfxV$I?BC*U6b6pMY9VDZ0~QHsU!yRo>gdo);o1QzR$#6JgXj>4nCoO`jD z^9wBQ)fg6R?;+5l;epo{WDR#%Ex0A7)}P z=XY4V_WxmVd=?hpU9<5V@P5t3;(2=#i`PDd=YhS=$Kv^a8b1S$FTi5{LM-m{@A0BA zz8H&p@<%M@{0WP7mSC~BrC2=Af5ywe`pdDH|14es_Pi3W0?*HCEY^P!i)ZO2Ebdh~ z7Hd}ESHS0J4Hoa|TD$?Qxe>nx=2v2|W)(pSe&K|rM?4cHmz187X-$;6Bjm7*6 zaT_qFEp7+)&>oB97h!RqFUDg194z*hi^X@vC0NYA6n6mE-VuxYb{Q7yUyj9^dAKu} z-vx_j=}Ii-T!qE+kdMVZDZp2QIoDwE%y-4&T-~r(|61HVjQ7Aj!QOgdac{qeZv?L` z#Nz%G;of1q4;DXXzmLV9Z^7bReX-b2KYS}#^ENEz^vB}94Zy|VTm$hSFn=%}0_F_G z!@#+Q;}S5x6pJDtV9j4(aX-gkaUaHFab3T}V$EM+F=reWzsHWp zV$J*T{b76po(SHTUt=-nH+T}bCzG)_{s0!&^&l4epMu3TPQ~K8?jc+T*3aN+V9swykBdu`1|LzcpX@0 zJr;X-6>k97yAfA{IaPQQn6nv+_20ze8sEZV4_mPK9Bsw#fY0eREcUP+?*R8p@cyR0 zNj_NTEEdPV#Nu3EVex)NSgfDQ;`=uE%r?Q|UY&!Rf_0kV=3oyku(&7ZVX^+#u~?@i z7W30MhMaE@XMtm^Ind{@jNWn?}Wwo#uZr1 z|1K8i?Tp3zF1Qf9k43mQn9~RM1@B!yEUxQTEbi59SRC(<#d!zd==@~f)CKG(Sf?2l z@5Q-T?ConL-ndlb(J<8!e%*OT}ua4qxjeDK<*@iX8)FTmpXLM-<4dn}Is0WSjUEXLyaAMp}! zuBCWc7+;RX@n`W0a8FiZao*>#_}%gaEUtGI7ROiPa&X=XEcW&?7VpI?Se$DO7VpJc z{8w<^zhUvYSck>@^;qoZRV=RS?^vv}0gL$?@oQjjl~^3F!s4^@I(`GJvk7kobKb;T z!uVFa4P4iDTn*;bVDUY_2iJmYtixi>53snd53$()K3oshY`|jvK`fr1Ls-mj#A2Pp z_y{=fQ7rcJ2^Q;oijRSHj^mcClAJWo0_V-f=Y#uv0T#bMw8G-OYmM80HQQowjo-%Y z!gzZu?*B#jVz6co7N6N%EcSB=7T0wt7T47Qi_cm|oCo&V35z*bU~#?Q#bTY#Se&;D z7IUt|VsBUBeDE18z~cDTSgdmm7O(A!#dF>bcL)3FfyJN4ugBv4+J5%=rw9 z<0r6K=OjJ__J10S=j4C*4488ki~WCz#ooTc;E=vn>|S%(rn2Io}}` z>$Jn2!8%>Axb`ctSo10@_K=Sy{<#u&1>ck1uy}s1#p2nx4tEFV>Vd`mydI15-hjn3 z&=ZUM+za0f=Jdv5ojzEc>-$)&c?%u{_Bj~;5bSLT7V8hi;(hrM7VG~Q4+q!#6I>F; zOYz;{TJFK(b2xW_B;)XeNM;X zJ$(%S7QA0GusGLDJO?}jbMcd5{3$HYwX3jrwpU~Ev*Sf9=DdW( zI^|f*slZ~*m+=~~x3#zuTuT++1m*<8Od#umo^!Ey?Il>e_EIcf+X0LBq9Yb_F2i|Yyc6yW?sFF`-lHqAxF=U(ajtwUo`(V~ z-n*-@_&&J?i`RC=;=J9kxF^?QajxsIcptmto?w12TnO%e5f;~S6BhGt#$tYNEdF_V zAKVx0xgYKi_BjBH`*S-k2I~yOVsCe1@pmbAVX^)oES|l=SRDTW7WeRnSiHYOuz2r= zVln?mSj_)1{t39QpW-oK&R9GST>E%@Ul_k1KLD=lK`iD^!Q%K-EbhZYI0N?c2p01n z#bW+6ERIjdGr&EWiN$C9cX$?o3G& zpTEcAJ^BOwBUt}WSgg4Oi+`TJ6fXn!YB^p3-s_cEtob~C0lan<7Hh7?FNN`PEIwZq zSnT;_ES}X@@OtptSFzaV-?3PK0~UXWzY&Y$|G;9+*RVKViN()_D!c{ke=FVw_Ol&} z`}Qv00nWPY z{9`OW??S4Z(N@SSiRp8)He#Nt{$$EU*hX?zCk;Vk|Vd@jDiVxJL~_+9-izGs5# zZGxrSHBCC5gTgZqC07ROs*@!Hl{y!JvY z*8dh3$J=1>+P1hInA09#3fAd>^T4%t!kxjKE?6AD66b^Y1-L6%vl|x2uf^heufyVa zcPu`$J@AcTybz0PEW*9P``!ol4deZ=IM=OM{2Bi?+#jqz02hOO4#YFSIy3Ps@Vz=4 zi}{b^81kPW7RTpcvH!VPyzft9aZjGYVn6e+_`J-=&wzWr0E;yjVzIa1WAWNQ;6>nE zi}4CDXC;0f%y|KeI^8Rd`bv-;B3_*KWnzz?$2!c|q}k>+Hw%V4Vis2<9Kg;+}kjKL&G-VDWi8ip9A;!D7y*_!zjBSiH797WeHUoC98)i^cp)uy`*n#p2oPfW`aR5sNi1!{YemSRBv8;{J5P zoxy)&)dlB+a~0r1u!kbt8|=Ri7IVIj#dpOmSj_K>#oqd1ab34!G3Pcs0IYL67JsLG z2NpjUim{kK5Dx<98jODg*8edUzZ(q0V*YSk0_K>DkH%xb z{TYkLfomU+?+@b>u$Vs)i}&T%Se*AacoKNdCu1@H0Xzllf2sz1ei)0_mf=hoe*}xy zK8nSf)3A8$bUXv>b0(ezu6H(m99+v2SX}QMEcP%L&jYWWkDmeea{(6TU5J-}IZLtl zz2(nX?BOq1ypPMU*u!$X0z8K+@hY&+YWyNt|0OKeDaR7OCvgSX=gU~E`3e^6tij^7 zYwm0-4T8`rrV9k?Q%=sLP_xB4d zj-SHfxjK!{fcN(-j=*!3YRh*yuznN#HSpTzSR8MGzaGY0V)4GD9Rt_(4V>-&=Gyad zt1#Xgw*l+4#o`*jjm78aJGfmKZ;x}qnwMa)=A~HdzXKMp?TGWhbJYod7reGJ7Vk?J zd?omE*;QEVCm)OB1z6nMt8rKG9(BXr!Jd0yajxsJ*xL=bC)isrTnP41gvCB@!hON~ zept-E6^rAyVe#7jSUhh7u$Xf@7W=#di{r&uJlg~DAh6D0JOu1{D84(4--Abh>l%s0 zXXIyCJd;1iV*OEAT+3)Y2HeB3Sj_n)7U%jE7JC?n#r*MDocBH~&U-%=>rBAnwG;6a zaIdCf@$5Z>%fS2$o(7)(=~(RHG5lNbd&mqd-qV?Q7WmGYjh_JP%)#ROYA${X%%6wF zocUOs>uD^Wv1jlfzpzdhJ%0g5RqkE?C^> zD{&97{`FYAFE?QE`R$3tYkT2Bu!kai6L{^-SbV;EV{yC>?hmea0RC|pABM#`!?9TZ zCs^F)pJK622`&xecjJ4&eI9|uwU5N3z_~`_UxM|2g~x$)#^VX#8Yg1$+F#?z;GRE# zr-1oWvDn)~_~9^KhQ<0BES{@Ju$ccS7RRSyF@HLq0q)gIERO#U&kEzSvDm}oSj>3> zi{o>!cz@^OXTY^Dz+%oqyeNz>#(x6ymtgVPUy7H3eJ;n(g8e^-#hevb9AAl7gY{p; z;=a9v%fomDeg$0P8Z6Gc7Ow-()p{(h>s2h?m%n4N{st`ewh@ax`~!>U|1~VmRf)xG ztFU;MUdNlj`kS%%K7SL7_20r`{ViDHzmtr&f}ihiWAWK}2k!vq+KI(F?_sgdzp&Wb zE-a4k#^TxgH+~g~feqgT>GEwpd)( zx3Sp6cd%H$9Tvyi;~emJGP$?|n9~vGfpc}j`QUjdz+%qTxGVVlcEjDlHTJ;0!S{b3 z+!s90{jfNGEA9{08Gwtyeg@(};9P_8kT5i`PEn75nclJzZ5S6&%kml&h;!_3D$WYi}hc?;`k~o)>)0q!QLvcnEx^s zYrcZT@illYSm&>J9mJmtcs+RbUd0>0oQ=5BasIAF6&Bb2Iu@VbH}EDfe=~jy%-Mp) z=Xxs^&&k_Z+@E)_IKB=46I|C0EavRQyTCQ>#^QbaHx}o8A6J9>S%YiA{5mYw`~Zvj zA7XKT_Tl~DTKi;(Z^D z$AEh>7K{7&ODxv>6&7ob!{X=8czhq2b3YbyCSY+b6R|k&udz7(8$1cTb~2s<_AnKT z`~Q#z_n{1nITXJfJF$FVrq6IdLdgT=j? zi^cj+Vln3_EcP%Di)VE{UI5Dupj(>^20{1z>;`vWq%yW^G)G5MZ z&P}*CSf>x}3(nOKi{rOqaZhf;gTQMC;}PJVjKpHkKf~f0e~!gxXA~B5M&k)!{fStt z`D-k$Xg#IByvi$1_;m^GC3F?W0&6pN7THg6UYi z_AxvIoOdP`^M8l`AGnrTSUelE@dEJtFT{(&_+q>S>}@F)d-yXJ*ZUVNjxWQ@!TQf) zG3Plf=B&VCKP$1=^Yd7|M=xM8e-##cSdGP+FJkc?y@bW_ax8wnRN$AvYhS_Qylb#n ze=S}I?!$U4Kf03NBjF9;S~gS%AhVd%=2H3+UEY{qN#eUwz;xqmh7W>(P#r&;U zJTq_OZQ#Azj>VjJvA93~#5=&X?8LjkoZVRbeEc_lKa5vnv4k8fSsmX5&_2 zyftnEo}acj53JbXHYw3o&gZVvhPq2P3TnL_@B776r+s#-!C%v(_ zw|(#}U`}5w*6D})gL^Un7lZeDARYwvJQxoFdl-tvd+{SY46HdEmwv6%A`7RSr6xF;1@ z?D=IZ?#U}y+`~0k?0+p@2l0CVZvg9W#Fb&Z3U31Y*^IY1C;Jgj^47irFSlq)ev6%A}7VAVx{-@z&#m@$ALYM#}mLaHWAMO>(9mW!20v?0E{{WBK#{4ZFXYZ(@6F2~|$-?Lb}kI&&1V9zVDIQ~2qYrcTX!JG=b z2JB&N?4+uHgzHh|h_&=~%=QUgj&Q*nvh4JI~1la#cdF zI^D3Ce=Y6~uD1v78OD3z8^d@Z7W*l};*;srJKaRz{eFBT)bMQQHE%UKB*V9-We+G-!F2G`+3-K~=jmz=MF#bFi z_u&OB=C8uyGq@Uy^j7O?(SybWCYcDw_8 zPIqFl&U<(_nE!7q)_fm}4oI1P@%-N5{oc~~P`~Vj3T|E}x0}Z$lT>D{s zB#a-$V*O9BxF?@tanFxoar`(w0q*%pEarTUzW{qUg~fNyX?zCU+p{S*5AFxnzZKsGUfUmw_hJARb8g3Xfc+O^F@GQy z^Y6ss_+40>cMulq48}vib2t?L7|b7r#l0Gie;US1u(*~|JR*#b#G}B^tkHN(7$1wr zfqOU}-w)o$33v`T*IYag+_(970odC@ya?=hFtBq;ea^w+crNY$_Sq4Oy1%dogV89WWlpN?mM&-hF{ z3#>m|gLR(3bHFn;7mMRh;(6e@=Hmrnd?79e_q+n{3*-B7JveUz7V8|uVxNbwcx@vV z>mSBq{zo{5{Evyn@grEQe-s}Jl9&Vn65M zmf&1zoCWSxHf{yhX^q=}Ic;$}@LaXWIp7*|aUqyfgvB#_6TUf&_r_w)KDaN~e?L3~ ztTPmk1M7^(6Ttk5coKNVCgUmKx~AeX@XTbeIQ|G0>pY6Zo~Pj%;9N7Y_^$pP7W4lf z7IS7{vF2<%2b^mzo(G<>`FH_Xe<5B3)>({~fcZ=DGH}nA;}v0iB^LMLc`V+?7qD1o z6&CwhjmyEB6?h$(vmS2%uic0%!J1Wg6Zmt}X1oP_UbfV!Lk{dB?k zV9f&DHH>$|J;6G?a3R=R5$+AHy$|jSuCX7!4XoK8i#Y>uaTp(n2Z8r!FdhQ#!%(~k zymm2O0_H5me*yP%85Tbamg7ory;XP{*ynb<1MFuf7HhtT#eV*U#cOwAv4`Eb8vOH} z8e9uL3w3xO_*t_b{|D^t02b@iV{xAwu$XfYi{poIBba{}9|8CLDE?Nm+<);2Fy|yb1=cx@&xG-_xM}BPu4cG7xIZm$OK@FjoCWSxHf{x;rPjC&_&u#H zZV%3N5f;~VF&2Bv!Q#(Nxwu0Z?}+ojYdhi2;C<|Z^TB=!@YP_>HCU|Q6?X^sst4`~ z-lJYv%>N#~5zHyXV$CAl8(d=_+!yS#AMOvwV)5NuhUbCx=i^1-wTtmGa4pO63h+Fv#Nruv9*ft$fW>Q9VR7Eo zxEwsg6?hHU=UTiD%vp~&fOBoco4`7ovAAz<;w|8P*^2jpIs36#=Rdd}%x}Pr;9Q4s zR+psDY}^XGwl!`8?q^&4ZE*j;gT-~V!(#pR_~J00gT=oKl#4rnH9O)w@SWcY7eajY zaBuKk(FgYh>-WR`!D|QLVlZbQ9u&q0;~`+3q4+0YKR?AK;2KNu2=Jbc#G}BR(Rd6v z*H}CO+@Fbf5?FIGo&w(AskjWhHiM^uy-mlz1?QT9#hNqmEU@NmEUx`=Eap6c#rr!4 zF9GW>#Sz4xaaVFLz<%1|cHp(`aUPi8311n;ufqA@d!qo0Iag!x+H0^_vnv*Jy5a8N zeeZ#LgKO-A#Xi4}Zvn6Ei^ZD#uz2mQxIb8P04@e|2I4{Beh$VZVZ0QN0PBy$qr&)T zd@tC;FR*w9#$d7LSUe7VpNz*7!uUiy3Ecn5cn(-+E?xlkwh%7@_i8a-0-p1wcmL?&wd3K_vd9S)_etv^RB_-{auUKfi>6T4dA>RaV3~jg>$Y- zYUX0G&Ly}5cx^{4zHcwXox^w+oDcS2fV+a%cEiQsTm!Ku3Rjh^Gk3Ci0={31N-cRJA>z^3(g1kqyUTgS7UMf8Z3@?#p3se zZunYouIsRv(;Z9vEaRTwT6*Cd!F?{oVtx_63A`6KV{t9Lv6#~b_XT_Ihx>yy2jF6` z=0H3MykCRy5b)hQ6b}RUa5x?T)*p#Sf!B`4_kwf%0*m#>VDapY#mm4wUyfIRYhQ_1 zfzRM-Tn^T$z-z$&*1%f44y>~t{~hdM0~Wt4Zp4+~`=knQ0_WO{w}5kP#qWT^RlqY2_E3uN0ecvM#r2NFKL=?$2&4=KmXuIq&0YaE&$i2$*ve9|LP1$IY)!@>}36@O_ev zTZQq~xDB}8wzwTQZ+jeFljNtmk^|1$7PkZEYL9ckdy$Jffcn7YATw@=xRy;= ztg{(!3FBMwHZXrX-T|JCo%lV7?-AYwu4OkCpM`&8ao+c_xIfic%&EcR^S%d*HTU8Z z;JhdCDRAwl@&CX+{|}4#XRtWeSu8%YU*fO8Ya^WMmR#Eep99{brdX`g3^xbsw7@OF z9@01~jA!Fk;Q48d+kn@$#qGe}+T$GX{O95h;P>#3I1jwG6BhHYz~UZ$7mGb~#`$3V z0^A+!rw8r{=JdjaU``Rf3Ea<{v3S3FV=<=>?hnp202hNj48()LnuGBWaIT?P{5<^; z{xO&{42v~~;}S5x6pQoTjm4aMu$VIfi*-igG2q!4i+=^~&p0gRjK`C}`#2ekH6OrY z&VyK7`xIOT_K?BTjQQR&9nSziuV-R$-rwO_VEx%xymyb|IpAD#@jUQc&Bx;S(^x!9 z&)@}MKMV09FlRAd0 z!gz$meNJ7=pOJz2=isJb&&_Za*h4lJ&*%AAT+0Qx6?koHEbhaFSlqX7VR5_-7VEUd z?ZE!qV{zV#uvqhAEMA*~C4PQ!E|`A_?f};8i1WaG=!83ib-Lhu@Uyi5cLnpi;qG9a z9{Bn&eghWYhdr^lhrMti*mDt{0oI?1XMyw1#^Skp96tfppM%B!_RU-@{=W1{{1kZp z=i&Ka&8P7KaGw|AMPYm~UIO;N6fXmFmSgeSXR-Kxcn+@s^H<_>u+Iv-2JCGuUI(sm zJ>CG`_l>v`e7>siX0ZO7cng@b6>kIY(RRE8thp2K0>5MI#?|0?sKK>h4|RASxX=4> zz5koJ8gL_6=P*73?$1$t4E(%4j!%JgPUAD+8qeYgyw|DgIM3kzG{eoonk{fk@Y*!a z0(;BG7lLd278di{V6lE%+&zrUd{g2g_6ic7%WO7RGAjU(~T!}usX8oc&iJO;eKWAQlf+VOY-xc?LJ zZ@~LF35(ZG##6xlr{XfOhYX$p)|`oFf$N%$=Yajs#q+?N`B=O!Ph+u%XYc}W-i3G( zn6ns*bNvx7f%wehrQo%H#$wK2usGK;EbixWEcWv(ehysM3M|gM60ZXLUyWY`*ZUF{ z=Pk$LwH0^`Sbr@Rd;TjHbN+_cf%C4%8^C+C5tnsO`p@7;z~}T)EM7Yei));YXF$Bq zcow+c*?10^KNrsf=bDej@u%@K;93@7@i|(E#r)r6ajrk$MG)^lUJT~^5sNv0!pp#% z<#+{nhF9V>VE$UX4(xe7-T?0NM*JFh-YT(JvkGqkd)|uc!F$nw8^M}~@ey#(kK)h3 z{1aHbMk(bB)JK z!uV3WEQ~M5E5K`4;#J_at8qD4zXGp;_}<|SVSFR51kYO)-T_{_6Ym1g(r#Q0p5YoS z*4%?@!9A(N^g85%zao-{=u03@<`wa0u<1yg8W3hPcFY!3Ahw*pEdAzlRT&tkj`+{5K~1$gaByb8=&jl~{b#A3~tu=sby z%dvRID)1U`uC;g__?}shE5W&{@FsAs%~-7eCKj)K3yU?kU~zx8;%(q_y&a2n-o;}5 zf8rhBduAuz1%BVyjho+)%+&(71ba*4EO5`W@daR=R#^N#(;Bw}`)rSMz%!7Gi^07b zh{d0Y?!<$@-Uj0#;Jq7)hk^Bn;}URPrFaBbent;My~|9K5yyi*vn<*MMtZi?@XFt#})F?RLB~jK7C>fj#fW)!-mf-%R zvG{)e1{Ujo6N@#ou$YsL+kku07Iy&q?})|m%dlAgaxA`!@^DwM=We(=cqV&bar}BL z_HY9h*U}SWn~cn;XlTr56=Ph#=C`VzC5{vsCl`6Volm*X{H4{Pz?z@Hh{;SFJYBd!GZqzZ2W z*SHyP0qbnV;=10(;@-Z4#roT@*xPn2j=zg{fHimGU0}`KxEkEs8e9wJ*WrC&Kl^cg z7;nIhU=N3}nEw$L|DNZ^SbWBhV6o0oEbiwg_ylG-!`Z!@qs?@T-k>}@s{_xW)wp0OveI6eo9b>`wt;I*6a7KqOP-UjAu$2-72cj8@O zZ@Y0dm|ufy!TVl^_kru(kH!4|VDWu;0E;#2u{c))ZUpz?FcxcmgvEXP7$5O}Q}ZZ3 z27Zq^j!%H|p2VlXny2v@@N?lT&iP(4o{KwxJ#@r*;Jlr1XRv-3EUxiNEPiji3XA)h zj|;%LuEt`{HMlGI40gla!F}$5dxHDW3m1ZGEW*9PHTJ>9;JgFzAh7?zcnCP}P&^D= z`*2(m#!K-Cu>X;G6xiEnERNrce*w-r28%t9#S_5%iFgv2KN(K}^QYo6u!js@1Lm*A z>%cu+k2iq*Z^V`0+N-cQ{yG-N-@u!|I-9XL*PB=ze+zE`>u<$7z?_|U7ue@+Tph-1 za4mQq>hL~ruKoBF_)ML~5!g@aMt*Mz&UHQ(>tBGy`_c-F`K@sqaNf4K9hlP|cL4kB zh%X0g=3#N4JK;j`{ZoW{JMMb`-vZX`i^V?s;r`&f1Mux&%{#ETu3{{HCme|H0&@mo zvCd#T1gt+44+F0qj!VFIMJc`;%((}Pbw*&Z=aG06xW>^~taC3O1OA!ySUe8g!|`|m zSZ5*@`}sBgO&Fhq#d#;=2f=$c1&iPRr{Xd&CxfSfJx|Avh4J5F@v~_L7V~G~S>PVd z#&f{>bMZVde?Aubd>TIk_PGFypScV1BCzIS{3kGf2^MQE#mm68FURY^ob`AIxNkf0 zu`qrdp8%h!llT-^|1^%k-cp79`4>3e1UCiuycrhPbuJe7) z;qGC)2kr@8+Y5_-X8Ju`2+mc6#lOFF6TTU&-y4fH`{2Id`?enzb8f|A{o8PVa9sm% zG5B5`hzEgl4aP&j^FI_11Ml^4EY|r6E&=zd6pKCFjm2y4!Q%J`EcP=Jj{@tA#$&*K z#^P~c&Ukzu*w6h~yhjtT_-}|N;z{6roQ$V{eNM$?V9gAk2KG4}&jahv#|yw77UD%< z&Ba*k|BqO#`6n!nFTu;eI?M61;5+R(EbjjbEat4ltH8Ca#^qqm3M}TljK$~T6)g6@ z28;8qbqwtJulR3Z&2@MKn7@5?(_tho(~Iot6L@Y&sqPsTGi=YnKB7Z-#1 z191tsmQuU`u3>y3j>34V74;#mkITS!Q3gkClKfO#;&!38_QV&3{x2rZ3*()t`S*I& z@jkc3IpBAXTpZ;mC%;o1Ufg735pt_0t8Rd`1j z--)Zkc#Q_1qy0F#F3C@IC+-<~=tW!@#*2vi)+A@IA8~O_{M|A&kQn0U{Z4uqQWM|1 z435BOEj5&QSjZVpToU%Ylz3FQFQbVkgq(@QlWLOtKA9N$c3}S>Af8eaKZB{M#1Dn> zhl#;wGgU?pV15Qi5RYewXM}y5S(7e=_*uh!S0wA|hl}CV6-{m)h@&u`T1os;=&hU> zd{?9@h}YD_&q8V~@wzbAdSdW7O1(;4ncTZn6*2g`vefIuTWaE;#Zp`83w+PCz|poa z*LLC^VV`%hF0khejy?+a;$z|?$$080@v(62@tSl#4B$B}z!CVYrT$9{j;B83Je)|z zYj6bd_{o~|-H@Hvq}M%IF1oTwuMs#3< z=Y*VG;{0%J0rAy)(w|)0q%d_2arcnZgSc={a#oA>q?^O44o!Nsz)_!&^L^r5lJQhu zVu(Kr`t3;%xg+UeD2|G`-m^DwPr7o*p5(oOBZ$xBP~wt3@y{=*QsTQqoqP7AkBv?0 z9LEv(Z@p8$q#pR)tOd>i_bnHfh4BoICWL*MNDT3{zb2lPT$`FqT(&1Z=c&w|bm8=5 zPl|9fXHW93m`l81PyGEkwUGGtq2?cmmxR4tN({LjoAgTknHUE@tSZ?*Ao9V^!7J; zShpwsoXX$`;&;XRJ?XySGu{tJ8^XFa5?Ag?-XT?c(pliUD;wuP{CwePOER9?O1vY? zyOa36u($srhWK5#iyn3-^)onvxQBleSBH6Pi1&r@{oG&h*=d2J|FHkQD-ICXC*!FG zYJ%e#yZ}4{3-J>0+NF2}_&lz}wf*9;Ab&~jtFn)?Uu%s(z z2}j`XyHcl#qp)wOz3J$jy~$Z^O5AR5Ql~v}&fer*k-IltmbW+QA4lNN2&qoQ`FoRd zRY2T*Z}Pd&gSaqUTSR=*-uN>;bu)2a=HfFw)sMJ%Z+OP3KQO72!4bsg{7&K_q5e?f zl2Eghc+}qHJd7s3cW=6(3(v(bh{0z(HHH}c``D?m#N)zT&+Oy6ZQc|JHmQ*5?6=wP(xfB&O;sXzP-sic|X^J zzbnh&s6L$M2F4-&PG#Jf>`w+q5Pvs2%=nSe1CEY`JwHx-D%3em&e`OiW^nZ7-uUN~ z)K|n&xYwy#K2K|t=csip|DEO9_!+6fQJdQ2bF*zN|2>!5^z(c+WpI>Jn>?F6hzo1OXD)H?kkf~_Z>ZCc__o^kJg55CrsoW(jqk-= z92JN0fy5Bkzms@KZF2U8691?+{(VL2$F=D!*pT0(AR9;E?=e!th)a_3R4MU@P-i6Z zsL;b`);lg)O9n>}{~R=)n(#88U)eZ<_;cz$V(@prsr!j1gqjnHCxyM5OigHW8GDGM zvanYfVu0E;;o9ejSA=U<5|`H|@2CpmHDP=$@w(dN46i5NP@Dd&fOqvq z;>z0Ozg<;D3~~Rj6YmK1cM|Ukd$ODO-?iyWy6_HspSU{Y*AVYb&ReRM_0}c%8615O z#y=$97wYUMZVdZ*nE0b`-aaNi75Y3)oiCFfGB|>c1$=&e#W|j$>&-Dare4p&wJGIceLu_d$$xvg>~WCsY@3Y)y1E)ML2@^bL1xC-l4ZXTnm0b zS&A#cGf;)2zM)P(;^MmGY!4)c_zd4k4DsjDUBnQN41To>7;av6;lP>XNfJn;7Ef z;&Ea)bS2Nu6U1}E_*~)zb;rh5Qx7a3r7l zD~VTyK35Z$hx=PWyrwSsUa__=oxeWGDZqu`z7^qpVSGQ1HiUiNSeGt?_;+GB`bS;- zu1LK`Tp7+u74e(l{JcfHHT3W{@wU+OcH;Vw-$2~Re12vf<_ti525|II$p4smk0j$6 z96`MHqr}I;+K&^T3iF;OJ`={zQuC|i99H2d3TGqrK{^Zk49&(-(+`sOc{Ad3KS-Xb zuMs!@Ao;ye3*xLWo=qJ6Cwab72htJ5zw>EwAYFFOf%tbj85}hYds*~G1q{8Ve=3&Z%gh}#_C-zw8XTViH z=?@R29{@i?AH>nm!}uurg!uO@xDtG>t8fIR*RfZliNW8Wr|u;l7xs2M*TQ+7c!%Q% zte?7%7~=QC{lpVO{=@_6tVsvr@A=s{g7_JkO#E=zw=!agztd)@5AmOy;OG(Z`SYgK zqr}rf&FRE54kW)Lop~Vr=&WSkX*hzopV`E74kW*0oJ;&7r; zPt9W-Tua7ye#pTQ#6MF!%{aI}8Qk=lM;CXI=TY_gejdQ>=oQn&?co8mx_;=d) zG4SW;-{KkY@nucA&cu~rybA9K<2!L}7_Y zv&p}CNv$S+@j&|K8~A8Va z))QBTJ+ESoaDV3}g&7=e3B7G4emC^vJn zvs_IK@iSh-wcs9JLE|+7sv0C-1IY>OlNH!4bso znM)YY3*$I~c)Szw9ifL}V(>ht29iHG$;sdd;%Djy#6!ZhLy1f3yrN74aMO$va^aF~q;m+00tN`~Kkv`M-U}TQ#Il zf$yTzIBK2bq%Leo=X@*4$;DBdBq!CD_@Z#_#SQ5)h~Hy4g1BZ5F~rYlE^%H%a!xuC z-xzu;B!)Prh`4t{@*SoR@$gXRC&VRTyp;IfhU9$yf_O~G8A}h~cfSmdAifvBBpw&) zk0*YpAvt3Y6GQy_hcaS_&t8T)k0tpTTnYaEyb4D%8j|}slXzA`awcaJ&!LXr{pJ!c z3w4$guLwCSiC=0+KC{Y+Azp6<@jB{vXaCm|Zwlj^iMNEBTZwmsnmdX2g_`?`k2ECj zoTJ3Y!nMbVvkoTT+p`byz35;vS8L*L9ZY&|LkyqZ*yQq5TjHF9$)4vD=Z9+xh`WYs zyAgxmTT<5&gWp?H*AaIQ<2{HAL;WIRh}U=%ao>Z<+WQgTdN4Vww-FbI@qxr8;o4GS zh=2CEn;5?7@4)XNhWNcYf*9iaJCb-*7#~f%EQ~KFUJ-g&NnCy~d4Emc|Wuz&Y=gt)8^7={-OAMW^e?YN z@im9y`<1~F#Gi>>iMu7^scVV5A4LM7UJTNGm!YML&?vcgNPyijyjllNYa05D0>3_H!F*9R1)fx5|2vuDm9vT zOc)4dw3b$Z}JaG#6ts4zYnj|20^<4IwBGA;vaW^e@YpKClyJUyI~$A}*f>wSV4 z;`1|yYa!d;tK)KTyaKNS=UR^|!JI0*1+qrNk@3 zKCdKR70%mg>c4a-{*F|Iqw;W;Du~yGd%d3c)o>pEP7Lv%ac>~53^l8WUk}ge8^l|} z8Q4nvPRQBDdbb}+zE9$4Ul`v{{AqX=juAurjy+Bc@$Z8EOZ@qv~;&x%YJ#kK`lS`b}n0ycEM4aE4^j1K8eaOFo zxNpesN8CS*4Sc@uo1>X5uX&XDji$jmh`te-cCdp4riu&I0!~8%Gd-$KFW{eosifM-2Y`$<)7y zcQwX8`=oX^rgOmYT$~5ycf$GLJuSf9!Jn0S;F9-~oKidk%$bSjfH`yV0qF@CDJYxl3A2eRkvfH;2y@2k^s|{|Ms+ ze;+I$I%mfv+QL0+q3V!o6VBmfYIl=Pi%uZm|AiaPYr(if+U~?{jX#LG5F4(6JbY zgRTiT;}flhN%-U~;r+(lcxFp(i?jLsp5PBy{SR)*&48c(gy^PN`&8ON-!T#0tS#aB zXEy$*)%h3>dj5HwIiGKHPFxKBJDMfLWeY<4a$-67>u{FntUY=Pf7xnYgfF)7F2R@C zoG-^g-yOe)zi;g;aPaq+XeC~5?OA+{%tluc?EBo^$F_Lqn^9=s?%H zMtEb(-vrO!8s@D4KY44oN1TG6WqDdt1L$2J(Sh=}!9nZcY#j6(#dEgu?`wtjFNqE` z&+YK`*1rSZacel2J8k7}VYccyGfQ;fKc7Yy;azRpZq(2{j4>fPnB0m!J+|iNga3?E zKy;ve^~8&|hI6wR?{DK8fS1@jmu}5nI5dob7tlI1N8*TUh6_SW8ETW$vYnoo$Xqix#>FQnbiZ5jvFd@i!&`0-bJ%J-|AzB+oxcgufj;A(iMI~zQ5(GN_At-waL{iC z&c)kr5BWRb7j6&pb`f5@OZIB45x_;kxZ0|%|2nfNU0GaCnemYGA%k8am_ln}RpKaaK(J^uXK zL3Gw0J%-QS9-cks;S08hd-PNIlpSIIr|uyC4$F@}yhFeFj2_v+cP=}0tP`RG|C{9K zQG9M_kLKY|?+A1948Cwj7*`qoqV;(Rf7#j>;fr^KF)qPD>*`JX?H%D9S&A>S_T_l_ zj&P62;-L9ig|FEWo^{vapYI6k_6vNSZM%L)ZZ+`F1J#M{8>``4{D&RkKKSE~+?T;0 zi$z5D(~fX{{ftAn?%@^IUWxyik)HJj=`(#4ChyMyxz`mjOye0JHyxu@aERP#ZLZzoSoquBs$PJcsky4 zXE@fa@H0c7=q$Xo^=X5*wLIv7nY-@xFs}7P zcgN0f-yF|8fM5R!(Sdlz7Fwt36opwCAM4jR`zIOy}&z2ut`+AE0;mY&6$pGtnv z`)Z;Cy)&OiJNP+Ih;Fvc^Bnw98_Q!j=(~)^@wwJM4_{z4JcTc`@s{B)+ng-I7hC%h z{LP)=+V~c})W-D={;stz!$IR(j+gHY?+UW`8r$z${4&aj)AH=Xt89$B*%tiVrimHw&pZjyS$p(54*Fd12mYrWi#_=Mo#C1J z0Nd8y6|Qwe2m0++9$s%(n9usVa%+RXC*~0g!9UlfiRIRwCA#B7d(;pI-9sDUjd$7K z>EQX6vjA^pea^%|>-H=hG`FpH@$4Pi6QTn>Pqx7eZQC^7V^=ued*ZzSPS2(`K zcu5#zREm$ZZAak{o-yznc7@;PkHJCf{6_pHYafe)`j5lMTb~Iy=o#-$YM!_&Jo^#d z6lh zbNI_v!y^1Oo7>m%#a7P}9Q^MDqBrrSR{uNrGV8M(Ut#sE#Nn~CxsH8+@3-~?_`zM_ zT6zd~tP}sci>QiwM^%`U>UfQ+&|VV<-8XCDxmDpBn8IsYdmi4fDx4#Ys&cErKQGK_ zTb-DJlRM_LO^D^-uPs@k`$tu74gWd%1RV6avN4_?`a}iz$(HjJyk%9mCbYs^SA})b z20yzhymLE;eSy!P5FKd!x5dx3oaf=~tHOEI0qeJ~gCDymyk|IWPi{W=>q!Bz5Ohx=WgO{E=t{Rz>5uIJPC9#MT1HG%6fzP)7bMVJ(UytLU?}(qkLHn9Z9`N_~gy=xynumktA=7GGuUAK{>ySCa?)vrs~GpnZLegPuJ;!9nxz>7Lx9 z!C#|}Ayxx_-c={ovi4kJZSeQ6JYqd-uTN|UzJDWPWAHUJA@&BJvk$R9_-zLezp?gj ziB;f_*KVS-_Gk?bs(CFAn&;1$EATa^i5c*H5~2gm&*wO3+b?j?oPUY`pS6F5gT}rN z2fephkAH1_zQIAy3E%F?UGaTrUr8(ne;#Ft?icI-?>)IizlIu$i4HW+|G_J5UmI}H zST^FI{G0IKEYJV&%{G=TIH=C8`1U>F`E3Ud8t+aVlyeup+w%O*{2U2=5~2gm$zQaC z&M%?^)$lj%F7!!=4)i<5XfNO2?G4-J;GoZ9N8zAr!qIzkGoX7M(Sg2WJ!UU|cfVKX zY?|mm$KqHVbZtM5ZNblHLUf=ytKp#MvFi9Kd&4#MR2($+({ND#<~V39E$}nKexsJ; z2fyEh=s?$yRygQ-btVp)!?SSEbAD^K1wa1@(Sg=U8yvLXvvJTp{T#*%zCBI67W}nz zFwx`NONbudUP^S<9<{|m_mOruDF3-QXuRj)pmo(A2d#|`IOw>Xk6&opUW9}0iG?`m z^I)2B!9l)%Oo$FN_KR`Q^Jixq^jy~k2hCMi98_C395kQZanO3`frE}k&%L?j;I9c; zVg>l?Kqb+E)<7>D^x63m9F)H|4jNY<95fGoanNVIOL5Tr7csZsw=E@(1^=8mj_9mC zD#k&1F2g}JT+W<;-!>sS(Ea)f95l~Y;-F`zt8mbI?uUc&^v6N(MF-%Zu?)mP^K&&0 zn&&|{Xq{h!gO2aDIB46!IB35mIOsRPr8wxl_YfR(&JM+|voQ|GLC0bQ4*Co-5(mxO zC>%7#>v7P2N8_OO8*tEfF=KGhnz<1N9gCZAQ2(*`I2-THIH>89MtDA9JKA@)DQlgO^6P(hM&Me{paGK`sd-Gb@C(* zx(3e2K{*%Tpf&as4r+fI2hHs>IH-Lg4qEeNIB5Mmi$i#Z$Di99J`X;RgZjUKzh-$} z$3fe^frG}rcyDfd@cZgO>E(44=CgZBFt4w{pp&IkgX;et|IzyV zgoCbKKjWZ0zu=&K{Tm0JFTdiT_Wv+0@HHny2U=qlIA|=DIH>;y95h!O*%tgfCqxIj zA8o=xYvaE-sQ+&`Xl?%w2j$<4gXUoi4%*jN9CZF}!$I@B9p7PncH*G9-GzhlSK*-h z=58D`_TO<(oqyn<=k`BwP@Q}5y_SC;zTfg6z(K#WI>cm z@i^%Bt_^Weo<=xm9{$0;K;MTF9q2vz2{>p?HpW3UH^D)9n&P1Kb|QH|e`iW`pg#FH z=vWlspfNVXLHCZ6a8RC;_vO|G{|+jT*b@Bprxh_{?FrF=*3v1ogU_E39q4)TRQxon zp*aqE4s3yg*7NB&sLnIU13IUO4wSzo4w|c0IB0Iq+?SgV{umVyGvMnj)UsyfkXJt9q+j>T!(w%pgxzdFVNZ}I#8b8IOrbQ z2M4XOzBuT(T#AEgD8fO;9;GaJeq67865(mxIRXAwP_rpQQ zs6P%`V*~IK8%rq;s$mEYI*vne(0GU8pn1Ly2jv`&gK8LogK8LwgZ4EFzux+crhf2q zk`NvEclgl_IB0&x;Gk>xjX0==n{d#x#8@139UF&(YPcB(t)E-i7x?ys=s^G8&aLniwTmnAyTzV60BbC|(F+a@^ZSl@$#^4yDqYQ7H# zwcn3FVC@g$Q>>n;j0N=kLv*10({NCphv);ko)8^qT+?yT=e`*@Xxo`MXnoGYK{d?A z!9UAIb8yg{KTLk`=Tt&;plkIb_~TZ?6F6wRb8*mo&ci|T^CZ5&*7j5Q)3&aj!57+f zvJ3}3|2&I7Z#BPwgZBF(4m!tQ!a-ws83&DV5e~ZczJmYL>UwBKd;a;xn< z9CZD89|!Gs1vx=~he&jw@vg){{Xf7#*NqQx&>ASmLHF(~4!S<9!a>L7BOJ7rR^y;N zALF3*PjJxOeu`IEdnFD!UK?=GJZ!{4+it@DYuo;YgMMT7KOA&z+04BL{C?BK4ES?A zAv$Z1w&0+#Y{fzKY{Nk{Z^uD%y8{P}aVHL%lU+Dy{Z!$gI(Ors_TO>P{QrUPv3>2u zLHpW=gVw`-{D9>-Nd4gZBt!?wc?btxyAI=^`j6nCXNkXX&}XH;anQNxa8Uixe%=}G z4>@yiP(4TCpgu?Ap!~<+pmXQg{ketUuU%I^XsxDj(3**r&pAzSP|l_}Xul`o`Bqy2-ppz^2|v}^ zPs71KCq&H|7x=LxLs)zfj%T%Cb~)_F@DG!L!tGp(MpaM1OwHFF3)PnzgJ z_og;DXdceSL34Eu4$9dU2d&9=IB2}*;-K${&%;6e+vA|)*Z~LSJRb*bdjSr5$J-GH ztQU;#wB=f%h?A99qYb0DF3B+k@YFYLC5Yg95m0D4iVw5(e;p3GCJe_x z^^e$}TMm9bWQh)xXCw|Y0Iq#yArPt*co$XxrI1sOC91sQqCav^E~WAGP^>37L3x(q?^vDhGG6e< zIw3mHx>|;V=6N{|I)C58LHXauK{;1&%>+MJX<`O^oe8lV{ISat9cVsR(hj~)mgqp& z*bmtD!?53k=s@@Jay)DMT7`p-<3~6s=W4bE|NDxB=s?H!V;nSZpWvXi{V5JQMr&}; zv0ICSj@M^6XdXVtLF4@b2OXm?@vU|&w&9?h+i_6N9XM#)oj9oGT{!4Gs=`74rqFKY z6a4#=G%*AIy-GrKpn87CLHCqDa8Uj~aZsN&^+(QLFd{5 z95l}d@k6#Y4&$Kx9>GCt<}VyHCx7Fh`FA*I{X_?N);bXOn}dVq>L~o^1EKz7a8M1$ z9^m=vfR06)m;v9O5FM!g<8aV-J=Ji~`mB!Eus$_$P;Iqv(0+6AlFCx|MtH=4jM}X9P}Hl<8ja&HpD^evk?x;`41d)KRto{ zg72RY9cX-MaZo*-@oopg zdhU*c=BEb^8e>l!bS!$|5T1qbOKgn2anQQzgZH&hJ*HX zISzUzyaET+e1#|mgqpoXc&H-&Fye}q~#ffgRYs^|T3$1?{4r+fE2i5r;4yyBc z9JE$nz(F}*#6j2amvGQE`DGlmP8KmP@c9#>1J(Ho4!X|#69;{d^D6y8{fQ2Ayk5f> z+qO$^(6M_Hf7|A2DGr*ecW}@gzKes#xC{r?up9^76W_x@ecs1G`B&he_LcYtw(W;F zXkXL#zFl*!9jEWDZa+~ti?fN{|x`!+P}a-pLxH;LErQK zAM^HAXita^RR22Kp|lP6HKGI6upS2;uYVoL?FjyN`<;k|;E#Kn=&U{Z8vn-D-nTgD zy7wIpTIb*6pmp*C4%*j`IA|ENNtv(J~R}FB`xQ@q9usLZ=9?-Kl(Sg1@Zi0i(qoz1$&QHYi4~BJBfP?xp!$Irn zBpfv7C*z>~p2EJsKl3L<2dep09CS{dhJ&_kj)Uf^1r8d^={V@zJOgiO$F3C)s`Jc) zxwXOP$s^{&E$wqoFCZ3LdzzR5%^}fQdvq2K%F`ML?Y9kiz_%9=-Ps4jd#!WuwpMdH z9Q1D_o{NL7E$88VEKgq?G$)thp!2i{2lX$eHt_pOhz@j2FT+9W>T(=Z+Z8xy4PS|a z+ONVvbJ!0D9i#p@Xp94J(6jnL9JKA#IOrNX2nV%agO}KNOL5SChaAi;0^g^Ycm?=( zO;-|~wMRp7(D5CHgT`_l4r(8cgVx3f95h!W59XGD-&ZLy1HOMkbfDTs;dj^^j>kdm z6L8QN@5Dhl@4`W!4JYED=dMXO_`NC->s_*?#ZGr`YkDii7%3!$El-!a?WJbR0Cs z893-z&!isk{S%@CjcXR|pgM_ew&kCLgO2aRIOx241P9gdC=R-pJ%)pFK8}O>KY@d; zfpc-tw)61$HvbE7&~bl?dcf~DAv(~yeHwqp#M!Ci*?wQfLG!i<2OW!7@K^0TdX4;`>ju$*{%z{lanQN;1`euiF%FuaB{=AK zy-6PM<4TAQ)c-AfsmZA1s^|0(AS`1S%~A^6Ww zX`%z|cMbPG@W(w%bfB8o(hmN6`7F_a*7IjLDF5d;=zZW9_&bNfxZXX)JHSKXT1s@F zYw0rD!5`m*=s@@1J#UM*v;ODepxVyELFZxP4JcE>^Myax`d zxhH;=_34L$K9}{!LHC*gIB45}IB4Fk#zA8lgoE~V4Gy|*UWdD}s5#y%SdojY@IPz?{$AN(;*hz>MwkKmwjJ&J?I{umCLpT}`fpC@oo`&@E@ zu6slWYM+OL_WL9bn*aGYXnq#pplj(s1*J z8q2ddXzb77&sz;I;Gq03;-ETT!a?=CjDzNO5e^#fD>$hCKXK6dc@+m;PhP`8<9!{6 z@Z5;MVdv3e9MoqC4qC%+GKZk+C(*rS`+6G(^V3Vci^D0?8HH9W)}`RXRGi(tpA_P75HP9 z5FO|})gIb!JEHsv(SfdMw;##PfbI)K2deoF98|-29JEd*;GjD1WZS!rsGfxAK>a7; zpzrY~;h^@(IB46uaZvpk9CWTF_&wI=Ui=~3b~+BKZ3Yg?GZP2R`79i?-eyx9XdZ|T zRKuJjx#Phf(+NcPu z$NecB!sm4S=_6sCKZ8GK`JcyMu>LPH7SO$b=s^2@2?w1cFXNzjScHSt=PNkqzVlBU zG{#qP&^mt&2erSBgVy{TIB4xH#zB3S;Gj8q69?7v77luzc^e0<)ulM7|2sG+=esy) z-j?B@Ia!W_=IT8hv{v88S6B@zanN=9100n9L%iJbXK_%URXFIFe#Cr&);!U{=9Bq7 z;cD8!*PIX?DCfttgCAo;bf9`Z!9jI?ii7514fD4))LBV%;Q!s5=rbI&K0n7n^ZCV* z+`=!zwrOGp{Q60V?knrF4hLUgnER9Rt8K~#V@FGytz`K;6eZ&{Gq?b}=7keALmGddH83)B4l%UL*#^X;v1 zSdpcMHhBAj)YIvl=1~Xy0?X48hwne4Pbd6B>vItfANxFoIH-m+-lZV*#H#3&s4L#1 zAoY7X=hUbtUSu^Cp%_;V^>AZqoeSn!SDANB51CT#X)_J!)rAQ$0Zj}H4Dc&#zDucHV&=2@cnWg z-mqCX2OHsyn}zk?1PA4Bii7f>h=b1Ad>nMF3-IR6Qdf4NwibBHW?^l&!q2q+XW^jr z)*6R!?&Iy7g>$U~-qC9Ag!i}p1Mrd7e-sX?=X(5xX5oAsgHLIex~B`*kg530X5rkQ zg@dj|vvF9|g|$5gpKI;&@F%VRe0)K(a4tWEKW%-U!9nx35C>gn%J7%1|04WV>;D@5 zy7hkp2hIOt9KP9oxUTF8DG@ed9@dM|0bTQYc&Z$0Kx&9=b zsi$-5rmh^9-MH(V>i;v>gs2OBx}@fHLC_MXLEckADS{ykEE zc4IxK@l20YL3i>e_`)8kOSRj<@aU*~Sz^$PPJU4ma?WA9D=-l4VxcfGB)K6sySETX>D);H9U#xs5G zSl~(Da2)T!LC5i4yxiKectzhZSCzQ4ZKF%cb7>fRg1bv?K8x@otF0KnEQ~k09KYO- z`xW>Vwyv(kud;FVBWJ%bZwc=DS)cyY-#=B^J*Qce#xwm>IXze#30^)R^vMoLxm5#F zO?$95KEl@w2;*9duNx3*SdUi>u;Yk3`uOz_4a5i9TD=;-+UgvH53(Ar!LPCQYpLN{ zTerBo*7^*l&cU{B@yy^b4+-u{Y#vJS>qBkPXzmfC!&*HCKX!CDUdQ3pMu)krj@K9+ z>a2;^8Xe{#7f+22^AO{;tvwH~Gdk6`2hXB)@p_}f`l*jM7#-?79&boae-1XnPaPfB z!)bW)(W%?NkIsl%;HTTRXW%VIr$+ane=GdV(P4~d;jKr9^R5kkw$*tK-j=cWb=wYa zKRO)W4*2=D-wW`Lqr;l)gkLy1tlNw5!qMSar137J!@PCHdt04-@V?f5DPA->^_U-T zF@BllzZ}29YPb@=%EsOg?{9eq;B!ZZV>Azc()K$aUtoQn!V7N*bCte<^ZJHV(;s-= zF2(=0c85c_rj6m4j!7+enrHrF@MFiM-t57>`?xWw+VJ&)=+r!7KD?8Yb7}#xHTeE* zh=s6ee$*mOyw%!oBWB>I9yuo@#OZKu*C>Am@n!JaE+W1PzRzpK#o+raA-)a1&r;$t zYhO-W0lxoA;s@aSd`K(@UqhDYtUanm{ou!vN2~|FPko}tw>KbqeEac4kN>>Wkmxz> z`KVzdVsr4dwIF(Y4W|=Z!k;~I@>>x*f}g8SM33)tA+ZpApES|q+b<^eu=bwBiQwy* zM0DWmiK^rIb}S0;!ZE3(X^v4EcQ=M(6y1d1l&ag4&mhrQj@{T)vXf(d9A0f~s(nv> zhhH79F*dbn2kkX+P@h^jw9VmI=i(<=dt^j~7;k&md{MXJzWyPk3(Wg%79<&!q$LQI+BI z$o2Sy%JA%TC!VQH&GFAU2|l$lJQGgC=T(OBK8Y`?Ock%gRAU3zVFSkyCJn<6`xr?!+*4# zKjB+8r2h8Ls9W(Wt7kWU!0J4RSKpZWvnSW>8XKv3V|cFq2i{_1sO@yT!^ZGA<$S#7 z##F;z9HU-1=rh_Sc%O}7-umK28$)fy_*K^44+r({kApss55Pgst^;wQ3-H#PQg`>_GiDpS-KH@1bMf|@ zLY*D(LTgXsMV6-+zj9M*X)o5vRe1kR;T^&Nyu{i|@r<=6c=@Jq4rcL>H>LjN$NLGs zW>ff_yB1$(?d$OhYp=wsY}?)VpPRzE-GlE3KZgg1?zhk${SV(9#u9D8x7)eD1Fy2r z6ua?1?Hu2O?@ev*#pi`+AHLtt@dM1&f$({-053cc<|K`~1NQmlAai~&oFjR7{=w9t z)qDmiz*`>-pL5&bh1QUgav_V>Fe7q1<~9esNq-Y|*>UXs%=YJ|hMOPH&F;3q`!BbSh;F%GYJZ-VDrdjWo0 z6i@BT{i`_+SM`e;awUizsQq-jbrk!1C0Byj!CyynZ#o-qYkk_`=i0XX&#SI|6p!f_ zHHbRk@aZKvb))m~3#@-f9Ms+k2kq-Z9GcH(+lz4c(a%*O4(gM}Gf_OhuYdoEyC}YL zkpH}y6T72x!kip~SIY@CSI2AT#DDp*=i&8o;;VM@-nBm7FeiSeUsMn^!W-wr4SW0f z!JAt9i8$yUosUDer#XKMa^l0Ca^kal=QKD%bfBCU;w3q8_uhP_D8+}-?&tG5d}K~M zl>X5u{Dz!(eD9n_(HMMePW<%E9Mf_5tvPY;dd%}}`1qW7c5l81nSf8siThs>og7WV zGdc0v-u|;QUY-+g^LeuP>YVtfK3q>e#y`!8Px8J7htA&D;$K^zZ*Umu+rPzKPJFNT z=qUWC__;njpF~HqucKo<+a&nnqr=);f-gHd{-zJtmgRW)(eds+%v%=Ud30Q}FTM-k zZT)}8;S}Hg2M!l`{}YD+-uK{ei}$@a%<#SshnKwX$06(e01iKUKZwH~?}u>EIdT|3 zV)g%ZbesX7Ga))q&cA5~pEL39LjQ#5Aik8G(J^?nu=b+rti$SYi%S`M8ZW6Hck^C~ zXR60Ty(jp>>T$+<8SbjbPhHA!k7}@fYQ%5)_5!@HM*NlcG+tCA-tN5^FR2k%FTzXl zu{GjTy^q5)HR8_R6WrB^OT0%lX|EYiD)Q?Af3#-&jQ7Xzg*D@>?^A}mnpQ(C^4E%g z_3fp2rdDWA@bX&mA>W?G*VT#}7US#jidu0y@0GZ-{!uRV=f;=$_B39U8{g!;7%$0< zr+Y8O$L7Y1ypO}j=fYMxjQKCaU9Q!i zVh&SrKi{VSZ=H&7_1*?AOvQ7&r|~YS_;v4H@gAx8bMHOzqEx)udokWW6(4gsJ^(LC z#mz2fU#0lSRNT?GkHRylc!2i=U!00>_r3%#PsNX1PR&_-T`GRdx39-5Qt>+PmH6gV zyuV%r3x?IEShCbDCXyNW7>O?&^neMGd&8H;4;;&Ro29gHTT%-mpRF(+F?eARgiSG{Hgh&=iN6zWqcz zzd@M80{r9#aom+V`YCwx2Juqgrv=`+L8ze(-nK!Qhjw`T2JtVxPY1lCZQBXI(DGk| zgXXXh2Oak`-otYC#Cu!)eefd7Q;c8HAU>)e`LD$LTh0Oazy|T@zWr)^kj=w2c)5)w zi&t2lO5E9;M8`AUMqzFX8pWBhjWn)==rWDMaY^v<#-UHPG21o{a}qV7{w858X*|;; z%x8kTCSiV}rsQvG`SHT0HeS3((~zep4qAu3@ZL?s@#=#YH4Vq27|&Rq1V8n}kpHw3 z$)9ie^U0qda;EVf`Jw)vc)9h-;_Ix>dfZuiRKU9J85jFGEbB>oNqo)Cd}fSFIqyp2 z@%?yCE5%`9Kkh+8O5+Up_Jrs_?L+ZlrSZ~!T+^<@LG8owk)`pszI_yagY_AM!=8RQ zEu$N8Q2(3ovDQ8g2i0&h4$5;&XK|fh6I1QG|unO^UO2s3p93OITZKLIWD~(IwTgFmK%z&>yAv$Z1-p4`PuE4?fiB{qt z*w{bB%dI_&uP%+h=%3Rr`k1)|*Ppp1X1)kDCqxGt%a`~%8_Rke@(1L!ivERz=KO0M zG~RD;4>_Z6iJ*ObhyP%Ge#Alfe=3c~g5P!=F$2DTLUh(1{fv8j&R?h*e4jMYf%f}v z98}M*I4J*r@CxfwiG${U0}k4DBku9}H&MfXOXJ=Ha!yN#4s`5(qi-}s+ZGTVXxp42 zaUuA%lqP1t_fLq<+M}cJW32zNIQab0aX2VXH5^o1b@G63Plyh*R%_t(tWSOVfNxKT z4pe7@A#pkQZL>soy!CI0pJaVb#zFf%1qao0Dh{gQH1dG*5S_=*Pjki#zCBIMfNxKT z<<_3{ZJ<0Y=mVNhq64jm({b>5qBC$%{VmB4e%my0A^1LJ#ByuT5}mb2t>_Pa+ceRE z_IoA{8rNC)P-`DX|La0~n&?3NhvT4nM&KiD&PUbG1k&X8i{59+IIu5Gm z4cfr(w}4m(8Y9ttW%aD11}GoEnjtO(-=~b|*0a5?E%f=!gH;==8r zPZ_ZSd_9#!XYJ7r_65E@Ay(|Pc_up0xOU+OY+MI%(D{A{2i0&G2OX~?%-`Q(+bq#J z>k|#-8E#6_;tbiE}y&{{fWXj~4y zJxg>OZQD&a`1a_(Yzsb5npgt9y_A>%Ur$1Gd#(RI9JJs4_+OUuZydB=M^5nDritaC z8i)>5e>9A1<}kZv;x&ea`$A2;*0Atgk&CCSPmF`^9kp@L{O92}4-5CxTX0bOtvKkO zd)u(M9Q?LfqJxS7{F_m?aZsK`_y@M_ zhxjUM{|NuYYW|cO!1qsx4piqF9JH^sI4I|5^aqWR=s@kClkcn0zl`X9wDzCyUu@p~ zjaOLCN_?~R*@ADidbW`t{C*RntFk`3@jr*fZ3gC?9__*1uz27=uD8*3_;v9){djK{ z4d;G6JbWHM7OycpyhEso!yUeVEgbZ2Cl{|{?RD{b!^69p`go(^;r+}%aCp>jdjj6r zwrzqpwQWzt^M{9bL5Ij_M%-=2?0OvZ9&9vzgN=6#extSDgoEZ` zEDow+91c2OH{-VskNP@{;BwE+wUA4ROiDu zsD?-Ixi&xZ@TZ4|_cqVq3vEuyaL~S<#X)oR91d!K9tYL`0{)`a{}TR+t<`_xi|u$V z!9n%BiG%8S3twvO@8F>Md>3C~V_%7b-a~$Xms<^498|+998~8=_-d=?V|4UcyYdPIEg)vTXm zaJcGf-m@J$BF@10t9d_6bnq}99f!lKS98s&hQqg4v;M2&@VoaKIQVU&ns}`daXg4; z<6IoH-xLnoZ;XT9?bpUZ{qu0pe(T^3ZNH816Rf>44uymGyx#4G6kJ1X*D!D3 z$DR-!XpGm=4w_G*1N9#~BCZX7?0Lk7(D|C2rj3Zs+M^O2R6{8aK2J0R2OYm&OGX0Fe3i-nw%DCqJv|vb4sEaH zz0K43!V$6m?NC&PKRY5Gd@bkKb2vQc{dpYTxR#tR;4hB|-`N4SB!{ntw#PzylO<;XfWTU z?#7+eWUivoX|F-Z>GQrDl3-2wnxVtU9w~TJ*IplVGZ;5B_2=924J2+ls{a<<_3XooyS9C+GO^{xgjijSsaIG>>eEj%O z+XOr_-s;EQ_%PmR0>^Yh$X|w+PY5+<@ywlJ+vHB_yffsVgD<4rzZ);Z%kQ*#z@7Dp z?&4Z~SLl<6=ie3j6ySw-*?VI=W9QI`Le4Z^GAVp7P>N?J*|zw?N#Q$=GQ50J z_}(FlS4@g03}zlGac6m=$<#AB^eMm#C);|!izbKf7mD$c$ze`P@r<=6_~OaoyN@M! zx%J87ZgTiOBD$OWcZc;;fEV5!#-7GA)}G+ycUzsfvp!J<&xHL(3HSFTd@poX1? zZ`)45GuA)B@3TJl<5O(gsrYQGa}GY&`p?4`T6-D3&ib#%_gkL>xU+plQ#htm!r1fh zdQ-w!>f;Tk*gW9*Q$o!Jc=IV?9$Mh7t-TH2*0ybjx3`=f@IvdK#=BVmu6Pe??}-;# z|6+W+wNJn&TK`FS#`+}q6zek;pKEo_!=JPo=HunoCyTGPZ9m4>SpT*7I?KNvudqIq z_-5O73%=j_9KfCRiKgOH}X?~3~ z4zHLN?$MRFo5no*d(%U_Q+g<@=l|mFAzSCuIX9<=dt7zA#`O3lziw;dwWfz>gIv7z z^zbay28V13_s6sGwzh3M9Q3?;F5b!dTsS>$4gMLm4Y3gXGgX>c1pc|Dm{-r8x!biQicJw?vPx^E+aNwO10W!0&4}(OG+R5e|BmE5t$dr}1vn<3Z#3 z{;vD<`0VjvzvmD=XO!kNY)dS(_B1gAdd?&|YmX-2px+DKIX$io{`n-2=xo{cBs zpy!!M^Z`G{JmOgJzwa7HyxH1sA$okyTZzuvqscg2T*|Z4-8hUb<+&)sJcG~KhFA!G z+cdEVeEwqM72x|{=_C05_!rCi|4t$;{!C|hi=N|li zYkvTrJv}_f&cPqI_9t*CFXg#wE)Lpu9`o~L=$}U{2cJJntg!YO&zBUV^@CDB=X^d0qs&zVQe2S1hqVr%gE+Yk$(iup_vi@@hBCc5vf zo*&2qb%rv}#C*^^5L<))oZE(22!6b2Vi9Qmi6!9smlDTJfLTfK0 zmRoz4SOtFD-NdoKgl)$WGvN1?5NCs*&pE_};Oi_SE(SlYCBzDAuOvF~Iir6wx8S$U zBNqK?wGm6e=PxDR1-}18;$rammk`Urk1z~Og)Tz2B1d+{zD^xmV2`2j!nJYqihnhS{QtbIMP0(_oIViowg-A#1h zw~cn=p!a*fGcNFb#t|#P*I!9=)*k(VgSP#1dOT!LSSLe?4m6g%IOyHWJ{)fGYiU1z zz@9M<;-EZ-@V{-04hOYIGk6a!uX9P~Z!WjN@2)ywfKX6XCq=*k&!ZTOb&u=0qmpY`dFPq%tz;B&2g9=^b~eF|S_ z?Pd7$R?iFg%QM3FeT(qLmS+k6_Kf(Wp{%8)j0Jo>3DJT7-YR;Bc2GOfEwlFJ_zK(C zO1#|mmBm+E`^We?YhRCVxBc$GtE`^g_@CBi4-P5+z2sgTG(Y?B{nqCIe$d(v;h^Jq z7zcfScLaB~uV^Ok%x8w2N8v}$4D){se(cQ9|2Vwb%&@QOc%7MHoz%ta*|zm@P(2NB z(7YXwH=G&PUL*V;*5?GgvE^xkpJ;vZXT}-u>m(sofdB5elIVQ9|Ls8m-pul!gr7V! zjPVrw)R|$OoQ5~Iv9!QXw|$*K{+6MJgy_JprKlBtmgQ-UgXXFYes-uKI)`mRwGo|n zUr$>c^nH3e{9N1Dc{r%OJr3&M0SDzj9|s+y3-Gk{zZmag{k!5lEN4#~G|#;lE9_w% zW{D2eehCix-9m31bWZib``Yok6fd$q#W?8Pyo@n|uQMS!@BW;<90%2Z1rBPz5(m|P z6%HC#KfJ%yGXNiG+g^=>`V7KB+g^i%a$ZXfpc;q{G>3z6(6~x)P(7tMXpBSfVb5QG?r;N zDCa}?^H$FbjPd2LZ9;UQ+7{uUbLSNtwCz9fSFO)$Yzw|UAv*8=7`={z#_|Tf*tT7Q zgYv(LgXZcj{B1iHOYwKC&%5|Ct6@3*p4I$54%*iWe5H;31L^^vKOs8MG5QcMxBgjt zmF@Q<94dzL8FMxMv9*7Kud!{{;$K)jU*i8~eZIoiS-O^_;*(4_c&-Ce!zdR zdH6RDT6@3ZkQ&Ch{~sLGUV&Fy&JFk`tLMM?Z?+!(hi|t2TktBYZ8!4(Ixa*9s^NDW zG;e?4plkS_IB2f+;QMXA2XN4FKZt|!9HQ-TXfGfZdgr*Oi5Y88h|b!hBe=8t(JZcM zv%-Gc;AhVY*U5A6wzI<6+u`TV3Ty8?y#1_jkL!Sg>Ny_=jpYIyR9i`&{h;hom0l<=T;P-s2vTHVFzQAZRZr?6SWmJrP_+3sI90eTle>MU+?!H z@5lA*dR+H)zpv}Q?w?yWT-%Spcj$gcE_0QPlKz8~wqxhoI~u3zxYF<#?SCx3SI2lC z9;ag*kMGy^58w&9uZfs2V|fr0rvHa)ai;c}g=c7=Gx03#b2ffK=Wq@t z%skA+KJCYk=jl9TW5VPx9}^~r1(+~%n}Z3{PcB}lZ5Cl7#P94`iF|?-S6ADK<6QV*J^I>;6j~; zb$Gq@vjG=r`;GWr?Q;_@(ftPTHtlCS-l6NH6z|mbyD(wS-!e>?drCRpt^0Zp@6moL zFk!}6$y^c6*!`3?Vd|@JXqo&jSs3rtZTH~=+U6kspU&q;_>hkAFs{~oYVZ*q<566z z`5eP_+D|?HLHqv^pVIj}jepX9e#U3CpR>3@_uGhn(>{O4gjqA^Fkz1SdEBJ?x_~cg zeKU^Clj9zh$L}-enKkC8wA*9n{OW+CrQV9cZfzfnVYa;r6DEhN zaWAd!jr-`f*W$!Hxeg@Z>+|HAa|7;|C+oRC9-!?9;$+Ps1rO2v4#mUrTzw~TPq`fr z&y#E22z-a;FcOc_97f|*?I#W2t^MDF$7%g|JVA4q$ovrIoT9WJ!p=Q69TR4}8F;ex zGX+o8`e}H&=J^z!qy5jtKCSoT9Njh-FV;3oaGs7OAHS;meGMAKUr*v+q~&a{2kDwSx7tLVi}5 zgp*h3&nxk8tsj9?SIEyL)9^U0ACJ>l$j@yv@GPyLjeRTRXPthWw?gvC$8}m?kL?xm zGhFL+_WQd292O6MUD}Vpqh6ObqjCD{l0ydey{`S^(ChMZ+c36Y*Pq?LL7#8P7*nwC z4f(mJABWzMpLd6`{f6eS60g)bS;e`zO8QB_$*ZJI3Qk=mZPM`MRnpHC{KP7m+b8kV zRkE*Xm@xl8)O1Xk|5xrQ>{}&2PxoV6`?UVczTT8=Q{JS_o6^4@+pG2GwrlVjskh$3 zZ)yH-lk?m9b7vfSTjnZ^ZLPNo=)XYc8T$%kp8YsfpmT`r0?E?~Fy{f+gh_l8%fOQY zt`{fqE#*->HQ;*3@id$na2;@*g=Yj@XD3DUwr1j40ax6k)X&Dgfa@m5empPWddP7$ zUL0`EbG!uSY5RPi0 z&8-~o)tvX?0|D2=PWyxSP{6go@nL*K+aJZX0avk8e+(ZFxN01KjlT)F{&4&)uG4<% z@pqc%_n5f!aoU`~M6%^vY8lTbmJc}E2?2Y(b!1bup{yc69xE4CTfG=vE&DhrC zVy)#pdaY~g1*Y< zWZ+3_C7(y}7@?zJXV2{VM!l&FxLRTIXa9eoNcDjSDpA0A8#8zk>_4ejQ$~W7&YWY5v>s4m}p7 zc&FyD3zzAB%kgfV^Y`$cwQ?R+;7V;@g+n^$Vf?<1{R6yL``?H6Ynu=8fwi)>590sn zn)wJH(wqq6I6j@#h2g|3l~+u_JUSEl1A+`iDY!f^*2t=q=n zj)kt>PQ43vFLZtD__9J*YbT~eT-Am$k#MfJNtAZaLRW9u=|3}AiBQDlHH{&gZuJ4?F zw&IdPSGy;05O33dw&NYze<|LneeS|#g|0qM`*OTn>)*qBw0#8*X+L57zUKS^{#@tz z3tX%1kKr#1U1?6AU*T^G<+}PU{;tsVtW*Cz{z2RSh)?NQPUD|+Uq9nBI=5%>FFN*L zaYLc&O{bqm{G0CUcYIEd-Ff_n9*aM5Q=u#5w7-D=()|C%7j@p6af|lz54N=*YaMH8 zom_9*;I`}J`q>Ugu9NFh6pmge*RB}sUMJV;SnOFR_ts9h^E$bn$6>2eF=6h%UGcwkUzg%;>*TuH9bdLiuK$u{p> zpM1C?2CZkHz=ue(%HMG|%z)e$Dd%JVEoB zh#%BGAHwN6&l&h(?dK6ZN&9&eKc;i|IG(I|PQh90y+bsyi)sIg^Sj^Vy05R5trz;L0q=pb-hzxjzjBR_c;#Z1KR!|uGW5PaINm^7(S(K zPU8mMZzFEf{x4u#^S3r|4cQ>~oi;dfgKLhnuPE%+`dHj~gItH>uy=#p*Sg~P4RRkz zz=<2=ew2gud2Dz{0F75McHa@~Fduhf24;nf>l zKRfxX!37)S9udH6H<){_^$sS?J-rYU=6z=!UaxI7;4*Dfjzb$6GJvd&|$yGYK3SlqeD)!)fK4ttAa4R^(t6}j$r>MzIfTAzS>6v?@B1@5Wa zUWt2Y|GjY^?f+VwSS06867E+d>%Tw#kM?;Z9-!L}#Dlc`U`&|v^kz($^X?X$TqNga z3LdWYBXFvYHw}-|Hsf)+jwJ(6)*Pnb%p$oyWZ_ww!))x+9Q^p@B3TcwV8Xn+&BNJ6 za!lvr1x2#9b1-4nLoO~Xl6ANauP>7GaRV+Yl5=n)ez!=D=_X8=_rzjMn02@rZ_z%t z;u76g5bw|&N-<%c{dVGA+NKN><{7CR?=F((xA!n%^4xM|K+kUfU<&9$J3|?y38| z5)$pbXJ9KVG;!#>Z8sDk;--QYD4I~v4=9-*_$7ug! z@i=Wi9^bFyeE?6;{wLye9b*QbtaCU8Pu(bMcp4_mJWt1jd9Hg3&(Qp5;#s<{+4yb#d*3;^6{&h^J{pyj(r7QskyDf|JDBA#H)3@ zYjA(X7fTK6b^*IK+wS6r1 zZj$SKR~)}d)@K6lu}PkVuE0Gv$@Te4+)MlEjr(YuYjNTxxfdkie%eoeJV5s~5Z|Qr z|Azba$#c%_m@wD;;g~REAAv{een(-#+;>LfR2_R79;0(I z7LVH`&xhmj1np-cPSX4N=3IbtHpw@NT%4!#pO2Soo-6R{+UFa1l^%=#V#2J4H!)$J zX;)*ye5+Z5-_ka3<3i1I9WK)SZp4Jy_FYVvd-Ntun0YS7g!z`T8E?^iw&D_<{~+F> z+m_-o&A%M)(e@R%Qjc{N4ry*-ymym4bMC|Yb-y3t1KQ>wKBWB|#vkjk_ykw$F{;5w zbnHj*=bFP8xOS6VKab(#IuBptI?cZx6J|cY!-ScW?=fN4!wF27`8kPCX+Ed%Pn+cV z{AWy%ll#b4bCr7R$BeHauM0kHDjJ zzoYS;n%iACwOHmP4Uf@%jm7tB|M%f>n$LJVLFZ&5PS^Gsc#_V^qj++$T#KgQsl{?! zrs3(uavgXI6XsZCV!}LcXW<#T-yUF*5mjIuGTrJ!AEqij^fXCeSU%KbieiZgl>BhpVB^0<1;#zv$&yH z?yZgZH{JGkd`|m6kN?p2f8r(``vpvx^ZhSOnD>;w@kQ;Y8Mo*d|G~D-xwV;dcC$PW zx4~^U%X3{j9JyJ)uj1&<^1K~`-J9jvI2L<0>-SaMd9ysL$Kgw~z6ysCqUSsAq1#@8dv1|)`ASTfZzEUXK3n8{{92r-eJ0@n+I}ET-XhnN6g*^$T(5@W zQCsA?G#cNzMb^??I8}2@nr3P3MR}q_9rl5zP&$*r)oaa z@O16xDV(YKWZ|c`$TjU5JVV>h#4C0FSK-xLbTb7^*WXf zxJYx`hzav<{w^lWyZI(uto?7sTQr}oxJ3I5;vG6yrFf@~Wf$I~eOBPTdMx(g1KR!| zKBV=BakZ|88hk|O@F=d;eI3JJYHnZQDW)>pS1nY zm@vOfa|RRU8^~Gwi_Yh-xIx=AV#5492-=Fy%pVR!$<3Dtaf8r)>e*yosMb6W| z@kLz^&A3JT{|DQ;t+kc&Xsdijjl$lo^1Zh!j^8TZX%lebR{7?fgja5rZ_BH2!B+X^ z9Kc1|&qiFfRlXIM$M|H)7c?SL$CQP4~;%>Ta zcYK+)xf~Pb-7_8&<~u+FzFzBZ!2L?(8M{CJPlNO5~m8|M1P)|1Fp> zKkHA%gxOaLzO_W2y>G*Wd43y$hicBlFkznIZ^wlB`O$DpnBRFAfeF**4osNee;A2J zmB@K98sDw^y$6rcJjddD_1N8q3G;q24io0RV>~9zvA7=-X1@<$!nB!y2{W#V_(2`} zLpWXMGXp=O{ZGP#+4fOPnBNb13=?MkJdO#ougQ3d_WuMX%(hSBsk(lq;psXLPhrC3 zoQVmuKC|%CI`(Jq4DEj=epcH&hY2&5S(q^MIU7H(<9Y!TrvEvZFzx4J!sPrSeo6cE zVZw~dk4sAA91r5M5;-@^@tzX7CRE^1iCh!H_<*)Qh^tHFI#7d;X#G)KTO#N0Foc41bH))#-_@eHs8Qa>Y73AN+4$8S1 zfeEvQTVcZdo=olpdj8^3+I}=n z)v=`EyLH=p@ED!*u{d4ZXW++z@{IR5&J49=!<@=J!I2F=2kEVlyrY%5zr`Z`1y_ z;~koRDc-5u?!sj{#&Wz{`+pDb(fO&smD;`vhjd(Fd>|<2_(5D9l=H3z+gfjJ!`tNg zY;ET}+AiNcB5>R7vgX_2$nDZ53b)@b=Sv41y!%a$tnK5lSKD{R z-L}g)*d51jm-U%|dup32@l~3`)wtJoIj4H#e{Yv_^BUY|yR6%5abNB8I!u`RNFpZ8 z@5m+Le%s}|=#K|z{{!)$?efiVFizHdQt++X<~BTJyWCrcV#0j)7={URFSs2K-!9jg z5tuO7pF1#NuFoU!D4na(I92mW!(%k(v3Q)$+ju-d_caku(rq8bgc;Xkm~eha(Rv&| zq5V9Gr|L1ChNo|rYvWV6VTa`3xPvvYL!Q&DQm&t+GL}}jb*apG8{D>3?vL$oWT}iL z3P+d9JjdXU+TMlTrTV;tV@qYuJ(w`}piY=D*QL&wFyEi!a1ZVO3f#9;*4}kEQFBYe z$)$1~PQka9>UUH;O#8nb57%u+;5$lXJ&(krbibqVouzV2@4~6te;OvtedKOTm}7Sj z9#bl7dn|seRL+IRF=6g6lkt>Nx#m2933Km$5>M6oX?VKk^Asjb|CyLD?+96#F!%ST zF=5u*GkAvPITJryD(n9_OqlgB3lrx0GaEl&D)*Wf@EqOOTuhi})E6;f*6K^xr^nQf zU)FKGf(etuJWQDR$;N~^rt@)*=AVo6G>3e=x>TMG*5IO2xh`$QJ4)p_p%jO-K8(+m z%9=cnn@Z){bpc;2mEVnN#&)SZGgv!Ww>xDHTjAC_WggmK!i=#kCd_kDI~=)F@B6s@ zP8mxF9KBQ5Gw!%kj;RY1=2*BfVSbhoi#zMS;_xLqWvzC>Ufpk3+-;|<&+a&Wr>wUG z++(NA+ZC8Fx%I?X>AtSUy>`lR>5c!rQ`XWoxR3UKEhfyieKBEvhxs~uy|%vr_tSm# z#{)Enf%vAKavuF39<)=A?_hlMPI>mY1t)6`DR_v^)lfWKa~Of|(0Ln)Q+LX>A`Oqz ze#Ybbwao+gL7m%&@WVT0eLjL8)3H2`Cu^Ql@N~`XDV(`eu2EU|c|GngV8XnE&%r+3 zuOGj>Q_hiB@aLNI7r0ipJ%+#BDL)VT3Ln>ezQ%Rhz8;^@_9ro6uK7P;!koW9;!}F; zPUD|;$~En0{EO!BD{jy+He$lOm;Hv%X`kouA3Nne>rdRI^M3&oW*z>8FY11qaf{~s z4<^j}tc?jXC)O^`i(RtL+u*jlWX{{+$X$|W6mGvuuGJlI^e$PSF}UL{*{=(`cS+8% z*t1LKwiE8WOV&>uzGRoI$u8KtOV(sp{4d?trMTNJ$+J6--zDc-0`9R(=JN{NQ}ekJ z_t_L;OqlbcA12H@b$|RH?f*tRV3%AU2I4`xhx8vcvVsOVYd8cq;cbU99#Ny6n^8ONsy;|QDcPo>3ithNb zGWkw>IgZ!<6EI?NlStiH&O5CeV?&-bpzsuw~;TqhhOx~xi#ffF|UXz6TmB~9% ze>|W}-o*yuL7MYmd~=z+o7{qv%jA731>dUeZ^J{%#|#dFcf_M~}-~?9;LP@jT5Z8_(CVEWkNB zSGjnx&gT-mRC8X2^R#_FepQdlYk0Y?hZT6Gu9H>xzq+qC@oMd74Q^d7dA2EMO_s}C zMd9djndcbnE|)bBi#wOgdW*x}a#;giakp|=W8KSLzRSza&%*qaHer4zKOPh2XJiSu zXSuACD{-%Kne*PbPr0nIYjI+^tivSSPxsp&|EFBm`Hgr$xtu!#@gU7%FitL)HI{;h zl*@TE6c5w!-i}AwNAYBx zpD8#~$C!m@=zeG7S>=p7Zf?J&r5z zO3iH*UR^Hd_!?ZGV+`Oz9oITsq{n?DephqYgo`!j&A3GCgLsGLUy93gyybY0?zaM0 z>b|OQNRL+-@6|cnhYx7~2k{}z^DwT~`K-a8Yo1?V!u$-Y78COS?c(Fw|JS%q=dB)} z(KT=uH)w8+_?-509yjTHUceW1o|~~I2m}d?sp2Fx?A2;rs2%p^6fMW z&(ij@v2VA03-#li-SX~}i}Q3}`FN%Fxe6EPegk;D=D7hEY5yB>iEbOjW!ir^4(YaG zd_em=h^uw%HMmxDJBI6a%g>DJ@hQ#iG(Mx-p2ZEjaAbu%i$>x074q!Y0Y_KJGg1uhSRwBkF6^$5=b2dS zsgP&gPPlW0JnP2cODg19vv!I zgU3|JbKO{cuh!p($5qIC!FYVX=Klbmp!rP14{H7o;dI?L13z3L&(e?JNqVdw#gFN+ zejHEM{-@w4bX-s3sd_A?;psZJPvJ}*Zx()9b9e^N&|@?cKdbZq9G<1?WHx?YkLe3| zj`lwnzo|KYqDF-pyaZ^D5+7@~eFLx5`CNtntGT_2SL+zp;J0+_Z{q@O6ToY=%{zF#)^EV? zYWq#NSlevIB|85>yiMn1JKmvVDaA*$%~AZh9>*_mt&aT|{!)+2SNOQ*|26(b*WS0d zPV4LO3ElQ2{z1q7BR-|`a~l7oIsA;zX#Zz%lWuzfU(_)+;}*^HAKbB0t_iM6t`(JX zOylq+m2$px!Gt-cUQC#G|E~D5O1TzYj{9mq*WtuUxo#xk>nr8_x&aTWlxxdiJfu>t zdqZ)0rCjSW@MD#7O?Vtnu9R!e6g*w~c?xG%%6XcFpRSZ^;4^rJZaWjt(LU#5!sPrS z_EpMt!;fFCly}}&@H`!FHlDBfFTgpKa{bK3i!0??w*(VrPL^WATw9i5!n}9qVZzks z<5w%?8v7bvuJg76zpm}yz$Kb<5SQs#%JCk}vjSIYZdEv>IfOA`_Vqp{Ol}|G{hITK z_Whd}{Egm2zHxhL7m+I*LEn`TPQZQz_T&Z*iUGT#rv^ z`;+(wt^X1Kr0svkzvy^>#SOaOM*N%3`S19gwm*-XD&@X*0sp0I<8ORX`)|hoXnPwI zW*)36-gB#D?X|+Kt7P4_!I4$6{-bdFDp`9SaJ06G!5yn)4Y;toO8Sh&9&O(VU!whY z!QLuapI!04s$^|nin~?GdC?tTR;Bk`d_|S4&z_ht-_x$dS5?Wmb2aX(?XSa$RdO7Y z@b#L{4VWbABufddbkR&*5k4U6Xu)STbM9E z<9Hhv===omTFv1dT&Vk6hu2rhbz=j5S99Bhi#4~+c&pAy2`0?XR)Tn&&dGMXL-$*X z_h>&AxKeYd!XaG`VN94j-^YacR{R0ptH)v=KA<@t#78urqqtV{IflQ~e!jxTbzfiO zI-SFMOqg@+J4~2wmEYqNRdPQ%iBIW%PvbM1&sqGNj`4SVPS2O~_zzu6f8r*c&kOi3 z9pm5lqRvAzZqXe6!M3)sLR`~A@(vY+-644|i^blMyx(=j@gaHVO2EBB@;=xbCx+ym zF$oXQZ3p6H?K1_ZhUA?w4Uf})#^dymyennk$su{yn}Rb#^6r_1XX(CXV_!(#EB*N8 zkbGNs19StC>$M@znK+-JBH$F z-p9lt#~Ir9CKc!8W_8FKk|1Rsp_z~@M6834mAHS^oeFZPnHj6M}@>z@tv#%wX zczQhl_U2Mdm^RBWVRFvH`C9)feogaPj#p^?>*V~lwD(imgz2Y%dcw)yPiYgTK7dO! z=O8|-^}k@>UfHjIFV~#C^0%t-72=dit3=E~ZK_qjSh<^0XZ z{q(tC{{EvM=k0gh?9}Ju<@;TepW^Set=RACK{$UK?g~mLmeHmsr4vs5m6ZLozCY!t z*QI_m#a9%!G2fyQ~Vo!0bH`*^@Ed7aKGyu;m(Y> z;yk5yoAlF_(k7gGYx{mzHR1GML+ON5|0$&tPW@+;_6}`diuXvpRe|^JcU_;!zV4a0ifpW9fZ=rO;ncJ4ejMJLP$;|AW#Ar~Xe$ zC!8FbC@&CB4u4TP;k5ai(g~-{MN0SY(k7NNo^aYEQ1;aND=GUBPWx*q3$=b7WijEj z-%L5~ob)r^DG8_jM9K%X{vk>yoc8IISDlykS5rFSwC_ckr1jTRI^opcKsizCAEb1` z>E|KJnOgrWr4vs5bCj=Y{cDs?yqFo$YdK{=>(^2`;k18;vQ+DLQaa((@1k_V$)Sw0 zoN(rIH>DF!oA)T4aN6vlY$lvGEtF0;_5V=XT5tWa-!+$TwtbP(iFKS8FHz=beJ$dmf3EE~Neo*Tl!i4E39TWSUZ8I>@k$8b{vp>jPepPTVkZBv3n+J6`m zrqA~=Ve)5|YXxyg>%(~O zVb`V4P`?i!IPALB@j?7Qt^Wug()Ne(Cx=~Ap5d9T8WT=FRt-L)^+$2-Vb>C;pJVvc zVb>0){b}5A*j4M)H{zzlu74a~z_zxrKIR$wW7kzPXdi`peJtDd#)%(G`y`zFvFi?} zO$yG``Yb%_W9ff3&iPozn~Mvy&j2pbZG$+Z?Zde4W7l-2&w6a@eyvaNC;E3ht9j0> zcD*`-=iylFt#)mn5fN{7t#&07PJIfc-M!lNsZ)PhwaZ5|&fxErQ`+%bpMZN+yE@IJ zO>dm6eWp~qLd5mdhbe6$&1rKh9xnCP2%K8&%5>_}aHejXg^6WO{nOZ2?bUB8P1@%Le6iYft<$C%+qz$?2G{7n(fuj=`c(fN zY#jPj{$_L-+n>66kLCDUpW)B+Z&e?m{So=w$9`-d(ZAz-6n~-r4t6bTpjO&P;pkfV zce!J*t5*7SV`9k|`j4%3`MlEJPiYg$&fm7~ij!;g-w(&P*2=#(ejC11x4jFGtCf7l z;|I0PLwK_0Fa=MomE5LbpZ4j;1-0^TdIxYw>%(|&t<1?jTwN>w)^`m)QY-(y_fcG{ z^~Z2st;|C`K2aDU%55hnx&6QJH{w&0s87;*oIFtL2U0)Ko%Jm5 zVt#BVOTCqXQ>5Oy6%W_?5o|lcz0~PH1^Y(0cSbn-!nW31cTj(a_KA~6>Aps}?bK23 zJM*kgRvNYowa;~Uy?gryyw6%2aEaCj-TePD(oX_T3c9yH%YET`oE+3XacWTe#OYd} zfir{d+a@xuEbI%q@BPKhlvwm>r!hxCd~ZYj|r381DJTv$!7v4y1!5RiP+xezV|lX#jNdkyRNq# zc#p1u3S1%MwJJF-l~Nyz<12M-;6$xY!UHPh_zuL$m2%uu@NjK20;g8GpLo+*hj?72 zte^4N);3lZeqVF@0PmAF)_(k<)*rwJG|z+hpv()9#{Sj&J#|1~EO#qi@eGrF^xXs^o598`1vfmo)tJQ65X;Ulp zVQhaX*8%G*+I%JZ@?-le$;Ud*IdWXK&BrCjrF{^Gv_6chkIS|-xbC5Fm zwr*>Ejla=(`xe*9TC(c#8J&}}_!m9azv2dM--v(H`TQN*+TM!AvF2K2SsvT&>1lSZ zOV*Y68c&bs9QX0qWBN$_SUjhX=l16~ujk?dtqpe{5I^KgThIrP^=5Om%;*hopN~(_dLg<2PVco&+)nf6FJY5e@{$o zc%FH<5+@GxgrDc{PA1{xVKS~192zF`6UNnAUxRD4{un-^^=EOzFwY66|3++U8|!vF zT*oqk{t0LPQz+9%NdFnwH^S5E1?O1c&}ne&h1^azf0yM z1^e#u?3%+G@Z&{yNuP`H7OmfkLs}ok)pyC7sll~($ykozZ?(@lOqlbf9@}^6ep4}F zj!_!E$5T7UIlso>F`nP%@ZMpK#SdwHI=-mKu9@*R%YI{Ve6#10xy(rdPHdKSn}m~_ z<#?sw)Mn3Zb0hw3rQ!5u&(ygby9}J!?8%wSwIvJtnmwBx`*B{g!u%i>J=%vlH&zB4dxkm$Z1?FR^VG>}~Pf^pf*zkN?%;$#Ci~ z#oe@hcYIlkXVFWX%a`N$7Eh(qJ^}a8ey+e*wa9#4jeE7oob<;3*8H!*eRW*d;Y8gw z316@M-+=pR4*l_eTI5*Vh;M3?*&@gKE}Yt;#~R%w+ulsrcKdAe9 z2&ZeC4E%75C(1{jkKo62t{%rv=op{GQ(HW}e5{RWczTQH79VToDV*8jdBAZNep>6F z!82Ms&-pmlX5wdCJS%;Sd)t0ncgibo6uF=i(Q2 zUA=_&>OAkmU$QUfzWfzFW6N4PYkLw2=l+{SIlu{j#1#W6Q;GZi5%Fo1;|M2*@stI> z+U8yypll$VZ5t_@wEhC6O_;fAusz9yv(8f}(}~&ipFufU>!(m=63%|JD4lTHKTYX` z)BYJsTkEYx{G080liaM|@j2VG+t0k6w>^=B^E?nm=_Z`#gjmW{txu!O)B1c$TkEYq zY>yMpxf4O@#5e4>6=kH>M^U;7+aJ*@mU1|8^~(`gjG#;GIu zUXF;*pqxzXz*8tQiO+Br5IIoj=ceC>GtDVd{o%I@iP1`TW>pDHLm-jDgJ>IJI zCAdWU3F5L&<~`9W$Gbb3_fzY=PBt-i2=|BxZ12%+D{!cjd7rhy_<*)Qh!1r#?|{}} zT-(XKUt7oUm)ia-T-Rxk^L}mB;}cqc5})d1-X*Qm_>69Q7XQ-8yti7vVq0^tI^)jK z^PGFJ6~|n~JvEeTi{CEta*5zw70V3 zY@Q1=PsO@9rxT>tGktk3Df>=oSq$LzN=(lV$3|+ zKa2~qrT+jf$&Nd5mg5-2q3pObts}?{+uFvOPY(0r%r}!*96vuU^=-Z_B;a22<2t=% zU2gTpiP|O!C(oDuQ*i2h8E+aMGe2&VGxo7KZ-KPQUqC(!;<83^UIcInp2zhzh>4#w zc&^xnLkr@%KIG(v4=jj#B!zD&2XVFbQ-cZ9&!?EU_de$HGfe#K{4T)}Oqg#kM=@dg z`5Y5HQ>?Dm7r0LQtjDLc{xoi+Pv;xXZqKQLi(_!AQ* zhbBx+n8kcvz=Y}NFZ{Re_ae46A1f!$Zk-dieJIZ%ZE$2x+?PX{wmdW%xw_K+{sUH5>C}NX*hjhT>oh1Cj)0Lly#Ve>lVd*zn^1N zzleP;k~L;6jmdcF;s=sPuP1rT`8!fy{|@!<#Qi*vdxTYp%d~wt`z?=KHPm@$#J+OL-;eF` zxHoF~K56a7yW=jJ>)U(G!+SE`Ft*>5_SPQy*%LSJE56aCV0%y8tYJLMSrv@EB5vgE z%wYmfu83=&O?`^vN*PN^CHt+E_I@0yl>LUWT^U#5Y-?4~zDoPY=~a?*2KH6O?H$H5 zo*xrteqP4J_+gCq6-=1?=V8K}N78G>_v+ZK)iKlLlxW-S(?~%qmIh=dM66y(O&i#}&VdiQn^@KBCKPA6wD)Y9C zdSW?a^i$e|8E+o-ME&g%J^YmXK5AUVaOO6jdg9LE5tsQXZQ`nIo(Eo~p13_bqL-hN z-&u`IAUEqZ>WOp1BKrC%ZDM*h_uS>w6VCDSQ`*Fv*<7nvP)}^beoC7#{lAV0Gq-PG z!py@;Oqls!g$dK(*k%>2KF33Ghk#)LT*1(-0$I)DjtT-IX3 znSbjYOqlsE#DrP%>o8&Fe?2D5dfR{rvu=wp;mp6a5ff(q-^GM8|JEi?|jyFWmQ}<@znf??kSWZV$uAF!C|Mq zsw(co`4Qd}N+0pfeAWylzb7pBkubLP_*x;(*^nHU6zmJh@%7_^kj#Gohe9&XVQhzF zo~Jx&x)6P>O7BGr!TQXr!RS>Tf~i47}uS? zWbh>seXM$HpT1<+0`9riPnX#7KS}!pT-_vXYMN-@B-_?wTkEY0*w+57F1D|I7xO&n zZ{Ni(Xy0Y$eO7`Mz$NXw%wE8KHi$#*yS#Rm=ZY|{Yu}|{1jn}?$9ItS2_3rF$sM}9 zwSeCvO~L6Mq)i4c=pg+Eocd^KpApS|qjkTyKL(yFt7qG7|uGTg+ zxGuWOi|v`8dTeXG6+=ET(q{rrj*)&+aB7U~Hw~x9bm=t0d49kJ+CG5mywaxLOAcM7 zpI}$&yGjoAIQ~-Y|59@6CSweDBZqNPZ;kI_Cytl7O2X;myO`(U3|ye~0UR3Nr9%$+ zhjHEbE>lK0W5LM}%C;#Fvh9PqEiQOa`VZjHgVH{X>$FWhwsl+UA)KlCWHHZA%eeec zlm9cC|1-3CrpvbB94~7I^)s{{C(n@j6zrR!+u{PP4>)aRO8boc&=FLUB|>a(SvjBM)X z%eMac%+GwO595LyX&=a8j7z0W!cy8Vl{S7H()ut?UMB5Rma%4*Ne*c^eVJ^Vfo)s! zx4d?;<;`2fGfWCjwY;NqSgUC`-SR%3!}T@;XIkF>Tg=Z)v#?Lw_;H@)UGB8W#|4%* z>^OjlUmUN+M2|(Bckf{0(p;_sg_vlw%(}^1hl#XYt^?~aF)x>GH{g)A597VM-+lOi z=5`Pt(%cT?YR#brAJK6g#k@zR%(rf|j^X3l|JS%q^RLI>>9*hF6P7oa%eC<&{=xDd z&1H@Kh>7N0*2yVM^jOIK?lk^MbNCsb(cI4BUo7w43;DgQUvY!x--v(Hef^IA&^-Ud zO_sM}5kJqpfdA6^zwt%QzZth^{{LWGbF(76cIyc5qJVQ+-w*%fz-@P50H`R|V7BfQaza02cTA;;wkOblGaJ-R0* z%-XmT_tO4*<7C}$3Qmpi{*=ReP#R8;@U~vSw~h=+llRVLkp%$Mrovq5Yi1#9AkZA29LZ zB98Bm_>}f@8WUzte!|3`i&!T=W5TSHGng>v!dd)_*8hr$OBZvD8Zgm+G5c!7gqg$N z@VN+Y-F$vG;5=^9v0uO!b-&HHCBoZ#33K=lCN^gCPGMu>x%tlfNGq>R+`pLTx(G~| z^R5+c-Ad-X4UTN(owu0d8-?4qk~!~yqgzS-F_Arg7KAQivI9dBi!9!Yk4>@x<6c5+-Bk-tJavVqFRP8ejkI_8G z;&IHIbB!90Cup0AI9>bCz?rRNO=e+VE4lvoah~og9~WqD0bHWn263pBH*+a-7{=9F zUxOR8pGItJz15oI+gi@$R+wnFgm?MYm@sqI2Dfd^nqjWm;mFo9#wbjfv9!m8IbIzw zVb*puCQO?cOiXb4?}!PrHe8r6YtoGgv)@=8uk{HyQS(f~$*tu&kb;M__THPzGuu#1 zn0v=COqgrJ?U;Dc$$vN|f=jrMjKIW?OZa*89hflJlaZJ(*SAra=(Ln`c{EOKE$cQ7 zk7@0_Z7E|Ji^u7ljK}x4mUaFBp3vHxox|_^OvLHhCIdgBb214NX3al}AJaY`$5S+) zCou8D625gji3xM=OvQw$pN2DazggI)$I*}H>0D*w9L*sY6XsYi#Dp39BAlnkC?6N- z{0DGJYdP0~xK7*Do!o~BbB`N`iASCJACD)r@pfA5%rhp;SRTZLS(6Xp^fq!# zGjOKXXJMb_>Bj|aWPJv3NgKJZ1#w7o2;*wavj*3-k+oWn-EC!zv27V+TNz6dPHyX6 zu$22t3Qlb+_nvu4cc^ z^H>eG+sbjV+A$C9WDUgP)OND3G@RZ}?iU%jq@5h!AP%*Yc?;wH?c~^fhzWCFJAe;{xq7fJ-9f{0-tzq+AoixH{6ibs^WK z8r-058gWykH+LCxdjbCyDaZY9OqlEBMNF7`Wiuws@oK?@+`F-@?X4)r7$xmvaeS1F zD*-1)d3P@3cqQTFDA{icPK}c5a~e*Ml69VeGoxgkWMN;F?AMPAblU(fiIRB;;!u=4 z$A)p8wyDPrQSxlxi0vqO7P8utXM35GSRCJ8uGI-RvAwLHB%It{jztPi)i!B3y}j%= z1826EwUmW@?d7@4kMr8g{N&?;_OgBgxTL+T^B@kjmobKMb$eaIxURii=j(Apds!!q z*w%Wh1NnE5^%;xfJ4inXII)9ln}m})$o)43r*@EMsx+M5LFPOI`#R{eD9-C3*Wr9z z&_Tu+z$G2zJtBxh9pqSqadih-V>P(0gRJv<+(3KhzSf9|&z9leFk#l!@AzB?dEPsZ zn>u)BEa19*0Tbpr`4=X_^SQSCjW2eP`E167xi7b1!rWW`!FC64R36WwRy1=GEypnd zCq_&DNjN!L<~aqYMtl3_@%*2L)1$p(^SFj*;LK=Qw^=w(+vno~?I(asblV^f>9%3K zH(K)FhYv){93I4nblb!DW3B%L6XyJ?#)P@2)Zio0a@>z%;uYuT9iL;uwD|%PO%r$@ zti^rxSz*On%f0@Fi-=W*@21}DaN4>`v@38%(*8}qn6r{VM%Syvf2Ge+LsvapZ#&NH(g=V_aKygWwM z_6q!ZjI4n-@ah=3r?0_p#mKedZCs$a1#n2)gmHC@tg9Ma7b9!09yi2zd*<_=)rjpF zxvyCrnUjt(53xADqulosaAHR}MoBoiqvW50Q#e@a>sto)b(DSiah}%a9Y!}D2VHTa0OKZ+m=x%yZ+{xUQod zqk7!XQRc7_yInGtSeMuC=kiX@XN~p816(o>1Mwi2^fMSIyW~2Sf>T{`ywdR9y6ru9 zj7xGGi|=*GoZN>AvzEqT!W`@I_Q53x=YT%44mnbwU>o`E^l-$@7jJ$ zm}}R|m@s31153|9IO)MG{<{c^q6J}o>F=5uT3lpZ^jS2HS7K`KQ(-}(wCd~6g4@{VQ#1*)wTfRqK zi3#&Ad=)0lSgyu|xhC|&g!z8e8x!Wb_is#?@m_-y-QJ`;j$IN?*72s`RP84Xr@Q5N zW#9t0+(QGn#4YDw5EG}I^I{v`?)Kj1TsL-L!hEkN#bs`}r?xY8}x@G2Z~ z%QImZzprgRzy3Ps_FZwWSa1JVBmQIc#(lK@TAUc`ed5)KfmRY8q-_S{ zWNnjzhs1i$C6- z-S131OZPh)&(VF࿬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ξXNGjL&1n7fAgXAxXt$CkpimS!DXZ~o)3vvh(*T;D}{t`xZCqHy;t-cLRU zPG1ymTgz`1GvI{9MDUA?!i(3EhnL{>=HCEsT%`Hm1Sid32BRO>Qm*%4^z<6id>=+1 zuED)?9xABUa!gT?GqEY`Yh z4W};Fe5S$ai^Fg>`(+t$=3>33aX8!Jhr@R)*7N4U=-hRzKjgy`Ev5jTx>&E*G&r$1 zeEtRMGlEMNhp`u^=Tdm1#czU>i?#mC;0p6s!nKRT;V%STgF3k0{KsLpSg%X4gm$td zym@U91}Sjr5^Jk)-V$q*aAJv;H-g;~J9a7lrP_}oc-~SSH|E2IOZ9h@Mey>a`d)4^ zT(VT}Q>F0Qr8*Z{2d`fmezS@_%?#h{ z*9sl~v*7F%VV74JbB4n?D|GIW3+JuSIblAWSfS^Q;5jQa&ABkr`z-wMity5Ncqj7_ z7%lvn^3H?3-le_G$0B*=dK5j3hn_91~L*eX|;f`myF2muxmHKR+ z5073M&hziUjDg2n9wxwduGBsKyWoj-YyrI1V%EVg+OaRe>+QT7;MXnY4H&(9g5T@C z32$5(4xi1vX%qbR$}swowy_yTGC$t}Be~aag_A4wUS9@RtkiZ=34dYd{Sw}7=h_2T zt<<(x4Ws*K^SibK@OPHCgYe;%dQEHKpY7OR;9u<;{RX4@r+E*#9!Apdj>9J`z5#ZY zPOvI;=*Tl%(?;;=t8`7H3EXUzUau55b(PM+(%??3^!j#&yQ~VY{(*VsMR58m9iuYf z9;OobmA-#o4p*$w=fq05YL)&*vKl^Y=c<8gSLxiWZdLeE{i^W(mx8w2u@1>M zMvlX7m5%?xYRbMk?Di_}XQsjZSBH`m@>L*eYz`mKZEaL#J|zCkXW zSgqeKh~PP^!_!`)EzO0Ouhwrn6vHK}^_vf+@D@9EE4)3xT2@}Y#g+^G1Zt{Dn&F~{xZ^t?$>!m3$l6CCn#I&+w zu@1?)dTabh_FJ(I$(nf^{HXIX*2A$5iN7s=4#~OBD+#NRkEzDiB7bZh)|o$O z2P27ZPdZ5U=CBU=HT>Xw{7BOGoMw5(IwX0%0DlK7FV>-^#mr|q;zzCho-fvgcCHwH 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

    lE3+HTJbin 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⪚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%0Abp0&0U+%MlEbW?NoIi@SD4HO**1sF1$jNnBlAI@ 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 z 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

    RgP66-uolA$gi*9dfDD~9G*;_mq6Lw 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Ξ_9zG3nE6iH2=@J#*P z&umAXhNW#W5`!iWX+ccFYVw4wvXoUJ03HqCY`}va*i;s-@a{sgR}b`atEb~nk}%nC z-H?lVTu{*SU0QI^^9gDBpVJLyj~MJ<{<|NU!M}Br#Sj8F(hSiOUWFMyvGCc>#$1o+ za{J?g@o>8_wyppE0q);c!-Dho{1Qd6o%)UjMuF`i>gY5_vHaPLsN;Ni7H1@gQlLJP=8B-pJz1 z6N9W>0M*6L5Izch{qbHS3p|xQ75S^<8)!~Di-ichk4M~Aq|gr4l;r)C&D{AZTXoBF ze<|ms+5jI+J2o(coNshm*HW2C))$SEoxJ`%MJC`ih3DKkNR%-qb=LV zP&F$mlYI3kV}RM2wGXX|MIU}P7&D%P;-Mt0G(Dj$Psjd^c}`%n6BE?Ok+kdh0@r`+ zIvqAEBc;0}^wb=n@h!6sYX59gfR6~o=(bH}W!xKe||uPcH@s%q(i-#?3ot1Bao z?|{C=Hh09&5pXJo{Mhv@(m&#>%QCT(-T`v z!XtRZ-zS=hsBPg|e=jrym^=P*9g&*-3J!TW zrIg`Z0-MrJV$3{0g6bGP_%ii&f!%fTIBA(Zzk8Jg49cTydyJG4t&_MUXR~FEKphG( z6Hx}~M+r087WwBG@kSAI{JFXeE1b_Z^ON(rR->H-QW4*j@KU6F`&R6(A^=0gMWb^yU4nvd>K_6U*jq^vki$jj zDO3a)$&N{Fw(W@oX!;Lv>T3+NQM^Hk<^cy=;f1azgVq&EkA ze}nZo%PxB{rc&l8+g#ZUefPJkU_q`zq_rc^53Q7iwq{kA{u{bMTY?ImcG}Bv8#zkM zqqUZ!3F7yfB;w4G#GOVoe#hGY59^oP8{fY0)WlQ8IGJNjYi8Ln1wp~O(s(2NZZ0Hu z(_fd#8~px~e%;G6%)IU{!Nb53DX@PM3hS<%>4q}%clZdwR0#EtV7UGlk8Q(VjEEYLGc5niI(*L58A>IP-P#5ah*Zx(l)1N7B0wUVJZ(rb|X8LukAiEJ~8 z-CPJgkPIU{AN*Bgq$;!xYq}o4voj4j!Co9`(4>X@8BzNj>ez9kVeI&3w`n)j;-x7d z9_`T=q=14P%j#Ce`hNEuzQwm^APm_>C;}B*58kLw23S14j*H>-vV9NIhX&5 z&hJ&7dH&SUmXes<3x8Ri^?)d{B`bg5mKTM2X!aHXHnl{)LQ2; zXL@57Nzvt@N*%GXzH^c&4hZ#cH={W=?^n+BaW4Im(C7)LNw|# z3l-d($8u-@*PrL4Zq=mg(YYWdfL(<>dmU{<-#r)cfQ5|v^%ZJ1ad>T)Vr*o#xrCvq zIqf-3$Qe8o@zXm~++uwWNec@&4Ls<{lSK3k+a@7~V13O55fEFo05R;K#_{4d{J3=P zl3cS4agWJ)ZcASxz$7l5~19~%{ETgETQykO^;E(%f(^A*NZ&1wWTG(dAmndt2}drjo{trQdriEc z9=ROu=gA)DK@q;lJH60(|91;Qp6!bxvn+kkoG@oVuWhsDktA1Ls@5-=XX(F%@5uO* z?Y|JI2TU#f6p4+BP%Cy%P<|Jhlc}1;k?q2*ncR;ezGFejkSe)~^QKj0Q?>dy$yOMR zPveCW_{O`YO*kC<{#I|h!5^F4jC9n> z{A5geBYQ7LL*l>^>*QLM>d2(hgd>e7LZmjY96rU=h07PlEW%uC1+69UsbZ}alwT5a z-9~sFlDpL9TN|}Uq_%6q8$G9;R@w8=v$u$dQl57L>PFuGtcND-pYe>@QzW|wju(FZFuJFrM_s#u#}O#AU}<$eZ4Wu$#W^mao$}6tMRTSntf)4^n=Iwt zBxnTc8h?E9%#+56NuY*>x{l-EXF;EB1Z>M~j#rYSA|9d74}VOEdG=Jo)C@lWe2`D0 z7%SrpQB$0FOqMq#4fp0* zT}oK(2ZF{ai(~xbWFJiq#72<3#)LnOrHh>PX$wiF0DXs4i0_6(QAptJQxY6Hg*HT# zibB;>8f0b22lvOQQSp@KHSZuFM^Lcp%Jxw>+Pj9DNq8f*@YvvP>^8&ax~&9yfJfAC z50%zY5_@x7Y)%>9ldnp--&b}z*Z&Zn&i_&w#ebC(vpdUg{iTLYy5i2Tt|CZWh#bC? z`y)~Yqe2%)?)tDvc3@b@)}#I?<@z58tXciCrg$EbQt1Et2}E+5LMydb{|_wf$NRdD zbsM^aW6hb`+T-537~PUjsA}4;A6XXj4x;Lr;0b8|=TV9qIL6$>Ql-1|bGKGg$_b^& zU>;lj)Oe?Ggk*lXBmGJQ);W;9`(hsyth z1K7~SibN^~CXTRlQpd5`R_jXzunCL;-1&AhbU{u#+A8J$V>Tqj*L5B>Eb=8i+9n`* z?zH2heGiA9eQN}L;*W*$Bc4h%;}o%N@qcVes{{MJADrLhXB%s(ZgG@5>B`434$6$wgCC) zNi=c~j5q@S`Yt>H8Z*qZvKtH9%<&)rd|UcX8*clxhFOzq2|mEId7+ zj=mp%1mk3#w`;G!5faM?kmlKSI0qJYj~5R8LaMxLve$Ir6X@n>HlxI6@OrS54@_gHX&sa`_Wd_ z+gX~>&D~Y1#)H`I?hJ@j)v-^JniK17=;e8R={8FyW%yrwz&;7nLU1$p@FouV?H~qn zUCr&Q?u93<1Q=$Er$v`yDZc#&ep98z{zKzhZgwInfk_5v!E!SzTuLGhd0d~sgJa&y z+~G)jJm4R2geSlgn{S*O7@ZyXUO9P>M9%KrKG9wt%?ClwNE9EU-ecn(V~k<2ya(9yVe%W^-MbTAH2SsPzlPLg#nVcN|* zPb~RHW&wVQpZH$<6KHus6GVj6V-PUg>6rC+2GkIR!+MBEH*;_Ip8&CQL>LR2h{m(o z+D8}4B2LnrL1z;=&)4>bsex0A@%(>o^QDeu&x!JU6gqsM_HK<{dfdbiDH^+O`n&wK zY~kg9tNj6b&}Md^jIX-U8BZ;lr;An;dig*DQf?OD1KL&4KNrK~|G@B5W3L-;1CN#Q z#Hs-wHRVI3M}wxIQaqrG+TgRuKgX#cfmjK#E^Cig$#cT9_~@8@$#d!+5>pRM2OMA; zQAJ|-{|i+ArB>zN`7s;1g9CZO5!4WLh`Su<3z8wHDJIfCFM&lEZ2GXMI2T2%1djP2}oNTxZv$&mFS?kRh(_iYZ^j)N&fj(8t7yXjOKV|3{5~NSjAv-RA0tg>0QA_SgzEaB6z$2&4WcK%x<)5Pp2tr}R+M(tfDr5SvnwJV% z9ErDhnw6A*c);Mp4Sckf2?&@tOy-LXD5w0WC1ty@Pid#@?qQku5d`G5UNRYY=dPCyTLsbRToqwYkm ztIi)`-rlc+@!}u{d#l>o@5-y+^FcN55A1FH$MQc6g#^KSCXCcZ*I-95x4^{+kn*ZV zU*X5_WtJE|j;WXWxu6BnKs2M@-l7t~jIJq;gY^GVEb5o_i(AxWjBp2LYj>4f33Qnm!Ff>3o+1YxjfL~tqR?F?7*9}s@3_N z1A7O)P0K|SMtea(L;h(|Zd;pkm<)RAltM3xd#;M(@QjYzGjVB1l}x=2$)58Vf8EFe zFS-qOfOqSW@(pu{V?}^QWoV!72uMQoP>Z}EW|3igNoZChRDXs=k%q%zVlPoI+O_@b zP6_@XhTQ_4`iGbF)bi}W(;lmIUsugDgQah%bEOK6H$o1Pi`8$t2rGpB5`tJlvwnHS z6K3S28)BtqC1JX1h(W~yB`02v=0|DoD>!@^VY&)=`RQ;eg!bF=*kVI_nm^88d9&vj zm2)S!us>kB+0j4z1B-Knoe*bDg&q4mm02%LfJ+elvp6d%I^V9|uSOtyF0)K$ zk`u0q1tU$3sJISyxP2M*PR3)d*Z_uEP6*+4om?IyTF!Yp-f9RKcH7KGJp#tVf4;a_ zC#dySZInYc75bQaUQR|=bf+d))<66oG;^HBUaIBW-BiP?Ffk^ALDzwC4rg-MXIgCD zN#Y={H$TH-ob3f^Lnmsy-~lzy|MHZ)8!)Ae?UN1b5PgwNZ_lFcQI?g5M$c?Jsh>WX zq-(^$RYQZDDs@VRgo<7W*kw;d@uA`F$gr3Qw$sb{=s^_7AxrJyE5xN6^+%Hp@$b-$WD2ushu zLbWhR{j-7k'yT(}gSp!DsgEZa*61w#pGMkESU3Eu3;cps_20f|M^1@<<>hW^# zM)YrI&yCVsl!QVV)xd7!_`Uaob660HJ4w9T{Gy=M`_=Pyep`Qik<=4yW+#Ry(LbW? zzOOhRy+paSEvN~W5@}Q0=XcUi{p+N)ZZ{>&pUy*5@iw{DCZe7}AEb&B&=h1BEmS6! z>oQ!d6ENT_Gk0#u$H48RS_&jn4XMCnV!dC@Wqy>Oya{*kg4hW16`F~zGnizH49O!a zwbLmUE6ZSSJ7TGy;a^Rp^N@`Vx$X zm!^t-r{kT#|Iq?mII(!^BM*HZmW=R4g=mg6y>D(OU9FLgc{-~u1D`(~k8K)!j>O`r zz`3QIM5F#utB=ly#kRrs{)}2t0qM;g2i~!xL35aVl=Rc>|h@=oU4K1R=C*omw1-%B!^$3Z<*TNBlA2Mf==w@Cz)udH~<2Kjas z5u(GL6c&$6(;}qDPxfiSL@m2r*-KT;BgJ}W&Ph>#HCe%RMV+CN7ti{O{1qzIBJOoq=FS-}2{C`*e2W$>%u+pDnUSUKVU=Hio>hTwg+qHOioDyb z8+hN(FBo-F&!jlB;VYxcZ91Q()hjaSWR+RAZm5EaEE#q*s?z{RYjN<_vxG(PQJ6I{{Tj9-#&`6VTAgKA!Z3tE%QX)P+!89lu2|(m`d^zfNJeG52S0r@p*; z=bKGe`pz|oxAA-`#i|BlJLiV!O-%>^qYF*6qHLWsHvKc& z$&St~duyDJBq8Or{4OQ*uUf55It{m&MhYn&OH=g^E=AqWg;OOi^CrLeW1uIg+eiWX zEP>6B)9wkNmv{VT_Sek7Z71*sl}%KtNKUTdqA|X9mCiy4pSxo;k=*gN+&I2fj_reu zR7=%CJZ4=DA%T_1p0lp}i3R7L_-7XhQwc*5Jf*#CdBMF7q0#iiH!m_4_8V)(1SNtR63drPQ*m^0 zNUT0`*k#Y;)*;Q5Cgh`PtEYvBz`p^zRQs>2e=VXili}ATz#i`$X_rVsDMFh0RlUdG z1{Z4;A#~g-*cq(w(1U%LIDu2f@-3yiW`Y&AM&bUowfAPzr+BvlCxLUMSNCZcONFI- zIKSBlTVK7Be#u6BsbV|R!q3Zbp!_w$JNnL`=Ic(zWUdj=%hM1u0gWyLma8fd=dg2 zOEip~UKK<~JYmy$RNg^pn?3Poj-_1XhJAel2BTn$zm~JRwxO9JJ#>6Hdp~ElXOzt1 z@y6$^xcvl>rm5!{kSA1Kqq7aQB4lXLOmmjVN34?zsK(ulMcFL$v_8O7Sx=){`Rbq2 zcBWa|6-J=ie*Dd^)6{;59CZDCAm_w^ZKQH2I2PCnXglG++HrztV!yvAba#Y{Gtc$o zp`v<*F>Kc#?qCh!0+)!S!V1d;W5~w@?kW`KRf`5XG0-^FV~!srINpBN%`$Y5=p(zgZ;yyE!7zwN(iKG$CbPTF;z}0WD?}QDj&vr#iMUS>GpvPNWRAjpsCQ>a$_0-~ey#Ozr zEIdYDh?DLKOA)|)$>@G^spiGNbblyU6EaX08GN)Vp%*W)dZ4H;(TU5(q<=CbhDo=U-Ut6ZjIwN79d9W&jt^!fG0VLLxBDeszn!ogq=ewXfl1)K)OdAwQx(}YD!7GK9t!uZD zs(G^5qlWIz`KDN&(0Tptq9r>c53^L-PZV`aZRQ>mp47Hd2Vf;fLG>*POzyUo*i>F6i~P_nV3^_3w5imm*{)7#B!TMi3t^gjuoRDHD3#c5F%^7PLK*lPdVYie4a zrF-@ujp&LU+a+Adjs^FaEvI$yr`&kyby8yMEQ#b+Ps-As>K(Nem87xh>!1VS$elXz z%H>j+-7^_K{PGV#guPV4o1k{#cR^?5aVLGMjz1DrAjvE$2EbQ0Czct$9dfiVt842% zo%;9T5IbI|m%5%rSpi=a|9cHycM^8fW8`WRre{~wWCF%;utCi*X<&=LD4TAB8G5A0_Dhi>f~qtFV+6vS6#Qt-JklE>}p@Gxv7kT>4^TwHs{Z z#hP(l&vwY^ukC`0A6IMyuBH`ea?g@>&{GjldbzjjJqS6kcSPohLCxvaHK^?! zyHLxm-F|dJP}4$$m|ACsxtx;bv|}A})64@J?U)p_FX9iYJOcXy z1N+8&e>TOVis8f{5$?!H%*jtaDBycS{ApoRzu)^gXlGPjLWS0=!dZ8}Y7Y*Uq@ zgX(K)@Cm#`-%7}2Xp8PY5%SoUN)W#m`FAT+*~H6B{9nntS?Xi_GJABYcs*BRU?t_z zI2-$YmkHnE^v89ra_*blUL#GrUO^T_8I48nfXz zNi^&Zv8$)4XQ$(L-$eR6fDEWx_J_q{aJ-;N z&OF&d5^7%ebW%+lvzQS6JuTDcQ5l9aJ{eVaB^_Vz-m;)+Q!qWR8JSCZ{&E?uU>^8M zr#aB8(ieZ(`m8v5di&cr z4O8gX^V=p%21!b}K_>9d#5;lQ9@3aJn#a60q9O{x`*orj;Lfy1HaC66Hc6whtfyj* zodW4UamjJ=+yP%;KMj6_+sr=xdAjn~;m4jy^rpu06W_f+)zRLw!R)m>;^6K{6MVFh>Epo2uZz zck4F+pg{Ibjpu>4?>wEwlYqn=qKV9diQA9eV>Cps8QV( zLl=&KNkIp5csw>@kKdHLz3&!srKvlqJ391U8|+)IWnpn*pjw)U6|k|#c!ZqYDOHa( zNy6|h0?)JWmE01ZjNql4;1}SfcZ{m~60+x_-Kaq7C@fOr6FU$AMkpev~Z*5&|2BH$)d}nb0p63tQD;q_baI zoL>FnN_)7T)BS|tX}s0S@D96$Tx%p#(uBvCMfR44d$xY<=}dmhZ71;KPIvYbmxPCK zRzdjj!8i7yMw+2J&P}fgkN@nb+ol9|<~7Sb5EYSD#BmHujf+xX&}fFU8S1HU6N|;u z)MZuhgKK8IBx}#4d`>%Oj=iG4YK6zDSPj7nMfCnEt){e{9(r$Nli`d$;CLYHj!`>6 zt_Q?>~PO9O(y{=GH&M4a3^-LXY2@=vYcd(@&)&-|fF+u+gG)|$ZBd6F!h zI5b0Oi(B-mWwXpuA-7VXjI#{<>#ycrZh^NB ze8Aej`7v^8eXOlvfC&pfdXGna=;r}`T|KCemwTI6hU8*iK({HJ+oCPXBlJm_Vl zxX7k7$WG$qo?1jH!~u{knu0h=6iJWlpv{p985f~&Ftt)KORH~KPC2}@#AI+dF)8Za zSAS3W+&79?RP6ITg%vJaOT|JsE&SJ%`ckh@G>$pdm6lbAR(kD_orKn)dC2Vkr)19q z3*^-ksdDRQe}Da*PC@GesP;kPg{15&ydToNTpb zv{}PG&~rrsFeYak+k?hQ0D$s$EZYw?#&InA>0S#t{UNB{CPPkT4T=i!u4^V5kaA+* zd>qq~0i8hU^F-LedM*F4O>g?d_Fn3{=e^409puDg@6x)1{&0KrLn${9RrmaMy%M%e znTAr{u=svHkt-E9Tv`~4BDD~>;5--6TM|0dZywV6a(#D^BelCsFQ-<7!aBQOeefZb zI-b@c3LB`A&2XsJU2iH(Be7c38<6mqc+gcXa{0t}(6!(!Yvoi$3pw|Sb=GX15@4JD zSSyGin%B-u^aa35p4o&6AOQ!9+|w@bB|(;bqWU}GZWN-2OY(bf5*TpbBIBROsjp}j zDc$kjZ}!lWnulGds{sj~f>arMYA4gTx5P4AU&JT{dOPpG!iJI1^#&7MeM@!x`d)9o za`e*K;anQ<6ITNb6c}LAkO1sN!-uZU%xzQ2a00D9N zbf2~B_@nnrzYo|w6GzuVk(Rnj76HueU#p)@OCiDT7JTKl3iB2+d)oaCF&+ljb2YV) z$VY&Z8qmzsP2R~mzV^{(+vRm%NBZwnLCL+*iPBB(PXn8j>)s+Gr)$0mO%l;wzINAs z&ia2hHZ}M-@8l?cr7iwp%Ol&B>CcaCRLO$NL#qV)&u6a<-Nw|1W-gPr+Z&2pp z!4D^)W4vVZ>wJ>lD4JWg<0VGBH7#cvn=KcC8FJ67o5yQhEkHYI?MBU9pvP_xcVCg# z8-MHG{*2qpU&!UZPT-zDERc}iRF<>-`)g$M-9x`y(zP3Bf9(=Z%!_o3yKBgd`JOx1 zk5(oBe)S-NSdJ zi5R8#4^as*BS>hwNOonsSrS@;%-8LrFjc5_q!OM~xEYG!QPLI^#kp49a0 zF85(x1so*YkeF=sS(|cg5jdRjdBtzuXo!zv{d7?_|NQ)T74ze>qv+FLkG^|Nn0ZlV zc^_|9vHQrUd4DYV^o_VRU~4*(J=~S))AG@D)4#Ri-KC_5z134Lw}hJhCT4q$8&&iP zHgsds%#g(&t23j7YNkD+vxCl$AG1}0S?IINdQv#f@43>SU|{a2d^6y$*7v7l8p~62 z=he)<^Vr$Wi~UbQzgK^51zj|>0DfH6K)c>ZxBZEnc;1J6Xwc z?Tu%<_Z8k|i0E+ASbnn^q_$*Ypno^^{!&&eW2n;kp>D#B37pR>Gc&W@y;m2eUAt+` zf4OMxY0CT&W7(rWQAs}Tvp8orun4F+-LRL}nLrwTZ3F{fF`~lse)#Bz)2ANRi=+F; zyJ;=_T{oYX__!N>LrtFcJPc&7)z5~AP(29&-dPs%G`IVVtYi;Z6SmB`Lt0ywdtb!p z_a2g)tx;h@-j~PRN?NSY#Q|K%r|M^Z4%&S^YL98PM#?6u>#GU?>cv{bRwTWK_%*$% zyl97jW==H>rG^Fxj-(~mV#Zj4rvt8m9ILsYg@6K;*A^@Pf}U8~;<(q~FE>9W+1(>c1}Wj$06piT z=O_b(rR}+>eshXL(wk}bA+NqGEVYo|Xt~{mDKinUK$OXDw_e>Hdv&ghs6{1X!}{66 znc3gvKKt-6S>Z_;nMwWA_vlP9H9}g$nEkbH>NcIIx5wW;1r{tavR^liLt}aN=0nLp zq+ji;l)?bhAzJ@bL}1`{+ci;_>DmexbfrA}_;gNr_N2)F564UDrTj5k62(p_LG{>9 zQtN(t0=y>%PUVAtPqh$3>(pjlLa^hZmE5y+`ch=~qiaC)o=LVszl|tc>#+c%)4*O< z#uP%ue)M@sGN|epAu7o`)@?`kru;V1n;cP#`ew={46ov-b*v4>^kl=KnZSE$g)4?- z@w(99mi`LYjm>p_H_*~}JfB1+eRe_AQQvm88ZNyhoN&HFC7$weg5UCIEcS@O&7l78 zsJa(hG|RYoINw2-q)9wQGf8T7-g6%a%gKN%31tJxR-8 zW9SsqMIc_COt0E5bVR<+Cv|z=lgRa0Zf_x4sP_eo%65CcjV}|OA*!s*9C3%@@rHIZ zPvs7tX|}galw5OriYMYws}vBijY1a=i!}|5Wr}^ zxTJ#uOGi1`R}39#iEmM0 z4yHXH)`7!ld9z_l-zjt`=zNcHiMmv^j4arT^m=U5Qlk3O`**pCAOfCv9DKJgX2Sb4 z@3F+p5JZRc3ALDxo47WKWxe+ru;2`tBpI7iZF;Ofxdav7Z1K+PhRK9WQt!kfG7;w_ z{H=k1->~-lshJa;F!hYVCt-PPOnO_nVC6Ql9L@0d%Vu)yp!El5 z?vq50-XeY~0H2)Vk3a4bFHwG@m_OBjbv)n~n9rj#K))=_8Bary6rd)b(_L%(&a~nn zT6W#ciN*FBaqPFdCVyX_X!G030-QKEm`V}PdLQXL5+Wsvq)Mt6YU|9O?@06W)O>e3 zL6f4Kp>U=g_zc&r$@DI+GeWe?1vHL3UHyDmyBIr$yKSHAS17nWKj_}Y;?qrepZWEU zwHv?aNb4C)#LiM=4-B2-G+AwQ>vcr*?shS|e4X0TmtGOQ%39fV=PTHoIqcV5xI8x5 z*srqlcT!x1foxaXl5H>A;#4t6(ZT<8r)wEx3?G}x)df#q@OZWn(iMrL%UT&p^T|vz z2BlY-kJk)ZKD65!DmZgRq#ZFx4sU^oUYcs#-Aqj#mcMPjBa|RNt;cZQ`7Vf$Lw`MW z@MbB`n}z6Gy}p9#Kq4qvihDA;MZ&lE_N|yF{dtA5{h({g31<&w_FUp{Z&!KtoKi*Z z-05ZpHD-6G=cn0H*cBxP9UNj2V_s1ql3~;SB0X_K1K-7q{-w1aE`r$=4fJK@oQH1R z0R3Pl@hsC5)#>iEVm(R>9SI7u3>_(I4Jb7B7M%8DS(H)0{nzLZpN|5=+h-qxFRMIo@06jW(Au!f!)$DTCC-CSxDU1k(RJjy+(uXcx;AUm99TA z2r`9(AD>gQuctC-)4y?Ry7z4D9=V)uZs0%1Dobnx@wy;%v6DVb=4MByhQxQJ>bbxZ zxDV$&Dv>nAXH=tzzO~g``Qs(34EdmDd`4uJD8nlT;;b((Z|oIJ2u>vFSiq0%aHxqE zY438J*}M6U1ozv*`(@hJCyRYjeq~LdYNR3$^kIGMto8EpL^>Uk+Hbly=*sSuHTN|v zvMq33rrl2*&hs#@BY<~fJ9*S{N^dM6k|PP~fy(1#sjfD0}aEdBLod2*u{lSr7XEZ!`5#P$-cqr_)J<|qcJP14T}hMR&Us9 zZV*&r8%DTXvmTz8H5~3R%hUIik0{56*IH=gccR5ljelo1NzxtvQ($+xGwX?oKHg{( z?Ko%QX46cB4LeI(+WAf2CGMQ-{SbpNKe7#Z-jW#cf56r*l6as_1(X>9J^UbWNx{czk~}W$XBjGP{ns+c}%e zz-~&)&`-(%wJVBk5p3)-&YTrph6zt3yYY8Qq_>*=i|?BAR~#Ovn4ITCs@tZGnB`JX z0q4j0W~5$qQUY%ybS6!zMQ=0wbL{+SDs2yb0u(a!9B#fOnOgG4HM3)on4SI&Mc;#+m8+pWD|OZ zq7a5F*>O$r^fAtipIAasTe<9SCg9Sxjoqbkxs_15xXm<3Ge2f1`cL&BRg#D{*M-5x2=oa>~Rxk$YH2myoNVPofDaN zBqbHhG5zF_7JGb-T#s;;(}s#9#p5%$GOsM~{MkP1eSzrRxNBGNcX&hHO=k_@6E4@C zCGj}ehSNg7L#;(X`JMl*54Al|Bs-3x-w6)7R=M~42i}|aH1M*^oBQ!E%03D81Nv1P zKlslfTEsheZWGnJA$5Z{=|iLlX5q?`24S>8dIst5ipTIGDy)MRUi`O@a{6bbjD{8g(WfbQW|)P5{A)NFYAs+)X3E~+TA?j= zqq<%|0eZVdW)mH&g}XT9(ZXk~3%~mrM3E`oBEEcN`9?J_1!jAvg;1HHip&{f>?{LY z3U76=O%ycKn!Vjm)V6`@FyB~4s*usGOOk3Gd zW{9|e@mDX{rj2T+*&DEkV(x*q383W37<5%h7AegH?J1jb`u8EpFxR}Ds|L}ym&XSTq;R)}=j{Q~6(y=Mw(m>~6T_hjqf;Z&MPH|i zTIBAwa!F$}oFRlNiWC9weurRSwm(kQ`+tsn9hwLG)$Mv+w1@hLYACXgTU%8M4zI|p3x`}th_!>*XiWpWa$IxBrCV=})S|G)om;t425 zDEfeFk92`+p-hQ!sGDoPSvR^0sCLDk#d*b}LSbJ`lKqyt(3I2jf~(7Fc|V~Q#-Cd= zVCDAn6V#-YkH{~d`z4%~2?a`!_&=xm{et(k3V)gn5XA?_1xJaxK#(0D_abkzZK`A7 ze2z`8-&g%f7k@@^^~{4l5hY0cD7i;jau+aW1;lSF9DbvQErQTMg(M(OI%x>+=E6Gv zhp{n>HNH2cARcJe4VQUSfM!AL!8zl_38F-esO-)Fm#YA&5;R8O{|57f?ne@xdx-+u z&Yy-rfbAgmzbC|OTA06r<`esFsvi*Gnepepn^}KXPq&r z5bhuX`6g%_@BW^uR1GO7p`1ax?kAB3-F=7vbWc9|{6582nI5dD0JlfEpNN#6QZ6VD z`tmd@@kGMQug!6~*DcR4W>fv+9n(n{_%>A@5a9zg?ITx+8m&MqMJV-TSp@L#+iG6e z2Q*$HWw&?W8=j;RNnbJ8*SO%-=H!=p=xIBh;L<(kD_Fgg9jWy>)m*ziNL+k4oGrtB}b=ks{fH3_wADAL}?+zb9znK zu}CmI`C<9!Bp-R86sSXj$pS#yL}<9=#3)deXm2BR)qzA@@cEmRQPGT~8L=cFXni(W zw!=A30X`xD^bLTI_%3M7)BCkS-cRm7^6*YayN5OI|_OP>58X zv6+w8U0*jK!XRH~U4XIa+u(`oGuk}VO9OQ|yD7Jbbe(rN6(0;lPanqFE)vS7ol6JFo?$a?M;`eU@&(X zEOCIEE{a7}N2h9Q;inW9PW8>gf&3JKo&4V$cWe^hRE2mU=PQ#%CQ3Wm3r$Z1K>x@8 zpD)lqm#lip%h4-U`XIJ|)H`#hp9!+*zvrS&kmsr)mzrQ);o*#T|(fA!4W0!|2Gx_Y0kULf5I@ewO z=H`iim&TxlkKvia)Vo)Ke4#`)5(ftd>nnc}I$bWJPD)JwmpH$h9yf9A0t7(dJNs_H z{7VI`3(%hoG%jW#t6#l`BYw9I2~?#D&dyjV=*H)6kfjjY7CS=;0=VvGD5Boo*#~EeDp{g%q)XKVhbp(jMe7*EPJI}Zt=!gvQ zaFts+lceW8vXS?gQY5$Obt6thIZ^R&_ojD>lvr&y*s$0@&Vh(?a2==v{*+tR+$6uy zDMV|v*~|qT>M5+a2AyPG0+bbNABuaE9^QRVLdz9ygh|o!myA>Hox3>qVUYDL zWA>SLe@zm8IQ#tJW%4b@x^VqPDnO)kXM-*RK9WSIYDmuLUVLvSp;hpi@k*QanG5jP zDDQeUfnOlnFR2flgQjZ5t|#{cu;Yg=lU+djsZ02FVH4ixtwaUc6vA{v(+s=VY>M3_-8n4 zZx?HjDf>UmSY`?5bQFEN>7B=4dA=pvP^ax%CB z0xPVAhwfL=2~gPTrfd0dQC*p=6#^|QmUMO=j{J&&yGgIQ1sgU%!aHFR)MN@qqhc{u zX3g4e?dy9{yMB5<0BbDMwH$?QZkoGy(uh7kaQ-AWB!AI(T>#YLRW*yaMKalKREDrs zNaNYT)PHc%xcT!Z(kC001qPqYcjqq7=IYg(+K8BnEIo%6uJvTt=f2;{2zdq`;-7Kb zK3349tOy$%nq%{srYmjg$sm;e7D&~mlu0smfJtBe^qKtR)lAD}-}h4QE=l}IjllL! zIt%_!O$V7#H+e{C`QtCq)M}u`t#TGgeFl)G-0Z-AzxkwWZXSPOJx8S53(K2<0*|jT z9fD=t8zB$ezG?)%6LWrgyj%4tK!Y%qBUVbWv~l-AhOA$Oab@d2!ikq*KLJD`XmQj| zr#mmbn(g^_@*bJAQYVuk&H0LCi!;uLbyg<3Aowu*y8rO79J z&-N!Ui!qWeyEh$Qtzcw8E#mkpp+n}0I0Uba-!r++m~?HSPl@O#rhcc4N|r?8GKuC%b1C>0!HU)U(7^GE_z!D0Ji%skXZ60hi;)FQT{eP=lj1qpiAvvAb@R>qg z1xNon^)^^djnm#!Pj+Km{qNB+&Yf-g=oK-D+D62ZROSU^NUlQ}H}2SoK-L+kHy&JE zg0W+oG8%N87H4Y)%Wso36Xg!4b(#;GwtlJUJSI`|kSy5E`cY3Ds(0&MFXu&dhlNiTDWn=0CW<^0e0UKxzgdWK|#3#Xxc zvGgH_h~U-`B1O`bBFC}99*HSujx>wFI%dy)5mApN)rVi(q$%Vr)k6KqH}6x}+YMwE zc;4i9LVWNCK;dqe{JB=_oi&~uDv=E>9n3Z({P}1V!p8-v~ zyWq<0{w9hXJ@t*vaqqLOi}O!6D}OvL?zx1In#KV}U%Wr(IV8u&ZZ&A@D2wG^tc%Ow!xy(6es`?iKvDf89WjqtvKx zUmeFIYRvSE4V4LA<2j4di1x2k!CIk#_2kM=^p6roE)PZx$)l)jM!zexgcs+BEtmoE ziDZDzsL&Bpm<>uTlA7hU4mbcFg)gF2l(1Bl!r<;+#?Y@5-$$hQDD3mr9G_WUKv?83 zgE6R&Z#(v78J8@>V;%P1u%4-oTLc9he;*1g+*iz#-YEOB^d|1^Xc!s4>-=4}F%8L{ z?Vn%t5bafEW1u|7r#minM+W`jrxQ@n!jpZrHvz#cdd}jbFDL&RK9;2z(#_&C{dzOm zt?Pv_M3Td>2DQ<&QPH_Vvq9xtcq zEw%Zj*I3>Nty=>ad(tQWPs_pxC!FX4bW23)@!VqX9Zn|6xGBRGQ%UPb>Z_m%qh>y7vz(2#WRZd4BSR!x`}%M2Sz z<1MCpKw>hx{r?GuQq}D0pp>MI~o% zWk6@-+QNW9&2)Y=D|Ic(3L9o-LoDIO!b4{%#id(PNCYtwG*0)^EhMCR$x#c7=J(7bs6bBZ)~(vEfci{qi(c*w-V2*t8^g((Ezy(?X^ zj*tt*R%|fThim#O^l|M=a5hEqh1ksAoAD)26**$rLlXX8VTd)l%u+Jnz4{J^6T^kS zr^)uE1xKR4Z9edpGv~BgUHiukZ~}U@yeb&=z)y5Gp?_`8k;q^>m+i;`(Rr8`S}U2? zA#bkoQ%N>9Bvo`k-i|_*uFanffBO4jkhT*;M=aoEX-Sagq$P%Bk3>oz7@{q&G44=+ z$gd{XK})sRX*gs#5)wwZ_OcsN`J7*u;#C_pGf7equ|&jvu*8h-Vhm#!Q9GHn*an!a z`pGsy;L0dhNFZUgOMb|c-8I?>tuO_>rlO^g7*^2f;$!;uyJ$oU#eE7=I!_4yuJ9*% zA5%kU`!n)1KC#P5Sh5tVe{yzqmgZSG&4=jvMf)o2FUqZYtBdi)Hd>m|6x zoVRjf7{MHP^t0YAIPxwnq2be3e%6NOh@2}voEwigcnZpm70`_Q{OC3^VTj>5*puU= zNaDmu8z5Sqyk0~?E1u=rTvz=QK<=ZhS(5>H2njnG?JbHYW${>^P;ao5pBZMRp;Dt$ zkMcojyTZa&RYRH@*scA-uRTI!h5Kw7{ney4eB=nmn+?NUO?M}{qVnuhEPavfn<8R}WdC-<@t-5Vg1 z@G0KgR=^{nq%W1pSM-SIi&#sI_y_JI`Yubjy?sd&CCE#ZS*4KCq$BSa5mktQW-EZg zV@EDz_s*?f!ntc*LFdDO?gC5zQXz!b(VJGi7AUc<$NyFWRXPNpJv-p%d{v^U#*Eztobr@G=-#x(XkcAhU!sLG8IoAYwE zu}t!TjjN!qe5B2qFyw}Hb0eU|)&`+Y3LPKX8vg>CSbJ5qF;1GST|{((&G$|R-P>-w zDRG|?v0Q}0)e+*ZYsw7$L2hSa-_sDimb0NL?3?8I;_8bqTj|Se&i|rh?K5h-E&uAu z36C3FD}=~MEnaUK93|t3mTp~$`?YpT0gSN?v0a_RjuJzXB(17x+jpZSk3gpwEp3xq zKSzm4;5rmGMEZWj-Ox2LMB39DVB>$y(}H^he9SO2u3;M+0Sxn&>_AbGPr&TH-_Zn{H}E7 zD-WD>epi#gip22PyrAbE{=_kk7~YaL5E*t=G1HrPY_$_|Eg*u$FdLCeG96Lo0Bm2Z zdrF%Bt?_kSGNm@%t%^jS+7yY(Ef9mKw+j4FemgM0u_9|-=?bTWUn2?O5En(mHf!i6 zVOgVs+@uITb{A9??>5ybUQ)CWT*NoQylfQ04id7Ot*G*XJ>!&E9LM5Eyd_ zQ+#l7dY@$Z8iJjm?w3zb5`Je{DoiL+g2-2wk;?hckzJXN;`z@x^F&M_pah^SyY3y-J3&kt*fL}BA7o*OKn{P0*w7kaPqI7ia zCzMvCEMH+d4X{~XJ=NP|#k^eyL@0L9Kb#}(5Pya_F{Q6?xInC>@({v8w0wr9vVVu~ zWop29&DrKH{jJiD|D$`EYk93+hfb0ayTH^L8|LL|nJf<{JMwxo!k4yH!0~;g#E_P= z+SqX{5dMbuG*vjrGPXRL<<~@GtTge0$Vxn@AKufm^gFzezTwIGg2C_|%2cKQmf?9@ z4Amavxq`5QDML~$QwWUT8An4ZI`LDg)-u1921XmCIuLVYD0S0XY*uo|T9}TVmaHQi z)HfENqW>khlkEwft6cFiWNyz7FW7-r{Fiq&2YrXYBRG0}Ln5=P?-afNHHRPQIaJn@ zRhaWheXLnN^V<0};25QNE;Aw^vZGp^ctGPs_)iauKQ>Wjklg+hB^u_E@$Uh-mrdrL zTKK7_@mv%t9p1pseiH?$FUaPx>97|X7Fw;DjuW3nz`kbvZ}~qvM1Hyt*@0cw z@?68i+Q>lG9aXr)1IS%1d=-vY(3qJGZ}_F?mQI=)+j^}yIA(vz%k11m^z)lgMmW%T zOn^krgQraEk`DoyXJf0+Y;_{b(nQ1%h?+lsHqygBQ-b;jC?KDR#rqZu+y|{zQ5jEo zMO$6J=7b;L^@;#KI(4txiIRd}q4>4%z&-?Atde@0!WPlbeA>_pE^sK;PX5WmNdWKm z7)eyUB);2JfqYB!e^2H0p)KaXQp3`dCl&s1@bjyFP;Hl`-T$ecGyQ+ z`cr$68{OuU9>F}|$0*VY;GY4+tLb^n1P9iiqT6}|A{xQ4K!;&A$Fl&v>|H$hRtPjR z14X-+b^DVSv2uppreF2P85q45l7>u+5}WhB)vwH*1+*ByRm@I_N7)c3M~R*Xw{+sv z1Jk%n;@h?Wri8xO`M^2c3#~BxtQ0A#67RlmFR7Bc-b{_W)1V)mJ!kCqq8zkHN}lJcRUg4ih5~9w(inb8y3p-N!5!{imhAkhWf39_X}CUk zAZ?`(>=OMl2IyC2E{ZlfmGd%nDr9AMM!-JvWBFIWzzfJQPi{-FQ_%dX$sSSX$&Hv4 zsrDij!2EEq+|l3DXr;tVUrAqUUaCnJaV$^3^rW9=Nr}b^hbB(~@>}kKuMcPZ4J4iq~0tVja&Nc@tG%yXWP~uMZR_|f|ToC zK+!$QV`Tyq-FewOSJmmMz|B(m1;q%_okP;UeQnBMDsh)DUVHiCwgH`QK-UO>yRH9& zyU79EEf#`$%R_aWNvBT2iNOQ0w(%0Xhq~MiK`(P2xu_%EIUfCq;cZWCK}01 zI<}8Diau+&oS9o+#RCU3E#P358HtkB!bh@F+0AZ6h|Yj_F6OKkDD2RD5q&KQB?z-E zcTf`qWp3Z{{DMXTph0X!E)Q(Cce}fs6rm_2pb@;D7$EC~I)72#RD=ki5W30k)+fd? zJ#EU-HY|(KvjUzm$V@*n5v2nM%TT-FGNSWdBVkg82&f>UFSF3-8xV;a0T`~X+vxu9 zy$G7ILApH2D73Dd1@l(vkpHH-z8sEsEcHu_WDXr5Cw51Z8p+`fa+f2()BAZ=$}(CF z5eKbE2Nmv;``hi@T@{dT;V7tZ-<`VFZ+MyT(Jf7Qhgax40l2d3y~x8cP3Q+tiv>*& znHb91TQFN?M6@!Aaz@Fs=zY-L!^sxkc}WPUk#8Hq9Z0c7$&=zWh1oPWuAYtK(rDsQ z_h7o*z4Sido5erx`MSd$+%Mnc@nw5Z)lr%Co?0F+@&86CsuaVan#WHtq>Z$zE&x`r zS_Y96_P?4tuxbziG$4ILk3_?UQ7yhXyyYgoSIT~K4x=ug^&jHRCf~ z!>lmuEf{8H^>iK^d3r9j$bn;ls!}^;&SCHWjo9ZI;e{JD2<+Diq2E_ySa_wba3DaG zEF`=}l7$APfwUG8M1z1`!{<0>NwKE8t%WI_m`}%=yS+114Uu-a^?~_0`T#QMTF0#2 z$P0I1{NHZREPVc*0v^E$cDtf!dhc)k<_AwkxD4Ztr_Lg)7(spZ0PbJ~0c~Ly*|JX6 z1vsP6^ZSZz#9|Q~S6|~J8!XM=@r<>H25WF*iNIbNfm379i4dVNY?gN7o=NDPoHQ=1 z#Q$chP=kovwXy)FMEEa80H5AKuKr!=upsp&ld~*L30}n6Tck=w0oDUBUAr0$)NHi> z4e_O%^YL%FT=oB)G%oiyL##C1ArSJuPACi}Y!}|68U2U-bpd)W?nZSyv=<)yOZ#)O zd*H-`ZhRyyX8UG|9b)j(H4d~rA$TvN2e@j|Tyh9JHt~Qu4%io|KKS4A9yOoe;d~SX zNyta{JEMOr5LYsOY^Sv?xdRA;mQR4tQB4V^IvOPwq0GmvmoC)_)P>wo&d_ZLNl8GN zP=YhT`lfNVJ>BYWBseBc$MqLuCDs2wuHHHNyRbAk@M5-ug`SD zzLAtAd_J@CV8CR{;n|7aem3&4lHJH}T{67;*M_jZ`>M=mcl^J_fjYwq1;i`wS$Mpd zDmL-|(r)=Y%uuQv5q1U881IlC%N70{K<9ls3_$#k+$lug_2)nq!Y#G?t+sJc->NE| zWM|^5eOqMMzlk;_ErHeYuSu`|&kJy8Zo?HLeee4Pn0n5-j>VoFaCgeSDT0rW&NjYX zyGs98|COFSRQZ4L*v|5g6E)`SuFSYMza~T;oHc)?J@Xl9pkx`XLBDlcspsM2e1SA-mNq_g1Z;&qXuHO^jlhW81M~M|A!J2 z4bbBY^JAH!>bO)W_6%zGTHfLrVJ%KUJ#O_j0L@WqSbWz*w<&~_ZR zhC;g${pv}Yx}1<8CT;AW8q7mVaoVUuCTBBK@FD`JQ2is30~BZ5|NaR)igBP)?Va-7 z3eKks0<&*ye*f{jYXmMV0>(S2ati4IW{sS@imIU)XyRiEr7X^0FGUk@vg7Y+2jsfS zZ?~=MfZk9|QQA2May0lqpddm2q%F^k46hLd@d;1C3jUc^^yGzW{C=tCS*aN@+cI2= z9O%BVTMJVneAAx}XcuWr^a}A5%oK-6f(K`3HDPTMwR)qUQvte8VA6sctF#;CpH5h) zCF*?C2AF3NdH0)cFz|J!b!Z&}%bh;97TQ;qCP(q#YEMQmj&i1iXuL};g*)nWXF^+x zH}joj7c(TtWf`R2$3LwkOEf^PfZK%DP_(4R$RuyZ(_Y$O+QMcW#RdR2LB-7@#a;G zB8ojY0xD+zdC*Rau3pSS8u9)t|APJHok*&Q!dQDbyzKS{4P`;1UdpySBP%PXAS z+1s0tTx*~+aBTN4> zSj}8*Z(e^9>NNW3zkPi{&)-&j1&T=vf*d;!AuTFFddki8CYa3^phK;NG~n4!4}6wI z@P)JQ_N#OZbSRxSZNBjZVQ{wlZfOPv@cljx_}QGnr7X8;8Uo zm+Ubrp>ihzi+y(u=ki{?=Fmt-cl`VH*k&Nn!0JxZ;z^bJ-U3wdODsBr-8WNIE@AXj zLO@Hyhuf1`i;Sw;4wHwZObk5VFX(moN6qtat95n{hy%?7So9M(sv3 zNzAK}e$lvmZZ|fs6=MF$=-0<;KI7*_bR4=RuoTJwu8`X=KFiY5A@{HlzU=pwW2wTr z0{+^K65+axN}ZWWiSceLU|>U+-hWo*r4RckGDV%}C_u1mPamJZfrDtY!0;Oxaqk0K z=e9#-GtY6QcOLHU?sa~D?V3J)+9=C$#;&lauFRmZ2qcT6=Ixn&W-)Sd4V1LH09Df{ zp}}oKc{o=hjf%H5Ss`-y3!ti=e{fp-xE8STkBLHRitko|{umJH=>UE7Ho>^jPVhou z`%Xe_0lfPr}BI||$1{sErTRY^62zdeNf0xU|iLBK~9a9Ngad_LvO`hMrS zsHo`u4gKCeeMoOg$fj*6Hi5xI+^9OATQVXNVynTTy}B_%1DAJW|Nh~+9vjKjd6S&(Y2b6FvKVkAH~Zww9`U1Re?V=!{+>g0(9;t7$2c0FL2J=Kho0)w#l=DGv* zCbIX3w~eJGXtFFlQC&nSs5~__l_8dsxT<&bL{k-P8U^Q}!eI>yd5Z!=ioLqx9!Pet zKVnC$q0^G_l^8pX!J!BOqZ!m6AmQW8<f``m1dH35ieAlC(@n~D?0VPZ#S0vCN&lN+rz+@=&yZ=BAf7O#WyTeQOZt*mmg+l z3!lUOh%;){^qTkw{Hwq1(jCsyi#-;m;!!@4%u5Wx!EJUKTkf5^{Ppxnt{BDRF$?r| zwP`2tFc;jzW8EG1RouEOIh0M`Kc&glVx?+-R(7GB6k73f#=9!mH>z2$StGKR>>=!Z zTYE6>Ms_Z$uk+bhzH`&c*B0?uv@rC;?q88D{n^o_=;XA#P_O}2F{?*Uo}+h-ivlJ> zioiXWS>Oh5*so`QpsMy)n(E-6I6>LTPF&1K818PfP_p#5qkL{;|Lf`>Z^GnYWOb>~ zD}Q}R{gUfv1ONHhxh5DTUIiQk!s(~N0-`X51!EB{1@mB z5Tc;2GW=k@9*##rKy?XdNpBtyQd=IbfAs}=)UsfO8x?%4CcoOx%%5gVaXd3~dk{^T z@+wla6}En`^d*Bz47U2xI#l$Oa@q4|^K66mNII{n5x!!fB8+6bEPL$VrDM_ zr@mbuR@sHcFFGDO;#Im(p-BOcetiZBljw#cYugug@0veQicnNQW{;2EIs< z{F&o5mc~_a&~`T(D|*lvsL%dlw5e!Ihj-MX9<;c!lvG*i4u?R5)w06E7^;Ji_xVg4 z$;aBysSPcfC@(HP`#LO%=5_|MkW(HqA*qRn`;PqbmY+}=;BO;(CZ~!q8kZw*uLZ}8Gfm(kVu8o zPZKJqo<(K~(uz;(e4{L*c&5ut01@igc=C(_hc!`701+k1qn{Zf7)yI1tQ`%l4_us^ z`?kMehx_!f>33SQ9I^SW2(w>{yVQD68o>iBd1imII-5y_b^{g$lS79N0fUgXny+1# z$_~7dlw=i!n%>tcY5LsyTcdeHvLX;g7I@OrOYVSyM5VlnQYD^G(pqx0{^ger08~<;g&PP_&@9K+M;;%ENxs zMS*gENtdhGx|WOnp_KIOo;Rs8A4#euUl(c{Ax644c7E>nu17W=jz%$}herCtE`%f^ zc7OVOEG{WYo)*n8Ya%i>-i4PW4-k;i45g1K8rzcrcqB4PPcu{3V6=p=!Y?MC`^oSR zhkb>hxdtbG!zZR8G6AIZ4R%^y9ML)=qWND_zcvQ-REs(cVfCGkEi&6HlEv3r2;T*L|PguW8@2cARg;)yNqB z@r?`7vZKTPYI`|I#V8WymC6%cBP$>t!)tn0Wc>=_-x}cOocwC*r`Mw3>t!P6*}*6w zZXUGKvuFHe;58c?bPZ zTooFi7%?0LJK&lQjVp4He?ri7!DpVC4x#w4Z)#)17K6h=MQ{>_1`%Yjc*X8Dh6@Smwvb=g zo~J=6onh(}1mQ)0!&0E-+6Dc<>FlvAr+3QM!39^n*RD;#Kp-{2!-zS6l?(x`*2W_W zFf}J9-e?G!u3{m)B$Fj9I))i>pffifOTpEWSMrgi(Tbpy6%nlpM)ZI4+LdXo;Y7yF zvE0%h%@+O@5$v;4eDL7=!=o?Yv5A@G!H9bh#KfeY(dYWhb)>lOA6j*dIC1GHbR4Yw zzQ$ONLn?H0{%E3#-u1eQ1X<+Dmb92Ko$-WJ6?3rULmL_C zr|hdup(P@0b67NQ=Su~qzWtH)OwgfUpPeHuNki7eR7xVke!GV5>8v`Y?PiPmyXSSO zsR%epp$7;K=AT2J`&5gMxGrHh_GrD8M4%!E{8pr~}pcQqYkCnpKwuP?&h zGb5G1bl^jT@?Y<|^U7N~;=$Mh2W2->-@eD6c*2707d3ZJX9kJj;jkmQ;c7$wdKa4B zCnO|8b%m-YK=RCcWOX?x-7^7mAKkRn*us+p(RF|mmvsU{`4NqlVFaHQ<4HB7B$wM!RmCrJO#W= zLTid8L_yvFNp)Y@S%CdYULj`u_iyEv>CyF$3K#od^2j;I`HqYPUr0#|+@F^=LT7iL<#wuJOx%5|3>2F(6QvE3OKNX%5%avDDq==TWAItIanQ?to+v3SV zQFMJjoFP%9xPf8wqDU=^#=;->nfVQq^x0Jo1GSQI*3Ng4j3+jM{{H{wZK4%QwDMl{ ze-N|iwlaDB`hsyd%OLiw+T?(3u-vu2ncu~dl}k*FB06zOutH(Yuq0%+><>or1D zEs_l44TT~;uRKoYx9o|DX_!b=$bBz0!t?H|+AJdP3n^3(MvxazRLkOBLaik=D|YI@ zX}!R#O%+R5k**;V7Q*bxhZn($+;Q>BR98;pyByS|WhY`RQp`NxJ{rTVJ~g`}pZRRs zNj78Up3KaQ7a=Ei{h;dSn^U8A7C>^K{PLkE%ac2e)z-|JG%*&Typ?nJN3kJ!In?d) zy8kFoZr75b;~gC`CsTU49oc9q2TrEFg10E+23!2#!#In&Ga@o<*gJT^Q^rSEtGLE~ ziuur)KOB6>x~wG=hbf+JkbVvZY^K39*uWR#5KLQztx^x|oZ7cxqmFm@iiT zM$wu3AO=lGV47{Hi?LGoBq0NNUiXAaZ(Kg8eroUdO359;8hx6~AIC>Y0NW!w8es8Q zk3SYR{F2-d)n*oheg}u^pH5E|MNA7|W@Dz1uw|VuK!ijjr$*L6`1mZtBH*6d`Hrw3 z$Iu%UcDxE}Gey45A1@kRA!|~FwNeWo? zkbC!=BV(9Y6I2fsU;l-vri}Ajsbr=|#>U6nOQYv9iDCvjqw5}LGZ(Ln^B{di*dlY2 zp&J)m{IldZ%8_y>NxW++g`-62*rw4u_No0vx%lbSrm9&wmP6ZNaws-XDyr}gJDU=O zQOa?0{nYYI4fl~pAA2LDYeyCQqgX&XP_6wDci^DL!28ji z0D8@*Im(^7tsN;Q5m&}B0^>RL#Pp)BnaOW;3N;UbPKLQNr56^gO88`tH`^8H4H@@f zw)iPf8gpM33bs~Ip<;&+tVTzf#*F? zwKApf04WDc@OchAYWF+6OIwO&SZ(Vb&#zgR;J@^SQ)b@t$Z8aeHduXIGhgV=tW@v0 zi?~s-odU{iV?WCjg8pHib@UK0NoGt*B8qUaFk!H#g0r0~QUl7b7?HNDsSZEhJa7|A z2RL;{NxaD}3_>CE*TMw)nGCNKg-_4ufS2~v9>)UAg6vT?B%#D9qQFW+S@oKq2+x19 z7liVG!Rm9byMJ)lHz{l>%8ss%>iQpyc6_5VVL=vo@TpeegdW0}ziSR*3 ze10Jd4lmKwPK*w~L~tUD0)p7A!(!r>m(4wlJbhE%Mld6`QZ@M2s+Ccd*$PqIZRk!= zmLiORjNA63Mpj~VB$|@-Ma+{z)HDole2nz=02IQmG3%J&JCV~!9j@r)Q5{=93Kgu z``?}^rR5x0K7O#-L7;nMr4xrY#nulqUE8^{uHu^Jt# zS+!mJO$lM7;P^JByX{wQoh4Z2x5JWPmY&E?2+=fgxy!Fz!E5v5iz)NGU)e+ z73$i+pEdFPR)6*e$aw-~_iW=uP-?1KgOVF1D{i47R$Rqx)XE49&Rmo042Pl!TM66@ zj=LMdEKq|N?>$)*n*nf^6jgA6R-_sReJNU_C(p-;*T;x``oV=qKell=>tW|I<-8ki ziKi+kMi6Jz7*hOizaSK%BcAqvo&{;`SfuLl0P8V!uNv5**JAQuRsoY-SgXZSWgw)0 zLAR0P;DnB|3RG&wv0>q(NTgV>w1ymxGIb$!UcQsArSW6gFQg+`OQWk@iWvnZ%z+9| zk5X61$p|x&=n*)N)3hg}hY>8H1*)ULdJLgJ4`kFb!C7ql3Y4J1dzqG;oo1!B77ad@ zrQY&gS~!#tn@x7B()bLN)%sUF2UfM#)2u_Ff_T8@vBXB+VY@A^wiG5O%?g^=B=j5R zt_9!F*hUx0G;#lJtadpRuPV_Flk;S@Tmd*8+%vwe38)&xcja=m#XdMDd&&_1THW!r z5}bL06K~FN#exNCt4x3`7#|`FQPfT(&R4Fm%0!K0Xy0o*3~9Z#`HbqU%qD~~_?BlnzO@*fp3sN)yl9bwAHuf3h(p|IW(bOL zz&S8m(cej}?>AQ6`DRbOPUpUx%M7Bzg9!(!ouPpn(+9iQOW^uMox%zrT6%0OH89(K z3KtV2iH%NsT^O(khpVkB4a(E^1TPt>%-rjkK^b_t`(=?mS>mYJo9#cTQ1~EiFd>gu zs4l<}j91p(&DF|rLSM>t)trpXYAXi}#+1W_<3BgagP3u!AxLEyr%rsDlFSB0gDs2g zm10%|D&>L;uTKEmPSSBNTm@o<+O9ohpKq|Yx_uxfR|v1pEZlg$*PIL$l*TXF4eP>T z0sSgNdWn?wm3?DpwX&?Vn^WokleI=UAJqvLK=gyKkF3k5g8e@TT_J6Qa^7VzXHem+ zlVW|D5d-j}yPS}jP{=Lps*pzp2!}^^J6~{ny}*8OF3yeg{@`*Lx2-TMQ1Q9_o=i=E zEl>6>hx}<5GqNq8P*U^bLLDB2jY19BU#ziRMxwkVxT~JrVam}$6|*d=;5c>Ve>S@X z4IN7E`lWn8h%@6Hn5^8r9|s;x44Vw!f?!K%W7g{s75nQm^9Kr?9_21}WZ*;}PgH+k zsv`(`>4U(usEV+uXVtl--v_w6r8xGQqsh$)-47t|gnuv)GDq~|J)bCqE4LcmMr%gd zq}!YPQpC_=fQ7d$Bft)mV+YmQ1Qm-U5maFN1yPj3*`w6=fTw*Ur;6y8HG_b#HeTPS zD2bGeh#dqEc2JJHp)fe1Zc5B%h$tvueP=u_25{SDp?998h|S9K#_1td_^3X6+YJA1Fu4xXaprwO3uj4gv01Wpke0`~n zhz&V>paD?NAAQMM|DDL9yymx=e^j$9ld_237MzZ)KXDH(0ita~;L;smp1Fgp&LfBd z!P&8$c+B^a46g!(|0$sO_$?WN)6DXRxI8lkq?46_8ZSL8ASI)SL4oth0c5~UZ)l&$ z3=+bN_+oFYxuy{n%YUuETaWcNXs`%1jtJH;aeOWC@_BL3D_MVgAWnngvMSh!sc?#z zumWbpN~6{UIN9K7r%viDzz2I@KsnK+7TT2w6#8k?tZ=HQT?+M~ZP=>k6D64z6NBO~ zW(Hu1pA439kl?@ELGH&VzuJ5K;q& z$B-fH8b{TBjWTw4-0?CN^)gpOU7y4bowNkQW{!u+L!@z{Xxng&x})XI;@5 zX9C&s^0_q9_D!UMC3>U3yPM=-M>b9-{KHER;yMYddLb&p)W3D&9Hi5+^M#cuV;i7Q zS5e*yH70gR{q5U7^}no2;?4EsTkS{qk(q z;tTU*!#Xr5a6$*;yE5NGyH)94CuQBU(zHI7%6gG|EVD%hLU3+H3+zd`Vy5FdJ(+r= zI)uc3?u9S<3coWT9*w|3aUoaNr>xs#y?EZ_L3CHR>@7Dzz|vW_FZ?a|g?QNMc(h+Y zZrWZe#-%P;{M*%&_ogI%ji0T=WAmZGE8s-IQtnDT8L7h2FH~QcGgAd;d4|ayGh1>X zn*@K?%_Nj03+fBQo6gAuy5YeW&MG|_MK8!zHGqSNnHeb7eM`0JRSJp8C@Xwg{j*{q zZs|l^VygF2gVpj}BmC;=uzo)Nfjug7RSt>ZbRN!(G8j}syRmmetTfjYm>LHX>?aj$ z6HnKeW~A8;b8`{0f#(5P$8;lx^DGf<2Y4(r=)G*CXqv#&)c2bB{*DB^@P7Z_>* z^+Q34@q&^NUnu@Pepy6)l=uUzA-W~ti?)q&?>_s^=2}w{KTWBJupYSf#GjX^kro%3 z3it6JT|LQvI7Q@H_d1@_D(07%{>&BAKp*{P{3U*gB)K4)AfW?7QNJ6k5iSZS3?h27}b9w&cB|>>=>1B~3`1;{94E*@AthdtI$FuZDn4BZ)J4M#9 z<`eG^fKrpYk49gFg|y@4dYqH5RMQ3vwN|jSAM1_FxyX=Ys5gt$=e<(D zsa>Wnjprxl4zq5;M5mVDHWU=XdVT$0ytj#0xsQ4Gttwq`5FDOWh=@TQBoO zj8Zc9rm%0q8MLa#olWxp>2p1{2}^@M*?QIxoOb;8!6;B}umz4MdAYIbSYUN=5DX;k zo@$^N6C6&U>NIoNzmoSRdFJPF_Dy9ueQ3juGVk1k0FdX%@ZO`q6$LXooI$x96lo&1 zgWJuITmZbopvAd6u_?D|rUn+g%wzb=Zp8nbiF9G<{@m1JMEPQ(<*gh&IV6`|Co@&P z#i%#^*x?3E^a46eu)tGk^i(LzT|6ua(#Ln0k$CykRb8Rz4%`L z$~aok?=>43n$$tGRM-lbcmh5NTDgLONM0GubG?7Mj=N6EodaKUZ1i@m4`U8V^$0xU zlXh!E>t0uCyU?m*KSrjPZ*J^Oxesd&%bSGh^>aj#(N2~{qG`EOpl_}=bU34fWe7^+ z@34UffDPo1*#Ov8rV1`Y#(U|=g2sO<$x2Qr$TJ6%;Q`VNl~A@p{mm3GFr$z4GM6tO zdMH&<^5QT7*oucT9VrJ(#?NF$J;l~ZomA?}JKxIKq%yn#9j5Z`nJVXij$TM=M6?F! z56}lc3dI9gUDS#!aZv~{89V|Ll#AyYrROH)Oq5x9TT@R^kaN6;q~3q3<)!2}X&u3r z<)Q7O4=>Vg|ATJ>Aa**bgPI%MpV!ro{4i1NjsAXCP;VVLlwUK;4#Oq2wF0l`j!^6q+ zWHB+keo+=mGVx38FUB{((6>B>k#U?V$NjTy62dX``&)D0 z23_Z34Zocy3q0Me{{U&6ewedWB<5|t;>%;R#-IY-Vn=SIH`!+vWC}^(K6w}*v!FTD zSa5J$*3D@h6-#S@h#Hgw;Ipf!YTAR)a|IyfYet`?zD_s90Pkb*SJ|K9A6|qKhIZ+g ztp6O0g^OvWgmd(sO#=AiW;2Be*xvvyX}bT6JQ(I#p_!Nhvy52wa?Y5`q;^gFBdsG91InzlmtL$D1<*xY@f zR~t`=A-09Ply&~^Ojf+2CN)yBaTs+6KM>cw6rT8btW`BU~|w2x!giC;j8 z1Bjvh$4T|cLN|Rxk!rhV@xLD{fp$Hv2ALHj^|s&x;k%7>Pav-ubka29sX|p9O=2>~ zaSHVY>-wuvf_EgKU$VqKAE>_3;?31}WRa>iS>zbz(^({wcd$=tgED<_l#5Z|nFT>x z%OXkkK>PK9=O)Z}xfDQ($fXE$^MZnRf;-(vnWP#C2l2Ji&IMx0duP86gv`cUd;)Q7 zX%>lnT=Fk|$zc!}9~2(N5BAz0^OAx?U$n&j0ZIG5ekF0E-Oq5^l|r6}2lJmS(zBUl zARN$(>J{b9hXT-kTRO!MAG+l#9lw1xxUF- z999b=cY~bkhXe+xe@f>H9!=brXJ*FUR>!!OktgBK%CM?u85LObCE?0CFGt^sH{Ty5 z(Zt|D|4ysp6iK06Cp2o#?QB?^6ENAERhi@JG(As1f;K!>M8xH+?orXu3$tgBUnYlO zwYb?V=u4w?c}w7w+VB8T-dCeMV-F0PDCcDVA-ECBGoQHgr6+^|97|UB;tuFyqMv7T z;aQHRVa3oA;@hxO8hrYe9W&lyype((^eehHf`2fA0%siucooIxtYJz{W`QzDPebx+ zc4MS9_IJKd$xt^a&3pQQfU$L{avw{ZXKdy9-gIkLxKIWu}2fPKoVo4^~= zfdtgRUweUwY#H2nrkeGVwj<_KH!-OeiRVV`hi2c)11n+T6XtO|WP{yP1kSK40v0K1 zpQ;p8gHI1oKJF|GI6S_dTt4LuWX^b+Yq!VEGg7D%{g8D+$MQ-;S>|<|Z zg*OjZU%r;gmkhw;Z!Uo41cdlBnWrk{-1=(FZplsEDIH8%a zuKbe`2ispZmqQjc$}RPWuI!xhY08AyZXt5OOt8=fzKc#Dl4}~o7DHE>-hG>T3-xi$=$Mx+j5yi#Nv#YNo%U!yIaNo?4kPEf@@G9Qnqz;Za$D z5~L}kw()v}UrFAWY#pJlyD0TNTzq#=xrPm_mup{?9eXt;u}$}Lz6pm5`M%qPx7Q)( z^UUC-_h>kT3J*IhgcSSZ2N%h;OmiS$Qn3w-FhvcQ_TOM6A(O^<157&BLndL|^f=S*s=2Bk;er+{+|N9~muSO=gx7bggZmT4IwmAxCye~XV(@lHC_GYl3MdL z>dAQNv94c9%Q(78v0w)$a5|>nFNq)efgpftM2iQYh8~np?*6^;B@upJK#5XQQ`_(} z{tSp{(|B_q0jZ5*dV>!*Y!&=5MuRjXl}4}kgz2neIzGha!60lNz?or%qpXQB8V;J@ z$+$v(PYr??mUr#{JUK645HlvTA=Yf=t4$ru@~iMedvadrfJ<`y8vGuKdgjSz1SEg? zWl(=^r)S+9f2d?b3^`L!Hg9)vL!j0i?GYmnDEf*xSno z1<52bNQ6DEX~Evz-Muo`)+W`;lZ;H`(q8YUcYy^5KkfYF^V|IR|9G|3?$0Y27#!wez_ zEo5P(4#HOn8ddesdt}4GqtZIl)y4eq;d8XAc70x7lha*7o$^c_1FCCE{{gNjdZ)J? zw0q`4;U$HvXHtC!Rmo5a$pd#c`PJ_rT4IReKm!Zs3o}HaCSN$}V!~oVobsK|z4sCy zD5=@ro><&ZReVHUNq2F@Kz6=a@AId;F}j_JK{=>tDLWOFc(!G@I&%fiEXa=bRFqJR zZuU*FaVVbJ{&=(Gi+UeCAJISJC;vDIe<;rTd0qngzppQW($kJzey9Pv)rG zDD22{QIuC+8hIW(u*!7Rn^EKzM9;v`2TaopSBxeptg8b}mTM1G8dUuO1Sm#aQYM(Z zJXRW$fq{V$Aa6A^G`Jqj2?heAuKOct%xO`e`8Gcx=g&W=&HR46HR=qO3BKBRWCOU? zq?>MXOnWMto2mYt{T_IIv;7*n`xh9gLZ+yw2>+&I@8UABJ6SI1u?1)6tc+}LY)o5p zoi=zj-*J(!nTu-ee}u)V{)&Wg;JBg`Jvw@9e=p^AIbF{9tk}D)6j>kD6)7!T^*2W; z>FIP0hd&vY#7!1MDt>(Beu6%fw2PAVIL7^-FcG@!P8I@6TQKG)i2jui&pwS^2Ggp8 zgXkzkhGb=XHmK;a<}QipA7@lP2vrLUIZ9>83l;l^5YWy_5#@D~vFyy+;Ke^*w+M8p z#FmEum0WmT07++5vlG{<=T6hKB#zn(O?5eQYo1@j1%sP#q7Y|k znsECsd3K4H#dfwaI`Y4OYeH_8=I;47O73n@iiZDT9>|LSJNd@d)R1F~{YNH?!LbDL zjilgILWcj|;j7<}rq*fAFSBv|CKlMvLzz*e7P8CiixY9&IX~Pu2L|K5Db>he<>eh=aLTL9UuIt4y40(5kAaT}B$zCstmU1@v8hUes<+#vB|98uvutlIC zN7W++oeo&;+Kv`DOG-|p0JfKmPyADYGq zjbQ~r5Xz93((j$TSM@rF2Q5o+7qex?Dp(6sM(!%_K#Y0Q*vV+ zJj&O8^}IrHl(KQi%W#w{%xA}-E(%VIeXIUbwkEi8m-)v;tX;NasD3`S33Qxqf<$Vh z3z0puOW(K#>j`p6M9bK;&AM+iRgsQ)J{nlae>h5{RH#W3R~s)vsZjxVD6$d*pb;o= zMl98qlH+0%EEARW{v@F%;%-88Xis{0`if zx^rXKd2DMLHhq&tw0yguBvBf8dcGRY&BwRZY94r~6!^=dpx2?cz28dhIKbW>0+{Ff zW?48!f%zm+wLw1};6%FIR1h0;U~E{U^JR{Prh$4S2BUr_AEHM_zBbuU_T&<~&)Ld{ z;AJ^UovxkN>#3?~Zh>}$G4z7NkcdGqlj2_@yGwTY6w5on@pYdFi0L1HEZV_(Y6JGkLGuS)Yj-;q^DA5p*z z(!~k0vzT}W5E$UjH74a&oLGaSPep5!N)U?wD@4lyrOZgFJwD}<;gv-#X5GigDoC@y- zN0_rlZC`s9KoTa|o17-eRZ52WgAWNefBYzHZKWHNIb(=sa9Zie3$iSOXY~X_OT?MA z!ACg~{>R+GzzpwIy@E?hbH5){By6m#QHg-L`>#9+Vb>Z7cjQ{J{SI)kKnolGB&Sd2 zkn6u#9~Vw8oKREka@w7YL`e)>knc`9EjIPx-`N$lWlkugS$WOdXgh&RA;eMkXTO#X z`0u8Nuin|aNr!*|RNXiP6*fCEfDiEyxEn*>#f87~^&m$^NZ_lO7C&HYlU$)%HtM2> zrX!@_=D7UbAFj(>G(BPnRIjjY4AATeP>LcC-K+aq4`!#PR)KLOUxCjZ&M4(whuGSy zs{N=G3flGKK1txmhG87%ngEaUMW&t%V|&o`T#KI=^>9J=ng(p5t;Ji0FK~=J4JGmV z0-K1Kq_Dl1P|ADyU0XFR;NQ?SGYh%KO-#&2t^MZtgsaKxbRZ}cVE2H4z@7CKj?3bm zZ}eQt=yNu+fI3bfAdqZz43p4zbjTyDaQ}z2>XJk;@Zt3l0Mxn)}_L4WG_`d1{z% zEB8`Z=|vs8p8G6)WhW%#qI{@i*9|*J4vVA|B$YV^MGM*^wsKakI6Jk~aiBMOl3qNI z&AE%o^K3Yfs-=npP`w&WAof`+4%)`sC{nZ^>|A(?{=jhr`BqZujrs9Zxfj{g=%cB+bM)5m8$X zrlvHfv$|}Me@nzFLgw)wOKi9tIfxveJVQt53>(R& z|0&JPgHE{0cl{ZT3mN|n^W#I)=F?;Q*dzJ}{(cqMJt4er?W`CrX55pzbM5#7T7%{r zApZQ;DBC;)-dR_iUih?aaWU-r`ol{vV%K5~@=5U@r+yU=(5D(-miC!?K6X%7|Ew7( zTjum^#nq>MdwX*K>X*xtYW&hgp~r3o$u%1bVRsXp}-Guv{&!EELix#N8DTS6@z17wa^gXwHsf ziAZ<~xyrw>yACDCV~sTp+g}>&M3GO(LKRu`H(CAy6V4inqW8+al>u=v$tB|*QJ$zz z(~AcXR>qf3`*OkNBs*smUgbJwsOb23&z2}N@p;#Wvu$SzB_-??e@aXLrlh3w7y7$& zv{P|>jeP0&s{6rXnvHKM6xuwZlQGELsZmdc@zcm93a{OgJ1 z!4NssVvE-{7LU2DY|TUH#jsqMR7qlsX|JOqUYe1# z>@!1XXZdYj0V3LvM*pciPBsGd0VzsLr` zl+;Kf-`KzlpnGVvWEimU56@?Ee~(?}g2uF2sro72auda(nJ{~>O;ClKDpFA$eDtZX zX`!UL@C^NID_Zu7rRMV%oz^6;66lXg$Yk{=uRjbL+8Rn07P6u)OW}SVFW$WuAazcn z=jHvG3y#$nrvG#xZ?A@>mHV=*s|zG4`6VSab(o;$%@KKiF~At`7k8eKLG#{Acw+xR zDsl5awpCpF{~!C z2-%gGvrt&Ds$wvhKvgh-*d@@j(bIdeIabhy|4%GWSIA;3H{Su-i=dGAA3Bu>%AIS zENcUT=yzgy3DlWK4~eHMNvGT5X-t!H@}WE`Tf|Qe#MaHh{5pi<6(W9P`=gUdzd8mseyN-@@M+mU&VXKJ$Gd&|l(uP9ABXD+4?IrVYKC zex0!)-n@wr1pMB}kB*DcpFMbtAvU~AOYOO_5TVC;1|nBKtRcri~V2Dm3o7Kkms}vXapX211f~l*PP>a1wkm@J-dB<_Dp8 zcj_EYcYJr{Q=>*|{?zf>LX=g}eRFNFW}uN8ZQjoqHChedWXV~2^*;J~9A;jY6a%4K zBXL{^{_+z|&%lC#7$TyO|MLPwJ`(vo@Oy!@c;#mUNH9BO+`i^|?}U3DO;m*-J|RXn zynp>30>fMt1D0zMjXQjV1yQ`OWG(<3efgHCU4=yxaLcVJ2;TyCj`Z88GYP;lDU201 zHJ(3bbP-q6EQVG>irzK|kc}%E=MoSQv~*lv`iqj27@{-EK7LG32un*%ohw(479+E2 zL=I6?($IJ;IAiW9MGgjh%1KIN#fy))=ZDF4a#Ha&d>GAPOh^{s^z%93P8Tsqof+F@ zDtm1i(*6RWhfu&?T9oQy(Vd?MZ}mneb0r-9#{m1qS=|9}^As-v9?KXLIDViWl3bc% z;#69p1QB|=@%R}Tj-z~t^Gj(4&mu(QxE|NrqLE%JwM!5Gk)s=K|5Qgp=Co=AE7Dv% zfI;gB#o`rzh?HXzVu-gTMjrijJ{dnvBKx54cSh91<&S%d&o<1x#f3w!Z2NY^ew8PC zxVr*~}QlU4H zIuSLBhn(Gb;9!gR;9fZ$5;B}3O28T_*auxWNY%#$IMePsr8?tBbGNDBj=qYLpctCk z*Ks#De*|Zy2QEto3}HkUJ;~`x0L4*$C3^F8Kge#MKHC2d5i8hils{iPe}yTQpg`6PP9dx%xJA-P)W8-YU47c)fC z%s{tquFSUiTc;dqSw#OTWzYdP{7x9&ewvI32b3rx#jZPW0M2p>lhbDdC8O}yIeKm1 z$g0^~{VGn?UH6*&e<=IPuqeBzUBOZ525HH`p&7c7k{CLqq=%4_QYitY8F~~35T!vt zQb43cL>NL+LKNv#y2G|`e}8UEeCEOPg~&qMCphi zLL1vCh1QG|_3q+sLm=$;m=uNv-v&D3O}Uu(eQ1V`~sUad|VqS^k?Ry?K@b= zbX}wT;3hGQI%_0S1GDUZlse$PaF{0WumY3B&yXAphp&oFeeFZY6#C=q|3rM?^L=ys zIcMyL*DNcYimaj3#nFK%60J42$PinqumT8AG#4#*(Ol+6X`@Un{uoS}UGo`U64U9m zZ`&vBuI_7I%HxA+!vPZBsPuPxFpU{E zhGUP^*c^|BH5O18{2JM*5kj9fn^SUhd>|aRu=*Jz`$v+OiE!=wPuYV% z-^ETqo_wR@)B18pRNLq!MH_~)IQ0;BNA0<~sn%KT<5<|Eu_W}nnP~L3wW7#}4;ah1 zwBha8JheuSGSs=fx)DHf9J$%B!HnP&T`f`t%S)dd_p z#w+Wi6ITX|n`OrDz>h4#%1?aF*#89x*B0WH$xx$7HP#jDvEtdrA8X!xt~S2atoy4v89hZev>N9Y9F!$eP=_WUq>mY zgGu9h8l88F`9IT6(mFsLOYZI=#eaIwere&Udh>@w;h8vjEp@HK!}huIMc_}Bli`8i zckkdn!I>J-#7Tf)`}YZmpC#DBE8&BGYlDGUmz}PA2TVVyOnuZ1?W0*QODj{vz#xxU zwgyAbLYu?iQi*`C9=)GfTCIwen=vHjiDnFtzl%>Le9?&tjdNG5WN<5j-m_9*I3L*M zM*c1hVM$PtSD!G(PgCj1fmo&7O%&2GPjq+Q$v9EtVR`T{w`U}J_r>wbee$`W7pKX; zG`gH?=}_-=c|}U` zNf!@s+M+`lee{jQI7277X!AD!D@ulgb~L@7v`wYQlEuf14>VEHl6r!I7-eK-6^R?=PAcM>%B zF3r4nfM@Fb>^M{?@``zqGr{_`tnG%2v_@Ve(HotdC#q6gJ~ObhqEmtkac8^%?LOi% zLFsO52q;`es9=++25s}-4po+W9V9jY_!a{C?}ES}Ml?5EnH7ae=3dLzdEr%2;Vi2yBZ#q=6Zg85*8Co5OX25~`rYA`XH5^vgHntt+o3 zJnI~CBujyN4e%7AgkTOuokfJJ59a5}VUPT#)Vlp%^XufpNZ(kW>3#8bXLj%URQjn= zwt~o<@O2LKpy9@5+QBTmhJo+`Qk*s{cA}Ap0(P19z zS;_ExCIV>-3VLVAlPIC>{^}oLS6qx=8BccEUCe5Kea*#vAVpqfrArYb1_~#tj6)M; zn~5PpvzR5$a&Se{aahF^uulz?g&8~+igO<_PbCpYIW!UqvlQ0~tp>tQhb?!#_SlgM zR;P@7$e3ZxsLLTLPmio7;c{kjUZb`-e)~V)djxrpj>X0gYi(`!Nq1{(6&?8m$UQ3e zRZM)}v>lnPcJo0&;t8XVvLi5`5sm_c<29{&)Bp!>@GqR`EBUOf3zQ6~!zn>)U*!xb z)U_#N4AWmKR0`Q5v;%mBZDuE2+fW(;E^_AQ)fOXdtme@-#5YVG$`AgvZBL-1#C2K?zucU^JYi@w9}p6`dR=CiU|^&riwP%Jz=BvnqD~ zk54aO{&n=_t30BSUz@M3>kl{ENqMNjzJ^(4HrNDmh%W{6(nz4pj)@ zvy{LyPa9%ZukT4upZ>~7%?|&Q)j+{#NMzh~v#rLfip9p|d*YWR{?02fwUo<-_ZX@1 zfqUXm!tou7*q^0A@NTvLyTuqV4u6A;RCM)^oG46)=0hoZ_K%zK;PzXN6w?K>y+PCk zmk#`{(rEX^_tE=b=yB?RN_t`|nI&v1{ltG(KbM!9|E-q#G4{*# zoanOQ-sJAtJ0E))9^Uw^uq&aER!ecGNGF9*_`^R><@DsXsh|)6!9Ty+y#R3WjNxGg zDAP{;-j60dW;9}%C_<|J&PM<-H8!Hm$U^|Rtpq|TmWcMH0rlWVe|n|9j?appzRft} zO=3`cH>ig-Q*lfn^ERB-T9Z`|8Z5~ty^=7irc%(?6#2LSj3M^ER}wAnE(h3Q+y%Dh zbC$_-_ji7t{n{`HF7zZ0oE8kua~Ju|ml;oTn}bh55efCn%v!jem)IMeyK! zmsR%4f=`D zP)e1>>-i07uKF2hT;O>B<;+US=RdObc(+evQeI}qk<;~eDW>x)rw37xznqFAm3RK> zCsoDYLSQ3wH@sAHtyw8@>Ga@&?(B4uV0VD%@ z8^}?(3MB5YTcf0BDOIMZA`h?XNPnVfqb$Zpq3NKmqA%g#kDy)Oc z5IgN2CB(A2*?t#+1$8_cDPdvZh#Oy8X*T;`V7I94_BJLhg13*Lb&V$}DH#!mj?Xw` zMHsyN#D%?8H$y5mg00d_@RkW;-)PS6o(@>ZeY+c7Nyo3|Z+PIyI9IZPD-IJR!vTR} z5uKt=h%fT=pR*Pby;hK$MvZsF5UNk)PP{3b*W-2R@=rUfL^T1BCZ+kdYF5r)0=8V;wly{2=)u^PqDqpttLX{Xw)#&hR_>E>49zN~j+Ay3 zGZQw#Dv8MT%)=44hhtp!f~=1GMw|*dVnc;2qWrX*HV8i69E*$%1L+9h(J|vm<5Xuh zl>g-*@1qcFIKd)73NlgW9+6d-pD~^UfZ-Dc#DP7x2mj*)r+I#VjLD!!<4q(7{IOvy zoA7S}a19UU<<%r7w}pQWt_Zze*w;w@tju&`*Vi99P{C*S zyYBVr_LIi;{%$pun{H;2biOn9G%uAfcKi{G?YAOs2u$UiQ#=Du%i4NRB&_p=#zEr9 z^k3o_G^ep?&l(;!nZEby{>`3Vf|eUa$=kbSAaY$QPV}>da|$~Ftr0O#0C#uyEe@z6 z&yr!uB8?}#Yg`EeC zS7qf0>6z&}1tLYaxAsiBb&RY6s^b8Zj*^6>k$DO&2JZc9(}I#O0g=xoPd57`+Dn;a%qh_c-1Oeci=h%N`|YxTy%gZSl8OL0|pb|Qcb^78+xWk<~Mr> zI4xrbQeEoz-v^a68PE0rCVjm)<(AVMqZB2t&2N&FgO=Xj+^;_pH|cKKG;h z+8+?jLZLE6g^uhPz;e}7Zrz`^?zH@TF z40Q%&^{_Awhl#cHhxGtc>J;csWStq(g0>Os27V-@ zaFLIHlEY-k=l~m+3U(^D8plhe^w`#l2 zkBmm_xMZ`*Ec8c<3AW^BKJ z(_0#jSLOX{wpr1f4hkJ54L7WG6j32XzO&6vrv2-gzkuDwZ2IMiQh%1>EgR5K zb-qI!^|R}fH1biwnmwAU@OZR2znFpi<#gQL@6IW!h|ah^dyo^6m%+88-rCxHF+a;a z7IqGOy}qeh97OT`H#-+726`8<3Bj(^8v5S1djRvqRxm!O@ZCtw_PmUXg}OAbz=F(Y z-09s*4Jk4l|J_5PJx-~9l3yw4hm4@~@9q8IW`N8`;&;zo;m47_2F5H4Hf(*X{Rv>* z=65_pcg|>IOOgwf3Q#-gct8HM^cl>8@<;v?z9q6EX+Nh|*ESzWI)FGZfFZI(qlcu# zOnP`c@w}yCL%dclpMYVYfb#U4*hKt1K*};PUSha_LZy<^GEmK(G{%KaoFgJT$0FC9 zm?bCbb%>FdM^@V>%DRd3^o~+-&{n$7BZwv_0ph>t8`1p;3*^M^Qxfn6!ywYs8y4a4 zd+W?saq@S{K>m&*l3=BZyU3n|8wEugU!~etfZ3OWQ2h&t%_E=k>QF)K0YeQ?qRt(8 zoR55@Sbhvj6=Qck+4+zy+NnNP$<<`Am;zPAlv0j<0N?;3XE>ady{DkYQ=aSiV|t9M zDJ9>Y(@a==w^wseO|zjL15Gw>>F0f^z`48$fVL!vLZZ^(_ww@y={=%c8P6GW5xl3V z*F4itU|JZdEc#)VTei#;fTi;ZPm1{}Y<^G`ao?~jNF{&MeeYz68&oivqCY&>2CQ?E zfB!dh5|R45ixD3Rb6|HYU+B|NkG@cEg{I^$3WvwA&dYnyX<;Ck_8Veya4?P0(|O-_86dVr4v4vtnN~2!ag5*N2N{sppcN!{ara5g(jqf z1GyLVDKD`)(>~4+n##%H5AfiZ@o+HxH03P1R&PRO?3NBmr5o=$xS&VZ+FZK23-g)Ri7|6ibDca0@{FGdrC#U?Z5!clSb081DS%@`u&Q+!YjC8 zU)A?#m7BrbKIF~T%=OhVaecsQU3j)Ql_?#S8Fzc;N$;RdeYw*@B+}N&;Cja%pnVBS@4?#mm zw=<<%(C@6U%Yc6NOvJ!ZAWPEgD&;M5xvfiZIJ_^3ikdp*#f$!|+py|b(4A%j-Rb14 zG>;Rp{e%6FzkE13RZ<>hvb`D?OlSJ_>jh9Noc+@DKInLNZ*TO~r9tV6iWl7jy0?9H zy48QZcp)zr?dzkSZlz>%=I+LmnfXm0AbMf2gUpU^wXH)_JfMYhA+A}*LyTXJ-d0DH zd0snV+)FZH1l*h@vm}ui*1JI1C=D5nsualY_9A|STdD5kgeYALf?<4(+XZQFW_2Txg zs=jsQUaC>dvJX(2&(`0(Co9%{(E(82rS~%>;li{+RXBUcuo-lhNTRRNuBT2wPkYUIVcc4jC~+3>(Eb!NgnF z?La}uyLAylm&IJ#{&gk~Em;{EvmWJzKI}6-5r;04=Chq%IZ2IMDseO%PE%7;TPyiV z_TTC~%Hwjs#L%!ulBP%(Jdl30#l~lGb2LVxI`E^clvGS^E<0ILAQ+*R5zIbDOeqdP zw~gRI-e62)RbbQzVlw$@~l4{eh-YQH$ii#`jFh(#!}CXNUT` zJRW0~NgPhaUs!Zv$c=9Ad+h^MrlKSLfCA?|vN7+V<$;{2x;k{#0MoBqe`&v{2V4t} zZrKJ?61eO!Z9M3#bd`yKp<}vc9HPo>E&^H#nP$km&byAR_1*w+5I+2i0+Q8})ub0d z&rr$_h~7?xhL4G8om47gP~(CinfFiBXoKL%QpD^PMbe0IB@n7(&8XR36d492t{1K| zrQ9fpVOPWe32FO37w0R#e>*Mq0I1Q&S?zS|K$w@ibAKk1*QRy%#ilL5rIw>h%gW|= zS00^c5@q%ZzDLEfoE!qC!B0RZ*f3Jb)i>rT^>}>xZDtN=d8-*1P=0-LH~z^J{9vHi zBvFhPDNXqSCe9V-)^YAA{O!p3)oVJuY$k}ETEh8DeXUQFMiKzf&@3!h%|$(K-9C`W_Heyz zV8*eam&b;Z|Yl;^`XCuyca( z;idn<0{qVA?JLbmOr3jDmBPU6XEzh>a39JAKHkSNhC%kL{$v*hrTzdeP!Z7%737Cd0}4Qh(eh$VgU-YKW80 z4S*42c6;#CCI^tan4&aa(?I6Pa16i|ShK|YQ9B*K+WeX{`iBa59q%V)d(D1n%GUn#y!K^7llHdKPadZ)!IQ2Mg$`hhnOiWDJ+;>Rr`u4VEy*nPvRbeM334mZH z5mYT;{-(P`xp$qeu3J~uDVTYuWwE@q4P%wV-ao9upmezhEt1Zh`@ooeny4ScI|<%uKO#UNJK*FSd& z1XbO?K+w=FJW)njTb+^#n!Sa5Qsd1AW_Hc8Ve?}ga@V{fkp!JWs2nboQADQ)$ZN;IG~BKoATCRf7ERDNbl2t=hL z*bKYgyBahInp!gWw(N2u{pgBZEM{V)fb=GjeBKuOP7nZu-9NlI-TZvAzi$3Pd4Z_Z z`DR}XoLwGhk~3TQfr-X&yILT{c@R9=nR^y6#8d~2FXNouqgQ96Otj9 zveI6}9`8EYk39e0c$8PTva!;Y6LNcSwP*-z;|J_MNxNN6%NwN13nUy}2b#HqiM7H3tt z?s{4Ujj3tquml|$+<7SUU_%atT`dGSHIz%qix=xm$G^6w=-5tEli}6pk~|ejArORN zm)=)sWAD#WK-IqL z*K-RTg0hy+7nao)oRS?1Iih@zekz&kCj%`7#*vX=9$CY%Nsa$Zi-#fN2RjoQvao(+)-@f1K4@P*hnUOA+NW z1>&c~$Nl<8RJ5Ezv%9Ejf_RHSdZqo- zpK)(|x?WPZ3h_7AB{A@ z7Wojf(>3+J41>g_C5eMr}YC}?=nh1(U7 zn0WPfi76|0*t%AqTXs95xH+l+2;%x)hM@1&#T5Rt040tr|At^Mi=|(Lih7CMQXODV_`^WiYdI6H&s@-m$|rX?T?qb2y=UslFAQtnwfahZ)cYSI*TiQHdag zxoI4CIF(<80cAkHgyG)OMsA^{OA(0R)E$2CQspVV!4W<3^QYrJ$tH)QQ&vHJ_ zs+zm9r%4!T#p}xlF_N*$41{J}36N%fQ|EAp6pT8>wi&q$SI_U8HQtxtb1RQrJD*ve zQ39%aR;^2CB4v(#bkOl+ViOaiiT6;Ps5MZK7?dfYlPM&oDMS?9HU#xe&<6zx=vd#t z42AmlI0z!$Lwskyp~5U4 z94<7l`5-x$95sEWx4HJD;RDz(sugAvrY)+t9i%0KJDBhJLodqd1Gu{PpYC(y?lR zKEd#^;-3JhKe&5+Z8`4UT!`(?3H@^z>YQf7TTpepC=?nC^!59)xe7XRcYCBJEHoCk zMve6BW;-Gg8yc}5;4~K%lmBA5>puEzYHHvIJl&>g*cj_#=(PJaq$Ec?At6jwrb$1j zIVZL)uEr37F>H^}RSOVN>^5+GeYvFtht~g#!E~+nZ)EN_sQ8)}lweexHF>)zubiIc z#rNj)ceaZh1;xc8FeXp-nXJp=JV!EPwZ-bw+UgA-!N*?~CH0wl?d2^<2{ z_R1j)cQv0aSUgcG=MXN^A&wRTgp2vN1NEJDIzXXPWX-dCjmKe538UFCM6;#joMvvIor$60og^i6FwE~m@HG%v023iY<3!5&$)cUX_z)oV$ za};nq(4N&_Fj8?OVmL{~Mxx|H?r4;z? zl4-a`ddn%f!~O1l7T)eJ>fYXX_sCd3X2z%c9&qfWOkVtc+`O3?-?HoZhf;S^!ELGT zRVN|RcdF6#FB_r&^)|T;ab60|E|*RC`jw2|ru7oih-mVm)9Ju@NttYdxoDBy5~{Qt z%lKw$=k`nG=VUi3mUox?F;NQ(T;HyC|Hk3FzD4Qs(m@6Y@t{b*ZOJHu2Iwtqr7!el zQ|d3hx*a-=ma?O?bm<^@#CSq5YN_2+iFOiotc%{&^xn(Z);({)XmblI6bFKl9KwLb z4nH*MjOTD^UZdA#AO>a0l_h7IfXAU0x5X$^;5t&X@?}Xd6B%0?nu`ttPMWix%nbsxcollE7a}9#ZMWAhAX~Ah1egh z4vIuOzS7LG#sVH5FG@g~RJhzPo>ZYY83QSPDk|wZ7XRlh4DAxCBXIh0Vaf407?C3e z0!cMbU1*Uhx{9~UBBn&zA}F<1HYHl81jrpnjwCpXgjm3a4LR3AA;cqSTvBKjh`FpO zfO;X_uN5%^N6v?ztHE&ZunNVceniEf zwDx6%CsGJ-mMb^~eu1_!arlszMN>x1b}F23(6!3{X2jG>P+*W!HA)#AYHoFBOMWoE&VWZfq^xRMrR*kiJOLotS<55)CDws@ z*ExK;L!tV27ra!m{J#HQ$@Cx29AZ<7quRNj*Cy?jyBWlBnL3TC|I3Pern9DI>{4z) zQQ@55)tA2atlvKxIErS6`M=3hBsT57nIR#^c~|9S*`_%a_0w@l#$a`suRr$t*IDLO zu);8anx}w3ss2`9DB@otUhyN&ST=d`2p9Mq#E;${r0iA$)>O(z!Es=PEa6H8B)`n2 zA7|0+cV-YUayn|Z)n}X&!F+$uvx|cg*p={VcMBJ<;=T|Qx*|}1G#r3P9FI+$q~Ur3 z&&_$xX&_zK@ZOJ0s<7pMm3fLf;C1RMPV%9}wS5yW@gbkQ+fAeu)-K|%C3?CtqzcLp z4p;6BfbtL|9H=qA$c@MeGnW*QDd;If8#sc$8o*12Np7)SrNCX5$9fML7}9Cj^J|0{ zSm8@}$DxOjIZHcD+RB&TH`UXFY$EePx&jmm1RV z7JYK1fCDS>Dl)5eI9Y;H;M59_65FhFC}Nx;T@E4h$yW@pox5VGt)JNNosJA+`n1EF z=!9wO+lDI1{A(Po^P0e$eCXlOp@W=J4&GzPbIf=pqWnyq11aUf9Svv55zRxV#Bu{q zo3F%{t)s0TcMTS$_Q{KN?SRnSz7S=^bjq6-b;x4@6GfplU(qI79{rgNB7gKPZs+%( zch?%x+M7C%@OWApei}T3e0!8g=2`w9Ns;5vE~r}$GQiJ z^Cn8-tog&jMzycM(bzovz57S5_G`JQ+d=vFfgBU3kR<`Zx;-)HDmZC2tEWVU3XUb@pt;u8?7I>j_$Us z+v}sNr5!g8x$U6qqo&+FkFkynstgD!e2N%Nwxx@D^z=B<(4=m9@o=29z*N*FNEgLT z6C0n(7s?_Paeg&FS|4lFPvU9p#d|2fI)y~3F<7!@>7~AJYwEj%|BFkwCwGzb%ey;? zGPW(6D{j8sj>sxC(+t(N%st87M3H0U&eK@=x`o@c*DmEDWGliAZm|jA`)_z*?yxOZ zjnptZjrilMNF#l&a2xx(@(N)Lp1t+Ip@d#-S`~gw;E0?+MI#Pgau5~)O`6~5k!5Yq zKMbfcF}2o}6bfIvZ2sQ!R-!C&%&cHJhpon^^xo3M`nyZ`6dFnG1<}v*$<1DJ9|%NX zBG0NTI*kReG}iD>pS5W7NKP#SuXdr>2HC<(PP1MQ2PiP8Vy<4tykVzc`xysU$lg{2K2;JTKzF2{QE5^e+Zt-LYEV;oOfRD};%|-+ zpW3I!QY)b~gTpbb5DN|4JeA(+L+nu5c&|E>Yes66u;yxY6ufk4?)m4hrLXTK1femu2<2x`Qkxq7s7{7rd}=UG zT_DO^rJX(O=2K~X?=`^AFO*Hp*ztsf-M(Vgh=Dt~&;C;5yk4|Cw!dJCmcd z(uV5WMK&>f(mJddQH+ZCp!_QCQXWY?9v;D{j_t6D_H!fkw9};k!)}gj;Sb6~0yS(Wqv?!7V3m#NAj&q2D*4681Uax#k938a#w*5 z@xQxDfNk=6{U zGa+C0nFO!;KmE{dRcv!&);8K}mnziqtw8*KtCS-)<77S;?6)LU{DnVf(!D2^j; z+rEpYvrOqB5+UYu57^kCc2vczetlZTekuHz61+`79_o6jbQ@-n3c@B#iZ>54IyVi- zEUIz)o;vmWdjNe}MQ6lKQF)8sVM^-+Y}h(a%_W6bpm1XOwZf7o==Zx~_nIE4&rHZ+ zPlDu+n};)@q3kXjbtAepVAdDe{`ttu3uD2i6^;PFoPhy3jDYPEFf@$!*G9~P~D&NrFDmy%V;QUHs}#8cl|d{zV~2=o4#WD-3OR=f26+zB)Ws@ zFtvz22ZpQ|Fkw)(yfF^}&rPX)H-0cJY zrIzx(w*7S^8tTq#oZYkZd^_tV?E{YDzKDo-B=`b6V0(71WPaQdY~E5n{v3LC`?zK1 zR6d|fG>4rxta({}GvylVqxKjv-0+-5@{6D33*>*c$hBMUdViwb`P$HGVmunq=fLWq zN_Sp-c;4l87IoaP-NnR2p6(U0Zn;zW=cLkSE|w=QusnE055?r`;S_t*=#TvfCnQjv?cyTp=7=chzO%6F zM+iy3j@@@+ki2py43_P2rrK8TSbx1MqPS10shKRCi~_jUb`AmG7+&k_fF;b%@t08R zALqXxGJT%GZ!_90 z0^x}!tI+fP9nj_Z9>cwMo;Usn{3vZZ>NsEVgp>1)ODOMaX5T)Mt}L}H$;5(|! z538rRM56mToUH9H*}k6NVN_3eGS`agWTI! zvadJ)yt1?V@{g7EK}|YFq~vCSGS(<(heq`3AMI}!0}op{L7g=1tbgV#!DS-l@g4H4 znd28TuoKe{w_gVJXj|Ju=sdK)-E9ecONsVlwe);fNEuo82M8R*s~ZmoxJsoDtPUkT zu44{8+jeRW9#gTMQqhJsv0+DRW%ls#2>7Fw`p!Mr`C1%R=~Xd{bw>%WTA>U1;yOZYOxrlQYn2S|2uzW2$k5gcRA|jUOM4 zx#-fjn5t2>*nF;=bjo7*LPu*Rb{HS{u^CvS=noN`;6{9F8#s0hcq^hWk5Svdht@|g zcR{yJ*l#cAccjG`G7cAv--{Xbx>)jJ^kUl|Fi?+y?@untkqgvY)dx5j&cgC5X@gz_ z_OAS)6K8*WYL=$s%xcCYwq5spfYmW+{EcPuyso)8-QYW(m~t)-PktW3FeNO+{g%1> z9ol(hzMUR#hD#9dgOZZ`U$3wCQs-z%^FI5zp%5#n z!En9tD}!n^Uo3OrO74anZOT-*7#wr9A*ocGSoxLf*Q!T|{;rby%s6)Wt+ zs1pm%&w5^-X;uek&a0mq8K^Ip`9m6*+)hCpH);)Nvaw0Q5im?g8ujHP`tH8M0%{Zq<=buE73 z1j&+YS=CY3A98HsJuA7HuNf*Xlu%zh_AKY9lZR0z^VOY?ITuGseniZP2YBxHr@`G?ljYYz>D3NLVvbz{ITnN3FiE*I!y}&&l2}HnoM}NJhC!S|2Cvx zb2>GS_5RGlqZhJfq?5>^<5)h1NTXpbKQ7qHHj zCe>-NHRc+U<7HGRAoQL&sBd5hSCzLNEn5U3fN0OdvE5EnqhYLiW#CvD>UO-s*I?1W zq$tkP>j^~i-`r~xdWQ0Tl{Unix*Ddad@LHhtR8uT*5Sudmn5Ue?G_JXnxV=sA-{dq zt&V|wkW;hS=ts3vQ%a4t8xJPzc9wxAl)BXLVDUJ(q`U>3w!eDW(6;iK9PhsgEZMur*ew@!s z2=X-_n8XZeX|65$TpTa=0*wk}>WU|5IYA+s-werVX$|*I9=5FCRcDj_8FqQ0-|KPh z_Mm~C+UeMtC~u<6STPudJB8ATq~Av$|C+h*7>N%2R`N4H;GVJZ5Y>3-fpe(SPM;ib zeG(jTOA!G-c5|Fn>2&7G@=~oUIZ}y~L36V-J8-SENIC7I9NFeSEn~A!H#{v7x_>7W z*~v>Aa5L#{w7649r&QfULHci=9^j}dVDh&>;J*Q!%>)BvO6%1YdI;}iR?C6v;$%R4 zDk8vUejGa>}qvmKCM=x&b(!6<|X7F2<{YTY#s3o+47XxYdaIh$2eL=1&Z@o*< znn%8Uzsa4u$d2665jC4Tn@lW8k6FAsDWQOB$v~T^6}|dNjT7Pux9*qT1>llClqHaf z8o1uNb%k@TWF>E2pHgdg*hP@3KP7+c*=U*i=R)gSCz*kZE6t-%og2PC5S^h!u8D4G zs$wKrf?hIv_+TSGrb}RVdndBtxP`cZTZl2p9M11fu!5yvGYfI;wB>>IEkp^u)0u^h znDW_LQDmfC%Iib@l<~_7j4rtzyYzTyE00*HdC*vKxS%mJeR10Ni#W1STrvK6;tvpe zsH!oLZW~lG_VeWTJQ1(cY_T&Y7)s{YmoV_66VR?$d~0$xI6TEW<&t<^;Aurj*OBKn(Agpy4G4x>Ntw2 z=5KC9y!dP={S4B!0#dKrhS&2qMH zqGnzhKy{|N zwd;2sm0ufA3{k*-9hTP)z;}%|SuJOK=JdChs9zpMY}8w|RY{1e{asRD!%8aB>jt+}LrsUe&WD4<p~CV%SO80bC*HSgiGa5^YM;Xum<0cQ|5A;H7zpM1RM~!m z%t3S{?>;r;9-IE_)&;JG7X`|hFTaeFNG7k0M=4FJwk^Rs((jqwZ36D~X*^}hBT>H^UQZ=Ft9{UGa7W7;9Bjq6wpDx%XkC;0D-eBVQ~VbSJM9; zvt;@_hg~>RsmG|x+JZ7kOfVR>!k*T!N+f+klLI${La0EIA+4PQeucmfr8KQVoQL?_ z7e1@Z2K)E>0#sxVm)a}ikRFVAw_DfsyVF|Q+#jG{_GGy_8+*b^ThVA15ljvhNat2N zL_G+^H2&Gjhr&WPg1wx-%UN`I^=jBxsuCFZ8lEVu`Xd@*oW2Flu1Av{&g z#T$9iXeFb68Oap<4?KT+gwX1p+*c$?qvSS3cdcn_94&q2o%Td>;2v)Y zx~_!7fW0E{;SW5H(`1?h6unBp#J+VeTeuD9g33hFw2mhDBeh3p~$GYXkpS= z*>{HX^_DSW5kg~CO@4SFzobBNTrLXuTjj;=HVO0^9)Z~Hzb9~H8apfsQKz2xQ{WTH zb-1SgWCk0D@Vo-$aWAECtg|C^#ipIl!JZ&;6Y_Hyg(-a|=#;Mm%hbnAF9=EH z_oGyz{H6GDkv!zE8a5GhPw%u`a$Z5yd3W3Bw^^U%0Ab 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 X1eMgFv*zOY00000NkvXXu0mjfx(IXx literal 0 HcmV?d00001 diff --git a/src/main/resources/META-INF/resources/box/publicKey.pem b/src/main/resources/META-INF/resources/box/publicKey.pem new file mode 100644 index 0000000..2ee60c0 --- /dev/null +++ b/src/main/resources/META-INF/resources/box/publicKey.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqzoDJnhzFSdeTxi4d2hs +siJUVymXCayRpE291Dk+5hyRCGa4XuzRNK99naqsKha7Y3qL1NWjoVmf7JGdU7t2 +SCMkqO2xH6T4dSoqp5BMVK7/HZW+Air4/yJKVRSCbbwL5NOLb66VoVGJPl0WQb7z +NNfYocc7FSVWIyPPX59n+P0dJiA7nVKYVN8wZdSEMerjkDQLmiq0aB9rXgIAzDJl +v8tZliNyaqIUfSCn5qFiOLH927qIxux3krlpqvwtz4GhkcAJuZzLt3wqegDuOWLS +B7xogjr/j310W7byjDbvlUD06cJ8v2RHjLPWNza5Tfgg9a5Cdt7MbheIQugeKdhU +rwIDAQAB +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/client/privateKey.pem b/src/main/resources/META-INF/resources/client/privateKey.pem new file mode 100644 index 0000000..e3fceb9 --- /dev/null +++ b/src/main/resources/META-INF/resources/client/privateKey.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCcP4nrocBmpTfG +phII6beQTZtn2wvaQdDe7Elw1ydyJLmTXXDItfx/eJOaIj+1gDzjdgi2qHIJBKPt +gM1OwgOB81PyrB5tAtw184eho/fCl2mgI4b5Uuyi6P+P7MU2iQ5BZbHcNzqluo/j +p9IXf0L5XKHt7jYukQ8s0m3A/rL4mGBJ62hOstY22XaKzHOl97CUs6P3Zn78SOsB +AsRG6/nGTDV9/P821yNZHsvfkvI5Ugp1vZIrJVKW+GT6V7L1VDZQDRkLWzRE7Ddd +UBguCiGrCCkwpDlN0nq/7qzZeYmi/M7RYa8cfI0DLDddNpawt6go2n5vO7EF7OXP +tZ10TwP5AgMBAAECggEBAJQoq9+Dwa2TfRAg6XkKJcXv0SzpyJNtVWINLJaTbhQO +Puo98HRiHMvCyjOdxkuVDieiBSEvGPL0M31CZWwJDMpssW2rSC6WR7ng8vuTP5yF +duMizRoeR8UyqyMOoPLVg27/v2fR9wqvnUGCIPWm9xr9e47iEv6VDo6x+uDGo26V +k1xn+m4FxaDvrYYWlAtmoFqyFotSbYlcIGKgtAIlV/d+2qk437mphvUULfN3g1uG +ELFxu75u9q/yH63oF7Cn9TODlXacY0leNF+xbpXAD+JToMd6p9HFFA2IsQtbkYOq +JN0yrUTIaNx15vx8Ri4xFTYpyN/qxc0p7iaXflZpvwECgYEAy71QHKZL4rFGDKBY ++FiGJ7WebjN2KKOnq9qfeeGsSmZiugcNvo/n8F5nQIewAzsEThtJWqbqnIJL80Fu +pfX6/LV6UhkIR2GBoxugyqrw4WmGUB+EiDtInfbr+8B6lcAdnnaKGmkXu9TLmBnk +xyKgFAK40IGR9AgG0XtY8FHUau8CgYEAxFOtqBtZ0eEa3jnKpAcScSNKhvqbvIa6 +YnvN+VANfBvMJI9fh11WzzH4hT96ClWIFTym6hHlEjq771lwRylFCDBalWe0Xhm4 +oKgWVFZZsG1jx436liEeI6EU46KRKDkaFB1Q0JVhdyBHCMb/R1bDMrO2pKkqgXDq +USnkTT3/H5cCgYAIXAcqdcRNU9q87+NWpUMz4+bRPLlPZ4+cpIbAmHraPqM0YM+2 +ju8EVMtFwYt+RnChx8rVtl2P+GSnYXrpwlL/BW80aSSG0UBhcePCDQt/JDZHmVN1 +x4DuQlBibv5YoJ5WfySheshng46q+f0CErCgwY/VtktHyQCGndoDWkgt7wKBgQC3 +Va0FHwVxiNSeUTl6k2AVZu9hvQVRuD61WQevmaH+E7c/LOP4dKFsOy3owK4mmFjL +/CeizbMsosx9ZvgCe/eK/hyZCI7WkQ5oeI7hkwGOT5it8Vfgemy6uOHY8Sa8eRZx +Ui71mYm6xNmQyMP6ynreDhSxD4gx+E/YG1anCw4DYQKBgQC2XRkRbPiQaBvNXMqu +alQzGZRV3W75GhP6FWorHAzv1SLynwm2oVhXVs4+6WvKd5hdJO/Mzt1R32rlgEIh +R1taFVxYWEwZIadL6oxEGMrLa91WSLwpzHKo1F3nYTB1wOsT2lfvVCjUckYZCGnm +H0XRAm1uIc7lyfeLAm8rfvaWAQ== +-----END PRIVATE KEY----- \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml new file mode 100644 index 0000000..e3ff564 --- /dev/null +++ b/src/main/resources/application.yml @@ -0,0 +1,336 @@ +# Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Configuration file +# Ref: https://quarkus.io/guides/config-reference +# Ref: https://quarkus.io/guides/all-config +# Ref: https://quarkus.io/guides/writing-native-applications-tip + +quarkus: + http: + root-path: /space + read-timeout: 60S + limits: + max-body-size: 1G + body: + handle-file-uploads: false + ssl: + native: true + swagger-ui: #### 上线前删除! + always-include: true + quartz: + start-mode: forced + flyway: + migrate-at-start: true + baseline-on-migrate: true + repair-at-start: true + ignore-missing-migrations: true + hibernate-orm: + log: + sql: true + smallrye-jwt: + enabled: false # without using smallrye's token verification, we will verify manually. + redis: + timeout: 70s + native: + resources: + includes: gateway/**,box/**,client/**,db/**,image/**,smime/** + rest-client: + device-storage-api: + url: ${APP_ACCOUNT_SYSTEM_AGENT_URL_DEVICE_INFO:${app.system-agent.url}+/device/info} + account-api: + url: ${APP_ACCOUNT_URL:${app.account.url}} + ssplatform-api: + url: ${APP_SSPLATFORM_URL:${app.ssplatform.url}} + psplatform-api: + url: ${APP_PSPLATFORM_URL:${app.psplatform.url}} + file-api: + url: ${APP_FILEAPI_URL:${app.file-api.url}} + radicale-api: + url: ${APP_RADICALE_API_URL:${app.radicale-api.url}} + security-api: + url: ${APP_SECURITY_API_URL:${app.security-api.url}} + appsign-api: + url: ${APP_APPSTORE_APPSIGN_URL:${app.appstore.appsign.url}} + appstore-api: + url: ${APP_APPSTORE_APPAPI_URL:${app.appstore.appapi.url}} + vod-api: + url: ${APP_VOD_URL:${app.vod.url}} + system-agent-api: + url: ${APP_SYSTEM_AGENT_URL_BASE:${app.system-agent.url.base}} + deploy-api: + url: ${APP_DEPLOY_API_URL:${app.deploy-api.url}} + dockerhub-api: + url: ${DOCKER_HUB_URL:${app.dockerhub.url} + +app: + version: 1.0.0 + box: + uuid: c8d32cf3fe7730a8f9b7587e0ae03a8a959217e405f183f08f5e5129ac46bc48 + btid: btid-test + keyfingerprint: d39b4fb9dd0f2180801f717e9427caea + username: testuser + endpoint: auth.ao.space + public-key: + location: /META-INF/resources/box/publicKey.pem + private-key: + location: /box/privateKey.pem + smime-sign: + location: + pem: smime/apple.pem + p12: smime/root.p12 + + version: 1.0.9 + name: ao-space + pkg: + name: space.ao.server + type: box + support: + security: + mode: default # default/chip + chip: + ~: false + key: true + unix-socket: true + deploy: + method: PhysicalBox + device: + model: + number: 200 + client: + public-key: + location: /client/publicKey.pem + private-key: + location: /client/privateKey.pem + gateway: + routers: + location: /gateway/routes.json + metadata: + location: /gateway/metadata.json + http-client: + read-timeout: 60S + write-timeout: 60S + auth: + time-of-ak-life: P16D + time-of-rak-life: P31D + login: + time-of-qr-ak-life: P1D + time-of-allow-automatic-login: P15D + time-of-allow-login: P30D + alg-info: + publicKey: + algorithm: RSA + keySize: 2048 + signature: + algorithm: SHA256withRSA + transportation: + algorithm: AES + keySize: 32 # secret key 16 bytes for AES 128(bits) or 32 bytes for AES 256 (bits) + transformation: AES/CBC/PKCS5PADDING + + security: + passwd: + time-of-ak-life: PT10M + #### time-of-ak-life: P90D # 产品需求(10分钟): PT10M, 上线前修改 ! 可以改成 90天便于测试时不过期 + modify-take-effect-for-new-app: PT24H + email: + time-of-ak-life: PT10M + #### time-of-ak-life: P90D # 产品需求(10分钟): PT10M, 上线前修改 ! 可以改成 90天便于测试时不过期 + email-provider: + configuration-file: + location: /gateway/emails_conf.json + file: + system: + location: /mnt/d/website/media/ + api-url: + cron: + cache-clean: + clean-expired-ak: P7D # 每七天清理一次过期的 ak + log: + file: + path: ${quarkus.log.file.path} + ssplatform: + api-resources: + location: /platform/api/servicesapi.json + url: https://services.eulix.xyz + user-domain: + suffix: ao.space + psplatform: + url: https://services.eulix.xyz + account: + url: http://localhost:8080 + invite: + maxmemberlimit: ${MAX_INVITE_MEMBER_COUNT:9} + expirationsec: 86400 + param: /member/accept?subdomain=%s&invitecode=%s&keyfingerprint=%s&account=%s&member=%s&create=%d&expire=%d + image: + location: /opt/eulixspace/image/ + data: + location: /opt/eulixspace/data/ + subdomain: + edit: + limit: # 域名编辑限制的时间和次数 每 year 年 mouth 月 day 天 hours 小时 minutes 分钟 times 次 + years: 1 + mouths: 0 + days: 0 + hours: 0 + minutes: 0 + times: 1 + system-agent: + url: + base: http://172.17.0.1:5680/agent/v1/api + #### url: http://192.168.10.101:5680/agent/v1/api + file-api: + url: http://aospace-fileapi:2001/space/v1/api + radicale-api: + auth: root:root + url: http://aospace-radicale:5232 + shared: + info: + file: /gateway/shared_info.json + applet: + location: /opt/eulixspace/applet/ + web: + location: /opt/eulixspace-web/space/applet/ + upload: + location: /opt/eulixspace/upload/applet/ + ip2region: + location: /gateway/ip2region.db + push: + timeout: PT30S + mq: + main: push_notification + platform: push_notification_platform + client: + prefix: push_notification_client_ + app: + activity: xyz.eulix.space.push.EulixMfrNotifyActivity + appstore: + appsign: + url: https://auth.dev-apps.eulix.xyz + appapi: + url: https://api.dev-apps.eulix.xyz + security-api: + url: http://172.17.0.1:9200/security/v1/api + deploy-api: + url: http://aospace-container-mgr:2878 + vod: + url: http://aospace-media-vod:3001/space/v1/api/vod + dockerhub: + url: https://index.docker.io + internet: + service: + config: /gateway/internet_service.json + +deploy-api/mp-rest/connectTimeout: 1800000 +deploy-api/mp-rest/readTimeout: 1800000 + +"%prod": + quarkus: + datasource: + db-kind: postgresql + username: postgres + password: postgres + jdbc: + url: jdbc:postgresql://localhost/account + max-size: 16 + driver: org.postgresql.Driver + redis: + hosts: redis://aospace-redis:6379 + password: mysecretpassword + timeout: 70s + max-pool-size: 100 + hibernate-orm: + log: + sql: true + log: + file: + enable: true + path: /logs/gateway.log + rotation: + file-suffix: .yyyy-MM-dd + max-file-size: 10M + max-backup-index: 20 + rotate-on-boot: false + +"%dev": + url: 127.0.0.1 + http: + host: 0.0.0.0 + quarkus: + http: + host: 0.0.0.0 + datasource: + db-kind: postgresql + rest-client: + appsign-api: + url: https://auth.dev-apps.eulix.xyz + appstore-api: + url: https://api.dev-apps.eulix.xyz + system-agent: + url: + base: https://api.eulix.xyz/mock/27/agent/v1/api + app: + box: + uuid: 2715ddf794906f75728060b1477808ade90560f3dd2013a6ebe12cdbff544c8d + radicale-api: + auth: root:root + url: http://${url}:5232 + ssplatform: + url: https://dev-services.eulix.xyz + psplatform: + url: https://dev-services.eulix.xyz + file-api: + url: http://192.168.124.89:2001/space/v1/api + deploy-api: + url: http://192.168.124.23:2878 + account-api/mp-rest/url: https://api.eulix.xyz/mock/19 +# platform-api/mp-rest/url: https://test-services.eulix.xyz/platform + device-storage-api/mp-rest/url: https://api.eulix.xyz/mock/27/agent/v1/api/device/info + + radicale-api/mp-rest/url: ${APP_RADICALEAPI_URL:${app.radicale-api.url}} + radicale-api/mp-rest/scope: javax.inject.Singleton + + appsign-api/mp-rest/url: https://auth.dev-apps.eulix.xyz + appsign-api/mp-rest/scope: javax.inject.Singleton + + appstore-api/mp-rest/url: https://api.dev-apps.eulix.xyz + appstore-api/mp-rest/scope: javax.inject.Singleton + + deploy-api/mp-rest/url: ${APP_DEPLOY_API_URL:${app.deploy-api.url}} + deploy-api/mp-rest/scope: javax.inject.Singleton + + +"%test": + quarkus: + http: + host: 0.0.0.0 + datasource: + db-kind: h2 + log: + file: + path: ./target/logs/gateway.log + app: + gateway: + file: + system: + location: /gateway/ + account: + data: + location: ./target/opt/eulixspace/data/ + image: + location: ./target/opt/eulixspace/image/ + radicale-api: + auth: root:root + url: http://127.0.0.1:5232 diff --git a/src/main/resources/box/privateKey.pem b/src/main/resources/box/privateKey.pem new file mode 100644 index 0000000..d2208f4 --- /dev/null +++ b/src/main/resources/box/privateKey.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCrOgMmeHMVJ15P +GLh3aGyyIlRXKZcJrJGkTb3UOT7mHJEIZrhe7NE0r32dqqwqFrtjeovU1aOhWZ/s +kZ1Tu3ZIIySo7bEfpPh1KiqnkExUrv8dlb4CKvj/IkpVFIJtvAvk04tvrpWhUYk+ +XRZBvvM019ihxzsVJVYjI89fn2f4/R0mIDudUphU3zBl1IQx6uOQNAuaKrRoH2te +AgDMMmW/y1mWI3JqohR9IKfmoWI4sf3buojG7HeSuWmq/C3PgaGRwAm5nMu3fCp6 +AO45YtIHvGiCOv+PfXRbtvKMNu+VQPTpwny/ZEeMs9Y3NrlN+CD1rkJ23sxuF4hC +6B4p2FSvAgMBAAECggEADxyXmpWW0o8e66wq258DuNT+zJKHGft4/x89WbWTr4tl +4W/vZbFQ5W13kKq3dx96elUecjJItrzKOH7Be9pXnhY77gzMTRaqNuz5xsAdfHvV +WC8XDens/9du6ANfX3/xLMjezYSDADHKAw8EH9lSbZ9/JwgGVt9ssr0+WBohev/2 +1UqQjjlYteEBQhYuQ4AoyYZE3OeWUvrbZYP/z8ztsyGslO9r9x1o5O5nfWNdJHqH +VzPQUkP77W8NtBKy28C8WRGn4PxeuWvPsdwVNf1gpw0hugD9UM1xjKIgZgNC21GG +Hmv/T8M3m0zKPW82mlWc4o4PgUGvbMvRq7oA/rS5wQKBgQDO/oZndyCFwde5ntMd +eKwlJusomFOSEKDEYr2XLjM/I9Wy6ntHQ6JT+P/FkO1FyhV41NLEuQ954uladJD4 +Oyja3zprKTWrTb78EwIwPGp8A+G65FDEKqf9+FWfeaiMi5vb08/VSsOKNBQsNTHU +5zCj/PkQMcfS8ITz17dbGALAlQKBgQDTw7A7JtHPVVfg3VZdcW/FaxjNnzWH2WPQ +ZHSvjo+552gIGqkw4eR8yH86VTkiGrV9g8GL1yTzAGk8wCNg2IZys1GHE+7AjhjW +sYnv0l2pvG2WSStpsvakU6NQlndVSpoO0d7tCwAD37APh8wPh+BO7wRrTpjkUBtS +lHSJUrtbMwKBgEN9SWVCuh/ia+vhlQPu7HHQlqvNvrHJKiHd7+Ly9VKI5IxJV5iM +vMiUTxCjiDlRAl87RN1PWXRsP5l2mC3XXCLA1dNKxGzuFG8r43LGwBFfUqIU/yB2 +p/9ukLxGdmYcvtyV2xW4IrlU8Z7YWT8Jghp1yN822+gy86ZtlyLkWUFhAoGAW88C +T5LT8ZyhfdbYA6kTeTamSTdWIPCJyqZSxG39N+7wdlsAsTWuNr9CEYszOurzdlgy +CCudVFEATxtJ+0nEeGPv260znH2+nQ3ZrIS6oMUVicttK+Uv8yxjqKOjVvIB+pzY +llJnjkZjcUhBmxYglHghpVgtBwcH4XSFVaftnGsCgYBMIU3YG4ii0YVio3nVCooZ +9Ju2oWsBtGru7LiZG/8PGUogkr84dn83R0q5T766kgQTMQPVpRRUpmj59uULddCK +Wk4MKeteW/Bdek0/t34gUodyR+P5QExrUnJbDQSxtGWBQUfIG7QCPdGXdtkx+les ++1G+x47evyhocksSMb+Xvg== +-----END PRIVATE KEY----- \ No newline at end of file diff --git a/src/main/resources/client/publicKey.pem b/src/main/resources/client/publicKey.pem new file mode 100644 index 0000000..9fd8668 --- /dev/null +++ b/src/main/resources/client/publicKey.pem @@ -0,0 +1,9 @@ +-----BEGIN PUBLIC KEY----- +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnD+J66HAZqU3xqYSCOm3 +kE2bZ9sL2kHQ3uxJcNcnciS5k11wyLX8f3iTmiI/tYA843YItqhyCQSj7YDNTsID +gfNT8qwebQLcNfOHoaP3wpdpoCOG+VLsouj/j+zFNokOQWWx3Dc6pbqP46fSF39C ++Vyh7e42LpEPLNJtwP6y+JhgSetoTrLWNtl2isxzpfewlLOj92Z+/EjrAQLERuv5 +xkw1ffz/NtcjWR7L35LyOVIKdb2SKyVSlvhk+ley9VQ2UA0ZC1s0ROw3XVAYLgoh +qwgpMKQ5TdJ6v+6s2XmJovzO0WGvHHyNAyw3XTaWsLeoKNp+bzuxBezlz7WddE8D ++QIDAQAB +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/src/main/resources/db/migration/V1.0.0__Initial_Setup.sql b/src/main/resources/db/migration/V1.0.0__Initial_Setup.sql new file mode 100644 index 0000000..c02c76b --- /dev/null +++ b/src/main/resources/db/migration/V1.0.0__Initial_Setup.sql @@ -0,0 +1,114 @@ +-- Copyright (c) 2022 Institute of Software Chinese Academy of Sciences (ISCAS) +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. + +CREATE TABLE IF NOT EXISTS userinfo +( + userid serial NOT NULL, + image VARCHAR(255), + personal_name VARCHAR(24) NOT NULL, + personal_sign VARCHAR(255), + aoid VARCHAR(64), + client_uuid VARCHAR(255), + role VARCHAR(255) NOT NULL, + authkey VARCHAR(255), + phone_model VARCHAR(255), + userdomain VARCHAR(255), + image_md5 VARCHAR(255), + phone_type VARCHAR(255), + space_limit BIGINT DEFAULT null, + apply_email VARCHAR(128) DEFAULT null, + create_at timestamp DEFAULT current_timestamp, + PRIMARY KEY (userid) +); +CREATE TABLE IF NOT EXISTS authorized_terminal_info +( + terminal_id SERIAL PRIMARY KEY, + userid INTEGER NOT NULL, + aoid VARCHAR(64) NOT NULL, + uuid VARCHAR(64) NOT NULL, + terminal_mode VARCHAR(64), + address VARCHAR(64), + terminal_type VARCHAR(64), + login_at timestamp, + create_at timestamp DEFAULT current_timestamp, + expire_at timestamp +); + +CREATE TABLE IF NOT EXISTS box_info +( + id SERIAL NOT NULL, + box_regkey VARCHAR(64), + passcode VARCHAR(64), + security_email VARCHAR(255) DEFAULT '', + security_email_host VARCHAR(64) DEFAULT '', + security_email_port VARCHAR(16) DEFAULT '', + security_email_ssl_enable BOOLEAN DEFAULT true, + PRIMARY KEY (id) +); +CREATE TABLE notification +( + message_id VARCHAR(32) PRIMARY KEY NOT NULL, + userid INTEGER NOT NULL, + client_uuid VARCHAR(255) NOT NULL, + opt_type VARCHAR(64), + request_id VARCHAR(64), + data VARCHAR, + read BOOLEAN DEFAULT false, + pushed INTEGER DEFAULT NULL, + create_at timestamp DEFAULT current_timestamp +); +comment on column notification.pushed is 'null :未推送 , 0: 客户端, 1: 平台'; + +CREATE TABLE IF NOT EXISTS applet_permission_info +( + id SERIAL NOT NULL, + aoid VARCHAR(32) NOT NULL, + applet_id VARCHAR(32) NOT NULL, + permission BOOLEAN DEFAULT true, + PRIMARY KEY (id) +); + +CREATE UNIQUE INDEX index_applet_user_id ON applet_permission_info (aoid, applet_id); + +CREATE TABLE IF NOT EXISTS TASKS +( + id SERIAL NOT NULL, + request_id VARCHAR(120) NOT NULL, + created_at TIMESTAMP NOT NULL, + effective_at TIMESTAMP NOT NULL, + data VARCHAR NOT NULL, + type VARCHAR(120) NOT NULL, + PRIMARY KEY (id) +); + +-- 增加 totp 表 +CREATE TABLE IF NOT EXISTS totp +( + userid INTEGER PRIMARY KEY NOT NULL, + totp_secret VARCHAR(64) NOT NULL, + authenticator BOOLEAN DEFAULT false, + create_at timestamp DEFAULT current_timestamp +); + +-- 局域网注册增加临时信息表 +CREATE TABLE IF NOT EXISTS temp_registry_info +( + id SERIAL NOT NULL, + request_id VARCHAR(64) NOT NULL, + userid INTEGER NOT NULL, + client_uuid VARCHAR(255) NOT NULL, + type VARCHAR(64) NOT NULL, + temp_info VARCHAR(1024) NOT NULL, + create_at timestamp DEFAULT current_timestamp +); \ No newline at end of file diff --git a/src/main/resources/gateway/emails_conf.json b/src/main/resources/gateway/emails_conf.json new file mode 100644 index 0000000..1e2f4d9 --- /dev/null +++ b/src/main/resources/gateway/emails_conf.json @@ -0,0 +1,112 @@ +{ + "version": "1.0.0", + "configurations": { + "qq.com": { + "infos" : { + "provider": "QQ 邮箱" + }, + "servers": { + "smtp": { + "host": "smtp.qq.com", + "port": "465", + "sslEnable": true + }, + "pop3": { + "host": "pop.qq.com", + "port": "995", + "sslEnable": true + } + } + }, + + "gmail.com": { + "infos": { + "provider": "Gmail" + }, + "servers": { + "smtp": { + "host": "smtp.gmail.com", + "port": "587", + "sslEnable": false + }, + "pop3": { + "host": "pop.gmail.com", + "port": "995", + "sslEnable": true + } + } + }, + + "163.com": { + "infos": { + "provider": "163邮箱" + }, + "servers": { + "smtp": { + "host": "smtp.163.com", + "port": "465", + "sslEnable": true + }, + "pop3": { + "host": "pop.163.com", + "port": "995", + "sslEnable": true + } + } + }, + + "126.com": { + "infos": { + "provider": "126邮箱" + }, + "servers": { + "smtp": { + "host": "smtp.126.com", + "port": "587", + "sslEnable": true + }, + "pop3": { + "host": "pop.126.com", + "port": "995", + "sslEnable": true + } + } + }, + + "office365.com": { + "infos": { + "provider": "Exchange" + }, + "servers": { + "smtp": { + "host": "smtp.office365.com", + "port": "587", + "sslEnable": false + }, + "pop3": { + "host": "outlook.office365.com", + "port": "995", + "sslEnable": true + } + } + }, + + "outlook.com": { + "infos": { + "provider": "Outlook" + }, + "servers": { + "smtp": { + "host": "smtp.office365.com", + "port": "587", + "sslEnable": false + }, + "pop3": { + "host": "pop3.live.com", + "port": "995", + "sslEnable": true + } + } + } + } +} diff --git a/src/main/resources/gateway/internet_service.json b/src/main/resources/gateway/internet_service.json new file mode 100644 index 0000000..b45b955 --- /dev/null +++ b/src/main/resources/gateway/internet_service.json @@ -0,0 +1,3 @@ +{ + "enableInternetAccess": true +} diff --git a/src/main/resources/gateway/ip2region.db b/src/main/resources/gateway/ip2region.db new file mode 100644 index 0000000000000000000000000000000000000000..c43f884c57e27fc9f109f6a41ae7fc3051ff4fac GIT binary patch literal 8733094 zcmeEve_T~X`v25YYei<86_piRR#s9svewFyUn(go38|?SSGWQST;hkRVO@WQf`W>Q zih_!YKR{GeKm<}(&CIlP*UHM>CoE(9#RAEjO@R{7uC1 zc3xno9DH9Y4!p1k@Z8G4vpWETwgevi46txdVEs>kPaO`dye*If-FYIg_~}4m>3bqD zFD{UDNjVXik{w9;U4JSteo-L#!!4%*!*&Fc`k+&RJwFR1*F176FzBa1vgX-SfdRMO zOrq;Q4?G`wGpSwf4m>mLW0f{) zRh^Um&>8qUJI980Cja;2pF8&%hVO#ru065%z_?EbzWN$##5O9=-G23BWDA z?>zk@U|Gza2X4KEkc-)O);V9h%LT2X#b$JRf@7%7R-bT(o zoZO?6{Wel~(b40=eEfc3R*$nafNSUUIC|_ha_N?NJ?ekJ_Y?abt?b;Dkm8Y#6+h9H z)IOQ>Sl$qPJN7)5k^$K1?BntC0gr$GcvuZ!;C~+Pc?|IEjUholbR|KnyM_dGz8(Gi zc*yw>z!5KooEZ!lFf8P7I^fYaL+a)MmQD((s0J*o4k`Q?kbD?2>3hJ{zlJ2;d|35y_XE444BA@7y4!C*o6J6&4k}sbi)qp9#J#p^n9mJ9F+LNcx;d|uM zPaO!n6LPWSsoI`^!PkaDB*@6d=R@<;?j*%O3<}LDypuSZ2ZttXxs%ksGc+{jDDa}* z4DEdm@cgpS?tww1)0_K4yYvhq=Z75(y)-C@9KG{!sCz;X$y|Im^khL0A>SPiZQUG1 z0^>dm-SQFO@ee~wzY8J`+mXb$;sqnp~oM)n_N6|EVOCh z-6SCGlhCU1cN5FMKM5_Fi{D@PI@Gc0ZbBmd5t?@7ZqmB*AE6_^y_*D$aEC_Scn=9U z=?=9#b`K$;p3rUs?;-BRp3qL??;*#7z74%F=N{7S({Dr1ZUkPh??R7$cn=9)@?B`X z=N{7ihI65nH*_N;^IT~0qut2)#&e;0FLxtp_k16klG=^*Zu~wpeoi-XanO&UVH>-V z*r$FD?fGFha`yWFga&!Kk#2`Bg$CSkFUfQKFZ6tmdkMKFuh*GqKyu*O!zqAK-nTk_hFtK`a*0Ez}aJ8=o1Z?vFL>!Dfbb_ z=fQot=HvTh&pxCIkW}_LcL=cPw?3!a0V{5M@xbrzC#2V;7i%8@96tNSvH^e}u6!{+ z8SwMk7jxdfpA^5d@5O`-_`d(M7h?|HPu&0h?#15i_&)jli`{=8OdS0lda27J!Gt7@ zdFfLBU~=He?3di*g2{7**)N@(jo-gm{Zi}tV3J__@TDyW@qJxv-%=Ogg4um%UjIiz z{T8;^&bt$dIK z-v4RX(F6EB^i)`V+k>RnU4IR$4CqcWZgGVbckfQf2~SvF6yU{M!c&p}1D*(vpV^%_ zK6yDjtPA?Nr9(dnFWisss?WnG{R6PgAZf=em0^{B;XS- zNAySpy!2{B*BKN}h#+epCIKTCMV#CBFmWtf6LI?Q_n^;Lu3772o40M4p@mIAVHa>*^k)_2BHtEg#@}{l)oa?LmIO12b_hzk4wzo%qIT|5i; zRZ&zMd5k!w?ua@b{1^!?_%^C3>@h+jukBZr066aUekBgTpS$&QQ~>_|>3(UgkC9%# zAJlK;S$rSJ=odvECuB-NKT9xR+lqeO!X785udnIXDFNU0C;MG^4>0S;erL-8yWG?N zXbWJEr~21_14!cgSN`vD((UO{{fqDKN$OXQ?w{AUC&qDd|CBcYv&#F&zXuq$uYXuM zV9s>|dbR*IKQJKZ8^D6x0RjI5Bzp&(zb^#qMnLqLmqN&zgPo%fzY#)a{zM$yBX29qtqbGeGLc+QfL?``*?{o8_WAA$c^0G3z&r5(+2cmnt0oe5K z=&tVqUhMxeSp}HC@#S-S0gtr3eEKWE^PLAC`0o>BBs8=3f*o`s4Wq@Q*OkflJeMZd1F99Fk7t{8C zfF)nX9KR=&oPF=7n5Gv($@#vKgR4e|f)67Gm%IbGFln%31>osfgVXi^*6bfV@=L(K z92*?g!W6*eaYN582mEpL(4&ojj+sO2 zzW`iNGPLqnz+S6{7T?_q>*!ZQ^PUI1HYhe_R4)?z&b_hmQ}Dg&;n=X{fM*BB_G|<^ zJuWur3&1<~#|He`i#QhlGxq#l&wy^HSI#{53~}7|$5#%&hVR7>y;3(B-`je=Qn3u* zHzmAM*Z^3c`pTrw0Vg%QlJpleS~Sn@pS+4jk6X}ggA)%BxB{sqt)GAim9z_(&YS?+iNd|N%L z+p{l_K5y?C)oD2WJ~`?_E?}@_^x4ILlhQ{Y-3eIHGP?d0;M)gBSN;sx{pjf8+xrmm zz=_d$&j5}(H9F;0z>hy49iI#M#5beE76ZQ4HoE6dz%icDL8kyu{xCY=XFyB9nDbp< zB;>^x#+>N|_~@Hs4#xw=I>yxH0DiS?OhpM`+CRq>)&bUE_xhxhfJt}0o^$~)um9_@ zU0;IS6u;i57vTQIulI<53G-F`>s@mIy9K;KN&wxrzj1B{V8VNEoc;`OOv4)oegb^& z;v2QM^+h=^y;=5jU*f2l`euF{zAI|p%*pOc0+Vh^NLYmL`+6qC?C48+Ul*Cs`?J0z z;m`dOy8ndq%7F=8ZVMyzLtaU^6dFdx1P)Jd4+|qbo*9*JGAoQ6KJrFF>%uTn`23`V zE!)E&AM+AQKLzX@Zk_orz{3-)nSTh!{G2p)OekP%`Pk@TfW6O*?Ue=SxG6DsAz;^g z69cycUJOaRcmgmpJhAOZz}iuX$8U`QUPfZmQ-BH66RTbUEL@pb@)qF8`b5V9z>EJ& zOxp%XerFqb0`OmZY*9Y~R(vzga%&_ZA)S)DJq6h5mgG*a0A9R3`9dZjxi|T2F<{EW z$wzAezkM>f{y1Pj@8rt!fS1CPi@QXD-pk2(7Qo}LB&Wmzo_j4hJ`=F#*yONcz`*gz zJ!=79d@DKVIN*W2z{`k|%uv*m5>G>7Rg|+{v-G^v67KKDp16fU*Bh?lBZ_%5TYC?ezP`6jB7( zNdv4no$e^4zyFk;wgqr~WX8y&14;1A1sPH2=%_1Hv^J-d;Ld%3EeU)zXPlvomqTS4A%EUnR$-`9uImeWe{M( zoVVg906Nyc6;=RPQTtZU&49xi-wOIDhHPzdy%q2szFX&IoxgD~xn0NO_pp7rWG>+GuX4|A1f2Nq+|wTdM&3H{fCuo}sEM^V3`M(a z6U!b2e0s~o{FecHADNhw3V6QT+X-`q635GLz8$j>-(^3%-TOnp{C<d z_van|{V+oQnvmD@2;hOKc~t`dzdeyxk_`BDm#L2T0fR!OrfmR>UNd#%A;6=Dr$)5{ zIzFFj`F$MPf2*V0BY=+Oj!pvrKYMW6g>itF?wWpfHsI0MXB=G*NEXbjKM1()<5`t1 z!0rcT7hfNb-`C~mJq(zTH7BJ%;C~!*5;&~rWD>v4ra2LUt3&I@qG zli;Of{`u=(1>UmxXC8W${5J8o`G@<_@1Wv38(?r@amB1x$!+J`iVN4_JAT;0Nq+_m zIK42*3HZs7MX}cn$NKWqqCO7+ww9Ol=m&V?y^Fir0HI-%S%9^_EIC&>oOBw0YU$|% z!^sbGca$Dz8&1NWoxiL$UZzyz|iN(*1zstu-_M0eJtaHJQJA4fE8oHDewGEc;?jbR=NuKi2e01nm0r zn&26L0l%#YTuZ-quD!SqkVLO*`#Xg{tvi10C_>8TuWxz)Fr#8aRRo}8ZdJ)xz#h{# zI;I1Xz)fjuC_J@kI)N9q`=v&6aCNW7-JV((M7jrhZ#GMF1Xsb;|`S;Ngrd zXQu(q{%Xt7)uTyT*nhXwe=wSy?bfNf@^7Qbq-{4=7hf}moNKtbI`5BTAopFXQ^Eny z#Z<>z$B<6b*Hnj18$)`1y}r8VYWzNPPj%1-V@OWk!Rmm&jUkRVKdnAbUMCfvzgM3L zejRqR^VNsLUMF2{f1;)?0pGPTH5CrPBk$G}RscTRS~IB?uw>5Gq_eLR$B6}7W62xf z&pow$f&qJut?dy8cx!8I*95?-|J4!);Nh;@&y~~fjoVMR0OtQ^`+;u&Yj^Fa{U2cP z<8@{Czlm}AW?g_`DwekC1 zUH*sPABf$3>AnOK{I|`!-7h78|6lDs`9=ciUUO-8>$~`Fy{CT5ssxgD=&AbB<^*!` z+Nk=OUnh{GJqFZg{)Y5NQ|rgvXT|;~t3LWAz<`?iUT*;QXsHi=7clep4S}lwXLf10 zxR?HZS3}!ZfOUUtIR0P2h{qb5?j4I^^K?Vii+~^YX()Le(9y5KF%__BNJH96K=+7- zk$VC26B?qv0z8x2VEHd#uk40y_a>s8sSTZ81gv|%;lda|M{&d1Jo@{JhNESPB;c#H z4fRd2uFG=m&SU_ILsC)B~+uM+3H7TFE2-fztr1$cO2Yr+)3DW$D3%K^Jr zwDxXHCXR^4*6v^6dwy$cmtO&A9BaLFR|@8%v#svu0LOmUdh#{E*M4hloeX&Pjt{mh z1FX33gVF}T>mUAL=I4M}&wP;iAHZi*J{WUXDk1yQK8St}aNPSJ^m;9oIKEu=LGWaJ z7w`HYa2epD4?nnA519Rr586%x*8S^);}-!fH|%Q)8joTA$9+}30mp~#D;WvcGjg9} z5+HefUs@^P?QicJSr2GmxG(B7VCQxFEEmTU$A234bqkt6T0_q6>(qM!#@Da=E{p)| zar6GOZv*Ca-+y%J1mbx5nf>*<0dIa`f8}2%kf79<{l)*DK*C~%?$5h34dZ0g{**rf zmOA#wj{qdg_lLa=Shah9&!zPH!2Y1!fa|~9AMn>Sa=QAv{pWwd_cOolKXXSqs`==F z!_NYi{`o-NaKM2V4pdA`Cl_asgM~}*-P-x!q+Ngk!3UH60_e6JjQs_0%1a0P+>rsf z8-1|Hvw-Qd4t5<5_-o-oG7<3N>VxMN1Kzab;OU)!UG^M2a0;-~v4gcg12%dNmfdd0 zzUtD!{AcW>_tY+ja$d#vvhIfxashiq9*S8E*fR7`@11~UwnN=d0q&Y~sLRiQVKs*? zbgQ9^do7D0LhFaBXW+1{l2Sh~+0h*Oy1S-Ifjd|31>`X~20md~{(L;O)14bT$jH{_c;CE(H8@@JIFA z0bhCiqsmVKUwrPP;(q~FjQl9?4>^#R^p8?P0m-b7;)emQE&nJi3-Hf-KI*v;(EaI0 zLE8bl-gq?NQ^3Rb96kRd;Lk4|J#%X==9Ljg4?mSl>H};?>t4ZkzX?Yx-U2-I-qFGZ zfc=Y)PTB^zsqARd3BZ=W9gY1F@RMJT_PKQ;1zEGHK5X!Ws#Ou%an z9g8Ujtoqxr-nD=;9{8mD@wbU3=!s9doX59g#3z?-nS_3u@QM3Lz%%cEa&qV-k{?j{ zNvnMlsrb6`lPyK~{fp*LO1A=z`{I+Cp8#I^;gigN0!}8!$J{a*MSefGg^cH+7yulK$Ipyy}T5guEPh zqGSkQ)xe-9Y+z^8dP=fN(} z|I?HZz+Q7djUNoyy6V%gbU^o>PkYV-?Bx11s2XtPb)N-%4Csjc?EE>vcgKBpCU7eF zGv~9zJpt3oKC6oXta$KbMH=AQ*pr2YfCt|`IcdvO;@H0FWYST5_xStC*mF}!{fK~5 zeFEP_c`>JY^n8~j+?9B$Ys|Z(wQ}Jpl7`>U?mcy`05JPsr%rDM>~Y=c10Ml~1f8z^ z?p@-pc=mMJP47Vsj5wYD_hj}aNifvj{#Qn{-W1Fz~_>_2p&I;Bt(4l zMc~|NBrN;v7Z*29BbQ#d_(j`?NVg<>dE7IN{QKE!Q^ulmxFI-PuxzUs@gIY>WR`Q^xsfaKzrQ6B={mv+YD0sLvznQk}C!1y|KrqiQ< zKmBy(Li7yS-!i{Cn=*qW{JQC@qxtwfwDzm|su^U<54*mqJUoLmKeGF)VmE%j*!)#q zr-cCu$Mau@r2w|(f88@5FlY7GK~;c9E`1$v7%+4AH|N^{XJ&tM z=J&HOFMs^a;YR?`W4?2C`f>GtS2=K%16Mh4l>=8faFqjBIdGK&S2=K%16Mh4l>=8f zaFqjBIdGK&S2=K%16Mh4l>=8faFqjBIdGK&S2=K%16Mh4l>=8faFqjBIq?631C~7c z&pCTm``!gF$Fe`>p)6PP4rk>CXa2^v#^n+gFb7_TTXyx;&J}y{OZ)mF=bpy)vT4#^ zyH`2ur{}eo>}+dUO>3&j-oB^KS-IRx&AFz^SzF>N+mdG)(}|<#Y-nk#FQXLkmy@T6 za*1o{Iw^}>8L154FBEtHj}|UhjFoP+W#{-hAiQLc?TF z^Rl)*CC>RP4RWJv%IAyIT&3&Wi?$e~)va)@tYm37QNH?GO+`W5R@br`XYm|{ujW#T zqkYaYahkJsN&Dso*S1~a)d4y zgS4VOZS{){(rOBv^Nbow*|bNT&$DcobCx0ckajpTEMnDBrbxnX6!qvtpAN$+>5)v&o1n)g`XQN()pn>7KLQ zIoqIzoM2_GLFdxhpe5g+F1zcT#jD!(EOFL0i80z53O&mW`rf%>1uEq(nroQVP$0eY zkA75Q7`U4ahL2~D!L;C+zP5d1BW1$uGI3q#@G0LRPD2wh?EEpo-Q3Kw{uQ0V77CDs zxa7%zij;d=iN~>=_FH@Ne0es;Y}meHg=aOL!7=r^stf&-u=r2r)*+u%y61034PDy| zCNt-}rOtIFtN|*aa?NO~K;kd<=4P;llg2XEV&)~m@H&KK^zTRn?*Q64+zVJcsbPRCr< z-nhfLy2LrF0H1NGKJoMBAsLty0wuV|gsLnA~?QC93`L(-Fk0&50sH1yb3kq^d-IWJ` zhC7RAwpW+v3A#!P-7TAB91-W}s9w_GnZ7>Hy|uBeX)bz7PefIopgyiOv*gN9Z4k(q z?j#~z`97iwgs(%;OxMbFz?9WT&x%dXS+(x@n}EV6DFc=N6-dxJ=#;v0b%!(5&wxhM zQEX3HgJ;DK=$IYN&^~`p`@$J?_Ud2*TpP+SgFKq+nzQKgGJv6N^$i`Zj}z)kW7TDp z;3_YH-f}q^*4EJZd{%8ot3-#wtm^iX?H$d~UNIfR%DrpuWz?#D*&b)<9M`(04j0n6 z!?TobaCnI{lvC(280P-!!}RO+#x=Ya7=WSUDc>lse{|?bI~VqgXFc?dk~}XkS?@5w zUDa!yHG7@)>u>uVzxG0|RxPDlD$n8;Yz(LX^T=DT<&fRYd!04Yr2SXr26v0JqvMh3 zgv?rlMa1tagjuJ;Kt;h?i|I(cR``}_s-N&HqR|2opE|*wVWl-<7}_Pmxo92ITm@yG zWsW=nK2=aEYv{yCNnm#hb_>v)MU`}P7RLCNTz;bj^|@q$I%e zt~a7$*~BiSrJB-JONfA$mUrIeRe-5lsN0LGL7DF640y+?=qy->mA!qzG9d#Mw3YMe zmQzekz#Z?xEvhHqZSI01ZwHDnn|IS~_zDRBE(|y9YuwFCoP~{fSkI9ltT0c!y`PabOH5RefvvNRJB!Z$bs~mWHbm0y40>>h0}aOi#mRzV zpvFQBjk%)q9o^qEHC50C)%@XOp@m;BU^jFxTn53)b1rCdE-ZBI+(?B$wZl_(fehJG zvKniWXGS&V1n*w(c>}VAvz(Q63c;yjH0({GbvU<{JD~%bmR{Ndema-T^cI~frb!p| zz3W}O=_0JqoMV7Is}6i^Us3L*`Gy$HGjlqnR=J$^I;&@t7@2OkWebeFT}~FGf%BLJ z+;uBe^?X%~j9oWf<5|(sVl?;8N+;H1hSr&``xq4vR7oGF$_o2dG$Yp4p7qOI^;>~t z5#_YpK*^PFah8`jw^mUs`j4*UjDWMK*45A~DI!I+*uTihim?C{$=^ur&$Ufn>om=7 znC>iF+qQSHb2XHGipLDeZF`H|b&axdSpHFN4F2ohx>AJ-gO;aMvQ^1{<(c7g7HKoo zc{7|vyE;~j@}~Crb2@~ov(f2mp);!MQB*u=&)?QwzOF;1Ljs(;S9S;$MsQ}KH>m*K z$?n|knYIW5V}{Dv{moEk?Q}LS>R4U3Z*7vt-W?_bK?by>HRBQodrQf7Y*u!|MYPDo1UTpSa(;uBjYPPno$Zy}U;Cc)tchPodbAhv_ z**obCNVAW%g~Z#^Y>9Tne^4V(HrF=EOTP}0X%T)DH`n$V)F@Y9D+9# z?YC+gUAEV5&T~zlgWk>?nwgV}NEBG3)Tgfo$EOmy!C|dJ%D1)l9w&G~RD5`3;f(QMm%v<^6dub!Em(q0YnWn`&!P8VQoyGa?>9P&USNa{8*jVXU$h`;n zuATF#eDn2;HNf0E&$)803UiJa6LX!mo^+^Cb09h#V;j0b=?>Z=OJ4uf3~NTBEyS9U z6cU?dPq*i!W+Y>(O-#wKr`eOGvjrvN_8nLQt}G+=K$lw_HUMo6#aB?AvvD?dSyzzJ zJ!7@AWvQ!lexCBzWpM~10Li+7l3lg+Q1GrGqqDdW=Q~%D5&9(dVwW!k81$I+t{@|w zD+`xgK}M?jZf&`ej4PL4S$ELMQMT}2<`AI*uzkgqR28!T_CgKRFnU=cr%38$W~9eP zS0(^h|F2BQ>t|h=0JutLJ7F`qd|8G41Owy>GEx_-hASE!3k%VSS5ji-CM!@lvV6#udIz&W^q=2MQxmRh5d+uT(kU2N`xh? ztk$(;sqEcxS(5;&dSy$xbI!ag8_Uk^rLbLHL05X-U(mj2>lN_FJ-5MKAZenPD?DJ% z6)jlc>J@fnLyK$so-1f0)BsG&SCA1$xA4-ul8l%==1B*im&sMPW14&Q6=kfQ1^u^U zRh`9a_ntiq;O*%ZS5HHwbGxKC%VytwhM4VhR^#{|*{HC}$e$S_?^%Z>O2Hg&i0Ro| zjQ`{4NM%r-Z;0 zs^f%h+kACv+2h@}$#whOkeaH{Zw%1NN>tQ76r*9;aP80-3}ovf)@Yq^99uHj=-?tK z*usbj0|Ht{I8XsU$)rGFgirwO~&|oT#V*iSdUgJ zX!r7F1rMX1<+Xx|y2?b)SbuYXrkxT3<$>mSF{P~@Dq9CkdNPmk=* zBeTjs4fm{O7>obG&l+v@bD>#6S}CB-GVuaxU%m(~Krjil?G8gd)!EVB+mAsD@ zm^w|!WKFMvF^hM$_|A%J_cmvlv>q}{w+0g<6wZEh&rPROhDP9$ptQZAg`&AuPxr1l z3L03%j?gs6RZ$b|snW>}L(uqVNyCaIs&cE&j!X&Z5%_aCDOKl{taz-30@cRt-rsYRu7cK9KgYAQ%DIEn~PRjXW*J#J;PozEs(b95iS}-3nE?cZ#XGnznk)3-W6Dq8JTc`6_DB zVl?N1DreDJrEdQf*R6f#`nJ7g3R<%mjo#F(l~z=_Zr_U0sA+30hxQjS8nyYZ-sLqY z$pp_DV8Ty<-vDw8VlB2D;IoTmewvaemYKGs+47O*DO--?8_@fqSO`B*+{Fd`_TAD4y zmJ>2O70mX}1W8gu;((SD5@pNq-!+3NHA>i2oQ7M|=r{mp{TCmel|;MAzd+=U_1oI; zv`kwz>qNh#*a)Y#pn0otS6`l|*2pF)SmPdZ2Eclg=LL+!2}&Pv zC$P;G5NEmL((Jj(D&nuwxqoI6J(ti|>=jD2zR*2uu81n1jcUwbpBJ!dA%6!QA5~eD z&YK18x(O#JT7JNDot|b%Jr{&@!DOd$UM%c1*##z&BI$ZR#N4~SZ zh(@G=uI{RkuHpK+kG8|TV6__;wxzy~NzEQ>r%_^5MbbW;RgYh(?hX0FZAApdSwQ<+ zg~u~47WK(WxAQ2}l?_U}eDzQ#D12sI(}S$>d7q?t%gWsjbjL0v=(4x9%tS6~#6(zz z`J1VnZ&<+nrK%|FhiGg1*xW2UrmShmmJO~tde>K14EDv~D7{l|$&19yo<*k(HEk&I zE9qtJ_Qv(?Ew!*uQLa_2)_tpTx#!}7aV>JanoHyK=(+&N^axIhIH0c-n-j{5Uv6R}?oDjKJ#1r~eTJfG4h{ zG>C$(0A|!;KIyDxIyH`^M1v&V=H+j6Efq=yn;>K*COgMQl`EDX*@-M`7>)A%989}( zgIchVN|1DoR*lWVfHc9ciF!gy*7wpD?5=6dCj(^7H6Z1hj|$&8Z;fkh4V4v3UQF&J zTl!eLKsb>Fqu9A;H?SgdZ5j6LkZ|b9bWu`K<1On*GdNRGWue#88n)B03zob=*7Qs$ zQasfVunWzlx0ihE()A-QJGxdcVChlTtPrf6aiC;P=V?*aQ)B+}*$4@NgoxbnxpXXA zvC5`qNxFxsYW&0)Y0sL#(^^lv(bqAm8imtRe4|5^Ld$1)AosM>`I}leh;*%-(_X$y zVd_a_p?BSIC$Fp;gPH0mwMJzU=^au z!qyVX30M6_=??vTHMdx62E)lZJ7j<@OWqi;ZlRT9NOWo&fL3FAOR|T=<)-nK><3K7 zK2;50qbZ!eq)L1ciEVq<(O^&cbYfN|A`Km?tXmP*?34-itQ>oGj_o@~TES36dKOF6<`2(Kw5O$p z#HJ=<+Ty8b5hGJlZ8>xR8Il@oO+;_zsOqAlVogp<#m37Yod}ckNR*KwjWOe@*s`-B zU;awLmXwmo&bHx85S37&#`4p@mri)Yc-@a0KG8LFQM?{tkh(vIet3}n`Ibi z{GvqKv(4%pV@phw_Fz8Kw6-^grKYE5`0dMhTb6%>*wk#l&5g-TO!SN3Wvm~$45x$F zpD0AwvXZTmVr zQfjteDTb~DIrdx75NjspQGa}m%(Ca$WxI$GV+Y$|7x62q!)(dPSQGoDr(zoQS6XZ; zW@8gs3Qxl{iN)2Vqrx*15iQ4GVZ&{()%wK<&-TA|U>eA=`)^T<71yx*77}9(iOaN2 z@lPfk=DI0ONzrr$}a-!dFduBp$0wwMB=RI9{+1)B(?LL`+bLH6 zD8uX%QvvP8lABN(v*}` zx)&B9_%?@98n@TgZ!s;;gE9P0L}Fnmeq^RU>6iN`8hpaB17?;enYv=-m6#Jlvr0xh zW(kl8;Ad{vEjFP@1bJH@A}mX*sztQZvgmfan&$F_pbk1?l7!Ch-{S3Qwj?@sbSa$u zo7u!AB%XC5dO3E5A;VH6L$H)!XeF|U_Tf?%*7-03 zxpwUJTGMqqLh4xFvO?8I2=^iT<-mNogL;r4Iy&83>P#-`*3d1f_Hcp!w)_dDP`90# z+dxsaWiSD86>dVf0dxQ^U}dCRC0mc&a?TFmsh&o!q(KZ3*a?O@SXQKp(b}`Yrn34; zB$xpM<^tX#Ziz!adYFO$ab>mI3i-MMIwFqoq*G}a39vAX!*1OtDK6eIzbdFc0-& zpSN1JZc=9PvI`pp91dx4IK;bxk;xMQ@W31E-E23z_4-wG-epOrd}Zl^6zp;hd3fk_*m zH!?Lh$(j^0%x0w)FPXGYJYU5LM`DU1;~X2jTDFYuJH~^G2wfp5*_NGx7EyAMw7Y!E zgH*omAi&a_;%qLU0pDv@&`iF1ut`upL&mYN@3>bgR!R1{21vj1f(RC3w4h(SLmCAs z2H`lXl?}=dX##Ijs0K?RjnS(#Csp)foxH4)t=af#N8 z&o($WOWyR#?c~_5)dFP%-wXx$mHkUBHFAS6&|%M~q1NFp=WUbDk}J`0a`G5qP0S7% zl$t#ummc9r$vjtwq)th(CEK&?Nrp2({N&tpTZSr`Z(n%YSZo=Uw)517ru(w7UloTR z_7mzgD8)Jf&ss=hoc%7NiWC|R3S~L_iBhwrV`n+Bqh)7Vvoq|Ity$h#j!{yoisM%5 zxIC)>eIQRK;c4mC97#-qq~6h{Gr1RJ&6%8K&83|&3R(FxTPc(7MBDNZ&@e}0X~bfT zrM9hUE6q*+iI_7y6-Jaam}`(t#g;fLmS7)K46%mW(~|AUSymMgQXV@Pfos@4HvQ>jRX#4vK~$;w3P2M=a1TL;84Jd5%-*_LM74#+ty z>KPpxwvj0|4BWA)=3R_gc`T$4qNf*8rkTV1V9Uz1+ZBz&r$I#J;s8!r6WPx;7_jK% zMdv3*rk^!C2Pbu~c1+Tx!BCQvI&PfqcZ8_RO@zk`=9YENvN6b_h=Xbu|-M}*DJSjQRXfdL(3PcJo6hlIQa#{i?UaN1$agGl%u$R;jzWuno?VuEsk;5zoF zVvLwnn6lH1Gx6XL=G9f{Z%vz!s_cbT+YX<*6#G$8LfB7W^l)qoyasEZ zLMcX6?_(GVF*0Yg(^FL%Mn`J+WP>pmmtq??4mMwDf2Rkgxl2E;UF(7S_ElajE@9h>F# zN>tYY?kgE@ThsJH9G45pPh;jh#=D5z#0mb!egxcvGH?Wtn?wCM)P;>mP0JC>CnQ){ zT9hqo>|~Zjw^yJ+Kr`%FlpD;L(m%@v`$p=7Y_D-tgrhOIa3}(0*QY0Ik`w{dB%s;h zJ_T8m%*Dy#ful4Xb$r=-#`sR<%{uWcFf2Gs;px>-TzITJi(pKO9SAlI6N z6N&M%CB+0e#wIBZCRnj{?7}D7l0+>R*_=(tQ6D1I(Y(z#SFnz^PccWtStFd2#&?Kh znhiS*bCR6#!K69dR^0@XdikYOJ;c0tLwl7;5u?!U$#%&~W`c=RgJkJqiwRyNwVZhu ze-qT`TpO;-m^UsGYeolp71jW++k#2CgTdG24wTD`Mke%P(rl?6kG9ZWM!UINf3o)UIc?erO_(D*{!2~ywdW=bKvSx_TSaHm4PBA1f2 zh~t}J3=xzSU*oFAm*ia>4T-3Q))0+b9}IE0142O;x2`{yG5t=g3YjUwrNdFfuE~ZVpuwz81*-{R25>l5!T7@ z0yHG$;x3RG5zsrWh%r^3Ch8BL@1V{>MoeiKy^cnw{*YMQN24l`7>|Z4Tw7z9466&h zoM4#l@?CQhQ;(2*_@(;|#w7ULlSb7Xl1jI=*(SXzJke$~({YZCe0eh{lCl2Klt$Rb zN~?;`q=J^Htuh=E6B>nano=k!h9#`9zYL7u{*d&2?+;tuNB%I?0?BuqCYR1#2@82D z&cyAw$CNQy^u80$gt1V19CImqn6m_ZD#iD}vkHSnWTC68=8Z&eKpz!8^PQsSf9h+K z4DVsuF}v&JTYFSnV=1&w?0lOY>$2ooG$VgqkEQ6Y%(4_pQh(1*m27;=M1{soQ)+iM z6%Lyzb)u_6<1hCZIQ6LTSwG>#wXJa-{tMd;y$S^H2sQTvm|FgJDD0qN@$~T(yi%wk zY7l2bOhvxT#Xk@x#%pifi@TF>!jga(2fyN+mx_vXcUFvq`=}6b`HCOI(0OyQ6e==o z;xHbHDtyLwnsHVE&cHDMv|M6HbOieRnL0qGt!V+M(E#0IWIP=Kw;;ShqG=*+2rCng zZg2;p%&J^&STStL;G82ro@k7;w-{k+Q58cB%o^=mw$M2L(vz#=TH~c9XXRqbU!O~p z0bb*7*REOZ1v6=c0FB(S)`6qoxqEB9^p2bXpHyCE@DT9cUo|LJ?UJTO65Uu=WB9IS z^0F5LgIn6uI>D2FR&^F=@nS8&&<`R35?+X=E@1B$%7P)lP>(SIg0>vj(hZ2Ej`%-$ z0%TsU1vmvCY4)wEh@80SvT|`HTf6R(a@?b*rVId|QBJnsqBzxsLS=vP8d_*8W zqGVPtVY1>tO2bGrt)~M~L`5ghA|$+?TK&EpkwBEJxsl8KJcR{nkZDW``8ukIvcK!T z0(=7}SihJ;?op3bzJt(7=q>63D4>NmAH7oxMgaA2MYIoGf%S_iE>%4Z3kawtYGsBM zU@D8QuqY+j-Mj+-r*FI#6^rWZp1zgdQ!Q^)$1d?(q_WP7(D>=vJy*IWy=a}NXw4EK zpryi)Kd2KG?o}hwfWau$bS+-x!WD9Ko2Uk=$ydlo%?c%`qpHs^r(upXs+x9eut!Ek zWcA4K#KN)!!4)+HvPqe;dI1fu=X}4?`F^d@?8NESf`U~o#>pb)Yf*Xaa~sWMq+_zno(1#i|s;?ov=0uy42^p-j>u*urx@H;Qb=p=3i_@B$_T@-zk<}$5I0NSXFE=6eNqT8 z;~IX2EP^w1ucG`VW9n|x$v=yt!YQN;FR*bazN?qKom)w!8#&a;w^xRoQyJ!BHYuq3 zTSZ(Ne`8Djxy5TH*tSZ(>4qmv+ne#uk?&TDjP)sHARo;~p-GK-1udu@_!bL45GhQ9 zoUAj<$v=MvVpO~I#dK2l13yg+woOWv!YwGp8QbdwIJ(DV6db)-P)X}pASngkzyPKo zD3cuG0!`nF;5aJLW65k=j3t|@m%My3B)WmZ9X0e2bOn5%-!NwwsBqe;j^1&TlnCe% zobWT^szqJdR5+V!+*4TFuY08^#Yc=rebG?5A`K*Jza>}1L|L5xXtE$Pms zAX#lV5+JBLQrtJ3RYpKS)o>vJgMFBQmR45i7?7^KQeC72_=?p_ge=&wh|rjoNoD;K zVX9SP0fsX2gpA>LZGzlvmxkFzn5?qiDi};LR^2fc%yG*6B%Ho9+ZHy*1!Hn?7SZdW z=vn+K{i8Duzc8~Ce@hRfKuBTc-WfaJ$31 z3zky&tO!Jym||7kCRQhB;hayo=c`InU+L46wx`p06oTJXcaL=GaI}M;qpB@@u?RNg z|8k_}ij0mv(%HpET_SGcARf1I>6#06y8J`oTSt%A4XYoIkY`!m5OliS!*T1AzlNkk zh)l_yh>IwO)YX@#blEjG`J{BV9E+wdwtTBmRa35FpU{p6qZAct*J&@|nerL`hmYzVzS&(P@ zG(;oS%oGe=yj#isL;a%#PIMG*RRhIYqbYG$@1P786+2y6sh1Cp+!bkL49 z(miHMg-;jUWz?@>uwl!=F=c*I8cdGj=)FT04uB@H#V$T8HwRaiX#?o*e6g77?b)eg zm8+$ezBH$_xo&GJhNACl_7MDz>cb|ak9fl3GbquYEjmA5wcH@a6TP}Ad7BBt4$)bh z)>ajk#P=hc8t8CfQRLxFi%hybJ^e9^)}FJm(7vR<>jnoa!6=ro4}sTXa3jj=aV<(^ z?(d>RuM;Ot61mxmvMARse5qO!4f|bpe;&cV=^})1_ptEGETBy08>84rxO5hy1y}f3 zjFw)Msk3Vp>w-?a)Hl&}$-^dN;HWhLzLO#pLzphB>RP{)>MGyjEH80xtwOsnhTYAQ z9x1iXH;qT-()+1YqUq0y5c&M^EQ9g0#`GkOdWx?3Jpy+c?6!&Y@-Zc7Y?D%#rMS3R zhJq+%_N-mhsx6h1ryujO5-Sh*mym;vYF07cQAvq5sV`f$^9db8%B_6S8T{FL9!EtUV1;JL0BTbKt&? z=tPJpBf^ZZXJy-yLc+&dbH|5_vZZIr4+qHY<%;Vk7i19hTSDi>p1qXG zdO=2)iQTBtr6``kx+JgPy6$(*b6%Im<`5}`Nv&p}W4=mic#1o%Qqw|fi`=o>4(@H~b{k@i&FVOF`T50>O@jr`066L)_38YFLk z{OYQzm>ClLcnazu7`o&*8teg41`M|Yyvi))*3QK`lHp$6S;kh!5F3^%aZ*ZRovimv zmC`jaq+U+4;xU`7TrPeVs|t6cMOPhdYzd1l6pO0Mc$rcny~=Ijjsq~7yg@Y8ZQ z1Ltvzo|5DxKoqFOuRujv5gtm8a4xr-P83v6ipE-COAJB46j%ya2nfEc@TAGfHiNys zCd`WEZrVP$n4pQ$ft;U+UVNBqsY;3hukyQ8r>Ts?;16XC)8qzCM))HbSagWDi%T45=J?|$%oX7w3Z#S=xZt`c1MycH?P(yy)&bI zHPy3lJ>I3yQ*HRL@xr=+?uO|PIsr^X++PwoEb6Xl8#QYrf2W_ljAI#sDXx7*9d<3C z<5}jAlCj3=n{RA)};iVtuW2NsDV(z zqFgUyLNW=2&zGuV3SYG$xv(H#E3F}w;i+ToA<}}M<3C<(e>-AWt5!v60B}=n z1fpWl=nsA?rRasMs>&Xc@3`2kRNVLSg+A2nrQ|8}anu1XisO8pa+>~o4!^W7+sjju zey5eygeCww7q>v}UEd4}rO&Q}Y{NLBj}R#aVbP>+*++|BRE7zLT5FflYdK2MWotpC zt$v#C$NfO2!?UQEx`Zja+mC2H%c^04k`L-63bbx?$G&qtJ;{^oz>G3e!$(0opwvYc zY--M4unJd&K!_M0b*j*)ZZ17I7Lz+gzCk6iNW1%h0aUuU>rGTF)v6FsQYy23jmk|; zqG2m}OEpW>8g8`Tz7<&){nM8~+sLTJK$(-TKnatz#Ie)l7kr=Q&D+(52ugTIKAC^e z&HIXz#0Wk_BXm;C2GR{&q4_~xL1l{-{_C2%j<%1jtB@gfq9#V=-*rML&$kgSN;Y;# zbhxE7J~cBFvHO+aE&L$T*=Jayc=&R2vI!^m z6MTUQ%_N6vvNOR|+bT?uMLMNP7EK&Av1Ognz>H%Y?AAQ5F2>pwWYP7iI)t9Z@L^vm zBhv?&WrDLm^GZtG6npwuEB4=M^uWQ36ox^>BhhKuAV1=Fj6oL10(~Rf)Tc2 zmomUWV1p@{c-6qTTIz_o24uVnnn7xR+juE(fxnA?HcCs zqOU%K^SfD7TOj?SN_&0OPnJ(kmyXP~OF;&GX}r$KRC$%E$JPnmiC_IUj zhsGciZOy`yfO0f*W9u+Z*t{|84SD00NM_9u1R#+rt3MjlpQlkt;;o+OA#hUd8Y#}j zk3U%*zkTYg7DxN-4V90d z*=vK8Pu`z9An~l?is%c3!nb#nk@V(1bvkVUGkHWJIG3~;^@F2(VO8QOvn#02yEQd7 zIDF&}R{Ntq`~*xn#H~1d5}TX3bY6@_T3Y*tJiFXv5EuhaQnv=8+tPxV7Y|U{N)w&v*+smd&&#M+9fRnZ* z>`gE!MJYgWfb)6&(Hkq4SmdW-4Wlf4w0sWE%4nyrY+||E%$qdh?RYkl3*xF2VtBhr zT^USbB1cGFTLxR9SWxkmQut|53H73;OvjwS*HuE|I~5K9sWcRRrjIzEI9LjMP8kbr zfZb>kUE@&~u3CA0mF6D19-f+QW2E`k@X>>GP303K!=<-5^giaiZ0jDV;S*`A_<^Ez zM;e3}<2gQeBT?LT6@tVgPVtJcO^{SrncrN3S25Q8F47@&NK6rxQ+z=v%-*|}u=%%8 z;q?>}J~37DtI+wzdue;^%5<3(N8FI`*yK0}E)j?ioFRv9j?U$Rtor5&#j+w7q2~(q z#>&t{IE|Z}gji+XuwZhToFuVl)1?&Z^i#J6`YaV@`cL#Ok9fn#OQGTvp;C=`6vHTr zhB?4*{kv*BNp?_bNFoj|KM0C)1(IuXyaGKuLrcF7m}@PtfRP%yv511|uAc7tGI& za7mYsqT1@`!}kh`H~p^^?ZU`OBM#D?BUNiDy~#vtTwjL!FP<5Dy?^C#OC{5$X$(Sd zq&}(Ye4}8F_P%v0C#l1&;F_1_AWBC-c{f)7;uNbd{}_hvuw7`A9M&(MdSSs(UG8@5 zfZqt(h)pX@hip;PY*^yp+QpU#zGc1_40XK~kJwd8clq5fYh7vmBCF|Ibka4%mh%*C z8xuKtoQu_W(K_f7c=HZT^`Y>>rFx@4R{^F;sBRZPn5B}~C1s{&=u)(|L$+;mE#vPX z@*=BTQFhK-PIaKUo9GjL0+)K#^?6`=W0%O7+h_+DRYHA2lj%PJ0hMNeGh#Y6@K_5@ zB^6|&9S(=#JM}bPofKrTUM&Sdq0E$HOF`j7C1f{V`ph>TfS+4IvXewjLU3O~S@^+P}fyaZFA?XyD4C<|xpP>zfRxxh+#4SIc%SFNV^UgUda zB4l21g}Djsb!~G9o1`VnTc|{o`5VV@Cv>-LLIg4)W&VCFA4Z7ko7zAW{77=oX~t_m zkZZ&sSWUMQb1SHYLQolCqH*#|n1W<2%RGx)TziDUN^r-qW5_z*y0 z2P(tAQ|R?E;?k*VN&Q#kRhEWkQvOoV*ksCGPn%VXASvFeiL^u|H*+jeT!fWGo-`PQ z|Ks#b#TPM#Yh^8Ju85z=uT3t+zXwMD3;$MDHyzj;#v_#AugBGY1&nf zryHB-`&2Tr&Y~iwff)zA=UG#MHI5oZWOoiq3~L?)QOQNG;x`vyB17HiT#b?;U&>!H z=JgOC9#buSjDeV)siezM)?hV8X_OL+;q#B*aZ=b;Ki9Q$H`FHzob}W5uv*b`Pwee? z*ImQQD=m#r%1oArZUe6ox-l7%;rWcysrAKOyIno#w46Z!{CC<87q4- zb)_B(1!mn+3$^YxuptGNhNfKK>KMMdP}&Jf&3x82)_T9ySKUtaQ@Afum!FaiZaEtg zRf3NBA*#N4Y)DJHj{Bjg()5*hPR68pCB+Y2WzqA4gfZ?7>FE!N5A@{+4~iz$QhlLa z3|pXb<5avZ4e^bbsT)TAqRh$Eby;|=(_hngJmn_8VU<;#>W3~i0azSa@JvH`Dm=xF z(-5CmGYyfn0c-r!Q;X`2ZDUB9MWHdq;3I;1FY0v+*-tf9xBuwggN0x+B(37Ck2J)@ zVCK{bkS1^gM?p0W@|WV}x@ajur=g096!Jifq1uJ}3KGnwSQmw;+7dg4r+u?lZ8@?(XWEup&BU>Hq_|QrawZgC~{Bkvr<&W5mv6jL} zNp0{p8janISRnob&V{KN3I(WJXwusv-!qjEvRlGAVGb3(| zVCwahucss0EU!+BFw3CcTbg03_sC}0{N~QIKUE$!%2v><42_g3F}+MODpm~hnrX_A z4_l~)X;uca0?3wKOw1k6Vp=Vw1=tl+rCJWFZc-=Sd|{3%itKNaOS@>8wnLkNE*QnD z5C{m?Kr?pHWr8~0yuwK5rH@LFEGko1iLGaUcgRNDh8#Ru|r^V^V;w)0jeenHdG~mCY#V zc9SL*)pxRfxUCb?9j3bPkB;LsY(s;9F5DMnqBve=k3 zFg=)M=R=j7jy1Z=k@kVc;oQy2<4pS|sCtu>Nd}c|irU5GuGSuVB>bovGb^)5Hbh0QUG#%zMBvTU1jTlZ#%33csa z;aal5Q(w`67HBil<2&|viAkYoy)1Gd0t188DR&b z-g73!DZS{dEov{{aRqF{{vK?jt~n-UX={kGWkU*hW0qINZ)&)MBg%^1&UNpbW#qlT zOzOwZeN6Cp6PpPtTNLx)Uxi@+Gm2S-wOn$p+v}dc&AD>bWoLvXLVgd$q>|e8%~dXW zfy(dZndH^hHayLmZo_NwCfQWB3rzd%MIBTkRqC>GmS|R-p%;!xMs4%Zh4hpdKA>x6 z!BAt?%=V^P&J`V)A5@3WikIJIR*temj;3ysQ8Bb(VuE814TxuwMSBM2jq!e&xm2fS zCV63cVlSzfplW*wJtJ#}-X}>eGy4#0rl|mHi^ScE5PIRsZpuhpJZo--9MN~FOcxH7 zxXT}OCS)F+W-Vjqnsl;k-c23Q@WhN+E?yN!abAaMeXhOqNCS1LTu!5e7tcg{=s!K8 z%HXZi2E2#oCRw1_dL4mHscSnXJ~z#pWizXjHkXrk%QdTcB#(QY)$Q zQMBE(p7Sn8diVnmlSU}0STpdUyo+IyQOh~yl95?klx36#y2azT8)lnjQI=DzS=7sY zMYCxZP475s@#x%E=>KLJ6>|knS25kwiQI%2s#Oi^1XxLZP1w^;CfOA!SKQsrviLh> zH_5ALMz}$Ns)MCw4OE?vVKT?^K|SQnrxZHzRBpg+O!MhMD^OSmXn@ouTk*E8Y5nw_ zO}F28i_nA@+Ct@(hq~#SWaO_yn4xOU4Z%!Ig&klX28!3uP4!HsNpaK;D?b?vBdlvl zG5oeWFehml;VjxN?LZ1Tq9bUyKN#^DaRJz*o{DI|=^4t1v#QK2i?)*e(n6x_hz4oC z_-bkxmtsX|NweY<%cwfwg~^F2ze9ADZR>#es#Zpo2bi9R8?dJGMu`qAyjt^$*AGrl zTeVy((=>|E1@OkQOfO)_G1nl=vJ*8QcN9}Cc0G_jN|jnk5e*yT%97`e6{b%2U6P`P zt;QWtw4uo5;i>?-oGwu~oKxWo?m4K^<%?1%%plaH3R&Zwf%#DN3-%~<8?MSC^A7a! zD_W&{*i?mV?0Bt0L%Hm31ULt#Vh-cpQd1#Af5LtN6~N&a|Dc=-NvS1&FsmHrs*u_3 zXw_3SDilVKcDUfez8G1xIx3#CDr9z7Rk;$Q{H4OAHy5SAeWP*_vL{9E0!7eR6_ve? z(F5orr9xel?}D7cVW1e?`A-S$=~vewWis!(rM&P6$*2T(cRrpp|LWx z%ZGBDZGg{9IYye`tu*mIOU4x41`*H@>6-#H)!Bl$GUDxp%ycyzClYS+gThTXpSn#j}(Cg+3KAYm{T&aorfLNl^L({Cs7_z~7ppZ45 ztQ8yxlHUL$3MP|1MPH=a{+?Z2Ls*IQE^p~3XJZ+j9HxJ9IBarOU#C(EVhHT<1tpDD zLOTGk_mu4=)DWxSGg^^&MId$DIJ(LxoaEZB+{IS@k}(Y|1PU3$Iw^xvzUJ?XGT@xG z)7iMlIbXUxMdv(YwyCcoL4HIlv>J&&b-{I5FixF&Z}rJ~qKz_FjRZoYSn=;*;8u3juYwg_o@qR+_ut&5A@xyjJ5`v59)h%-`hWq$VBjtvE~PxYkMU7J{snuB*I+ z8X$JBGRTje4;3?+e}epYPk`M!mpjRSR1>NQ!cL0=9~f2Cz1qHR6{6!)Ut-bZH*bcs zXqPahys3Tu98n7VtJsvmomm$pV`B5GVthGzC|V#2f-m`kuKs(NkaUELvieh@ddO2~k%ex@pW3`k zwykloK~C!MVaPsRcmUcY(`#>XnA2*5coZ`#yjSUDv{Pai zZ<5jeVt@t}f=BzC0b1h%*UlP++9ENUt6>H11uAG`#At}Y;ccn>muF)wu5ne0k=@hZ zcQ(#eX#Q1<=Gt4M;@(Ozn!9kivv{6Dtx1gL+P2tP+pM7NFhIk}mwfwCX7W@6G*GL= z!#cjcI3z~Hr8pJ$TE%EkvR#eE3bii{(2AyWwa-kHBsjJeJ!rgQmO(VGA+)#@BBE5at_5X49F2HqO+j-bc zQ`dGgO=2gun`Yc;#<6eODeMzFOIu$&4(dtA%}mma+c^E!-v7V$ z<6ryVM;_Ui0QUE<{a$g-9XXywdI98 zRox_^tq`(;%~fH?aLpsLG+`)%GzF~CtL{+F4JS7OW<&*Q6p{{U)=o@f&c*hV>#AC3 z(2pgHS1589Ocvmuf=gZX;a)p`7)HG3MBTg@`k zv~>%~9e|yaWE2rNiR_y|?o03HlPga?y_c*~a-^)pY^lgPS2rw1=f}w{H&bRdfr}tb z&AH=x=-d+XE%v_4GeT|jfzJN+3$9GN%pB3uJDz znH{3<&_1adcR#;4LyY4f4q0*$RGptG(4UDDSWkFwvljAKJ(7 zway)bYx*(h8A3SHBMZ?X6;;-fIWG&w?8}Pc${WRDPk^>RJBkAVb7eOG?Q?L58wdrC z_FXB$!D=C6d^DomKJ!45n+==WjC1wAOc=z z0bwxpKi*=pZo_VgeW7(r?0azO?+ae*v_daGcI0O2K>ndezxcG~pReCi0pECy=Uy?e z0y|eo=V-*GC!v+29prluP~;@OFt=+ zk4|8+h*=QhbmyC)xf*awp$Dl+;*02##|ts(Ml#QRYoA2P#S^JY+O68wLtllcm2X^f z`6L2!q>BtY57#}~{4SaB{O5!=d&+W!!s>*it9Z)^L1we(SQ7rQyOh93CO44m@Xmvk zjZh<$A~ma+H!0s57MTq^42V!_&BKBqwnFLPh>kqC3pDt#>L4BH;9Lbm01};$$+~=bsj&bUuO$$rtV5~Y=qt9QBfYz2LyBP5~1hQX_ zP@>pb7|&(W@Dy;om%zm+A!71!Z26+1c<=1D{BWBtPvV6))+XFBK8}t!7G3mYz^!X- z`D~=RKH-x)l0?uOB3ZNwFK9VOrF0x5US-674ZD^v=?V5&=ftv)z5 zQmqdSrXAb2I)(0yU75mk=AXh)g9P4UG^NhlzV!^qkwAvBP$DDp;aJFycijgBwkgCy9oQ`x@-V^93nVJpMGLnRA z9jB3Q;E2<>a>OAURW>l$U+~(Q21P`;y-c}r)DDJd#k)jI{50NWhI}ZGjzudH+%Y2* zj~1CBqwi|m4O%SS8JX_bzRA4V_@99PeS$=J3v>;|g_Q1~XYP*|eG)KDE&2qD#i=*- zDJc4c7_)8|Eu4u-dRSUqDr}hb$?6eY#=7_fE7)lmF7vnvrgli&yi@t1rajH&zhOti zL_EZlF{3@OjH7i-p)3zv{dF0JlRy>Igz|_t=G z582Dt5L{cr)5%=}`!@kW2MGnH1%e)KAfcJtYs)#jKB&|41AS zD9w_`>hW8X>c}<1^eb7p7i~P0b?viR;{zQ`=B}ihU3D_fnYI=0N0@P z34KjZ0B0wI#rV3tdOcXY{^H8o>iO2`*&t$V`6MX;Le;k)LtHKx99)-hnuNZ_F2%#H zU(9-Unp1Z2F>%e53?hTlQ(i7KQ3pK=xp-?@%E=r`Ot1&@6T}LL38`w`TT zhAOoYl_y=5R4Et1limC-_0lXJaAfQUHoGhS=(j7Op`O_n=4J^iEIvz3{?@mK^(q~gVp-Z zvF0v!Vv;ZJ;?9UKLWIi$yX%#GGReMba~Lx+R34Vg9hXScU0x~uW25>#Pbk|lG}df3 z2F!wW`n#=Kqjj*Qvahak@CpR_%A-SSqTgsV@zX{ep*{VL;YxF)GAcJ0K;+sC)VOub zZz|tR!xu`^ECvVOp9G|L;WY?*Jy>aeH9&HoGoSKvW6oO9V2IUBKgSR`?%U2U0vLlg z*c_@<>pkyM&QiD@y4%=Ly?zFd2F?r=q}8-)%6y&u5wur3%fakfrwQZ?$_-sdjt@HA z8N4|Xy<>{bSshPE0K=*o$`ZQQrCucyJ=kPEMXCW zvk{v>ry~{U=X})!jI*S~N=(QQ6BJt@WZ4mr`vU z$0SmfSZtgB2*d*+)C8mn=ONZ(f*Xs)PCX*R5Wq;7=*U7#94Q%sH}pKo>P=~I>6Vk_ zR}u($tIoSvJvf@&KL!U2Yy+>vyIL^cNv|F*+Tn~KmAm;E-5LuASPo$S+U~@*V3CA% z?G*e6*yx5`-2NOX?)@&o~9IM6e*Terdl`ejKSnZAXDZsYx`GiaK3))D6BTd5puS5ouZ?r zEt^1_`K)ofVyeSfLfnAW=AARHP-p7rIm`v3(3o5rPV=c*TAq|)qC#PGXg}he zW%CI~U2^!PyOYRB$jL3u*|a=dk@~@da=jQcw?%I939ry^i4GcD`U#qar;oKRVY9y@b|@VZH+E01p>Dj+J` zRvxJ|$NYg{$s(0GxB^L+!-Y=m*1aPOl|p_H43=V7aG^`d=iGL%8|M=*yvc^KIy8*s z;c|1JZ1*q_3B@553%J5yDU2T%I{k2Xo}fpNzw$2A4#(hR#{rG4u z@7{{wRqXJq{NZEPmVL!H8AhDe8L;~<;eec73tbn#l{=64&L;uspD}^pB3w?B;;oe4 zQHal@0!Q#6GDl_O|rdVJlX5eJBiVr4UZbIC z9n|& zEGW*+<7v`ye3g&z09!nU&~B_fqrmbIv2M}>*HpMS1`E>*spSUHx_%fZ3l z426GDH4oQ8(*7qVBV*T}kU+2B9lHL6S!KA-e#20Uc{1p_A`|Do>rYHP_^v-u83?*Y zn~>(+f5HjXy8a}~?9ufH87i7j(x_CV&IexoU@&4^{x#%&6tZI3}ET_hCWPoeGS`BS@DHN6y)4vTz3R5HC5K zR}kb7Eodyi6XE`^T=&CV87DSL4tQ@wW~2g=&WT0&ckmIMP|5Z>C~sIQ(J&~xT^3dD ztS`Ez>vx(UQS`;UV;6PGTHme!W-i}aYR7fPQ|pGelS_%7N0ts_xWF`U1frX6xg%=X z!Q73U+aEH^EGB7SCdqr@;_+L3$7rOrHTVp%R;qAcL&4ToDPtQT5GsecCvpamj zhHy5Hi7+0f>ps^9aaiO!(;S{-=`vl=1WcF~CW}BmJyeVZictv+1tK1kC5M-k(Zko%lF?mswUjd@QHXj9<%oLh^kjHLq< znYbnedoFE5hY%06KSoyPs6vDD_MU%RbExay+0QhA$5W`7s&%Rd5*-O=rSVs)Bcsjg zXrt%V3S|ST1-s~QCa=|krW(%V27Ao9~NV1mH-Wcz5TZgm3Nk#jlCngt7PxZ?IN5ZZJ${li2G(jE|{Mj za<^+gIAzqLB-yhBkpn1cQ0pDZ56 zs#;rG(4`7zJzj1Yst%2n@qhN1{52XAh%gZDRm8#EdbWFL>6dL~wKF1SfZ0AvUqVQ~ z4P55wvA_-gp(i^>PmF7TYuzP%(E;HP0kG|0e^BB;2 zg~lUzkiwM81MeZDk3ZwB4sla$%xpt zYE)HYEk&FS{7<^i$72OT`zh+?%=OLz_ylKpL2`soJk)J*U3+{O1~(w9_((QlB!!JK z5cd%{^b3=h`FMM#jI~HM_K4i9#*&>M{Lc$Hv=25b%+_e2_i2LLFy34AI3=x_pjkJh zb8dxd70KPC!{Ncv^s%M@r-O5;=vHcpSvm?cW^^VVd(i&qdi(4n;;sesu=qQt@m3cm z21&eq@JXb`&f{6Mo%lJ4Kw)CE;bE&8z?t`M^OGWG#?%{r#LQ1tkwK7ZG$5OYm&W^H zwlV4gJSt#uP@;1eg-n9RB9waIr7hHjeW=1Nq%+2R20_d=eYBtd4Tz0h+beh4FBc#~ zVfN?(>i;f$VyC__#b!*rE~kfqE{9EE=fN!gH<=>Emo<{!S4g*nr&YxJ>mq}t;mEKL zYG0ivq46tLr?gmK@tgiey#e9qD}F^`N1i?F%zWj1qrJ5~)p{tWG==X#Mi?v?IPcPW zNST>#9Dd8C04v%$2#GkcV6RgqW3B{#1!w`roo>Oib7ZK1Ok-rS0J+XNMzwTkU+O4C zhz=*4Ji3%DJSK~QYCUYHm%r`hjIEUzmb0~1e+^h72yLW6^FkDQlDcp~gtZd>>UB9g zoMq=eNZdPM@Pr|OJt)L>GAGb8$c+sxcV zy}s}aLrNrxjQPvFAbOLyB@hVdd#L zf%ufl_taM%8QNVTKT`*5i%uJc#`cy+hDLUm_c`|tYK)ERtJHQinvFpbXrH3i9mKYA zaT<_c;jPt+^z``RHZpwp%?*yba|3Zt9W-6Pal>E%+J~aLX{GU3;pSc2=MeV!0$qQ#y^IF`S)l2j1@wxk++IbFDhyV+0I{_JZWfhPPL(#v`s(y5fbdOlJ<`a7`%@OMF z7hi$|M};^EV&2vv7Gp~&bO%jMJ_@H7mje=O`IeeJ7LfS3sfl1Hm7c*yPyZOb7Py-& z)>DP1z9XO5D&;8Y8>`eCBR#zcBQlbsCbggS%5KH}yGr`@l+_ndpm;Ro4IW4ln;+Yh z%RBghIeU0Rt~|%Z5|>N$j}H?hCOLIP?n75*-df((pyBpmW{1j0ijDs|F<=j;QVemg(UDlo`%4nYqD3Uky{|ykYa`oKSY&WdwJ98H=VLCF6qmu+wYVK z;7q6OPIeT|hyFqGjtStkYw`Kvz4ByzA3MhVE@9NEi15F5&yg9Y#*@I**4J4bfqgrmT zEu5{N%i-h;yz#Q@@&m_fu*+{855?R!*fq4NS-<4RGDjo`~hOuD$d}ySVrUgvYzgjh@0TfdFmGA6P(2&LrG6g zdZs&bTQl%{XH1WsN7#xW+QU`R1d?L@InZ(HF7-djERVt?93CwWh1B>z43@Y-K8Ta(0ir_<6 zj=XFam@4~WFH)D)Hv1(#@)f34ziF>6ohCt7Ie{oa#2-P)?;%25p48~vSUq7)y-*Xg zN4=nFO~Xms=c?XYORn5ps9UG7R;NHl?|YfNagtJu%YeLd5#E+$5J}dMxd^>mt2+_5 zR%z>P+Z;ryZQ{K+W8aq5&X&eN8E>poQGa=OWUMZg^fhV}azpc1i`aXO`mV9sV3{7` ziu(|fm$6oTeV(zsb9h#8c#I$$zPus! zj$HR$Tpb# z`tbZ2?&)X+OuN0kX4EmzD9{lJ*F9%xb6o}*+>gfYlZ`}Uv>YXn3^vM`V8zzUbBu=b zq#OXdE;9j8+!R6nFm_{fz6$V%rNdYiBm-GiYG$I?CyZDRrvCV6uxk%%2R%)hQ$G{M zj`B2eGEPzr%1EDk3%Y{tJ|vNvpFx~Y?9nrVmU!-SNBw4P9vj}-s11&$2bjFSJl2`x z9flROG_&*$JbS@G836qUG>+a*b=D23y0zuFN6GV_C9nHK=>^Mlk?kuS?Pi{m4pa)^ zfgS>~yxvU4_C55z^$upNLsA3gl$F@o9P8DnzwKGG1`b!LPj?$=A|Kn{aM+qFGBYFt)NX>qxMa-j8+S*oR>eJiynj!#T6c{{1FygW z(qHXRqvXlaX_`glmWmG?z}bN1Nv3nef!XrF7Evj-p*x=ZP$kpO zsjy`jz236BdNT8n%ud~U0&lTq!OM%!m{bHSP9GhNBkk78-b(FfNH@VW{ihC0Cg~Qm zOM}}`A4;0fv)ACx1C65BCpvz#=0CYIk6&;QA3*Y**#1#B3d1Y_C3QomSeY;&99Ks(s+9(#&vdLo1VbU;i5vjm+^v!t9Y=jr7vv zRQ|gtHx?^M$-45zIFvZ}N5yl#yV{!i^n08{bPun?R*jPHC6{ijpTFsbebx`upiO)% zi!3d*Be}SYq(*5Ya-OWYFGvG&?zmca&%p`s!+09Pc{9>(yj#|HIv#|O<13m($}H&{ z8id>P)F$eK_8XLNzNKp#%vOS;p`;j5SsKw(2}1fZJrX)54VkQpxL`Qg6#Xl9D#i6< zrzqE%{>LO2d+@#1T$3fA&Sbd0dIau|W*&b@h9&p!Bo9@tMIEm8jtuLZI+~^@)Ua_G z)|#I|Ms`yvty5lyrfr?MBS@>4#udL7Aa#E>Ida{Qs>v{PlX5n4l=2lB*7|rU%@wKJ zA81%|5SBa7(}rD^Nnt49G;C@dkzuV<2U|B54D7rNTR(Eh8Q8xUfL%S~z`iZRAQPT{ zl0I(+qcmEn18Eq1+>1vzjv?gWbPmJ}=gfmYfX_)0{%A_c0@w}sZ{qu`IY+ACGzBKa zEGG-!KMBB=W;&;@(XeSYI3mN6rw>~*YT7j{nz&NKP6Vhuyq->}hDGyzYS{e%wZk{k zxzeyl0obhx2lm|n?BRvhZI$(2Q`;xQ+GlQ1!bu*t+cKuZiDva=&C0OO$wRHPr%a{NHiUeGC+trTk_PRQ&uL>R)TKGR z_29Q$$n4EXbX6TF*DF06Yn1_b{|`v^rFqmJ{s-1}C3kY2)*15E+OiS@bWeiDLzuF) zXE!w4k!nmXU#E=PO5_mwNor<`3$7W-#S_UB zWorgb+?v0pElz&md#rI*a@2DrZmk}4mT44bG5ALdsrmNwGni&Np zWOAqyUj%WIFc$<1O~9;BV6@;Tw1DKm@4-(zVK9g@f-`aH7niVLu#mz{366ZxFrK+h zE<$jEQo#g*Z85{xEiqg#+MgYT6kFKlfD9dMhZz%GyXfYGmqR3YfQIE1tm=b{g=K3B zgg#UrEtd^D0AnOmHN?QYdlWwhiNKaf={_d)^K}r1bVW5;Si+cg1#O)@ z*_u1v6%;AG+vgs11x@Z=Z(pD53Q9ajC#jE)0OcY^qOWddt+jYLS$aSMMwBWf^z_J& zLf3Duv`${^t^v4eAD!tIy0(0_JLrRx-HreU#)+(N>VB8w56-=Qd9kZORnYD>Sh6(H z{h;1!oxa}PNI}Sl)Ya8mnLGv2wkxP%0nxRBdFqxbaig0nT{Qsj0NAnJK^Gsb&tB;Y z3XMs(YoImpxZ4#-TosFJ8E%m=CJTnudeB|BDD%j2cPon&9^FFG*7>X54HmpOyQPYw zy33W-x;#l4PP$pIh(XqE13Cu|c5YtkifU^ffyujMt`8q}&dzp66%6aa%kH4qFpJY& zLFqo-<+yehCU8UViYn=cbv}~ldTq@i^ZjynRB?Bjffd6g74svu5oluXC^dAb4Mw4k z3p51Yhh&_#<&{@nBdLW8&Fxqyq~wOepIc97aaM>WczJW~p30N%L~H61`?M>~m(zsS z{O5RUv@WdNI5JFuW>!B1sBf&ek$vTTJ&pH!wj=TJD8)~6FT$i)#wm309F;&f{I%rz z7p?2(TMsCRA^o>;e`TOCOhj4jY7)q#!5OSuF22Y~?ewBC(|K|cvE}j+&6HFwd_|Gy zx<{wl^`cK;0t|^7|3{S-kT#bYlDD;jzgzrOTsKIpF2X0*=Q<0d!NA>=(uzKOq`pvp z^*_u#coY)8d=l^Dbh}W3y#VC}gLBL*m@=Ye^4vmt>|8=NMyMZf=V9faGyfUp^2znX z&r_|c1RzZwE?!#Qb5p1VH!D&V=ol*+Cea~JsOiOmis&(aYPJY~I3Tb9KYm5RaLi7< zGdv|nssrhLtv{*}E{WQz%!42CIo6gAr0;M%-p*daW*qNt^t@3~uhs%4jh0!6N%y42 z1eI(t5;SoJqi>$rID!r&eP8R}H!{$u)ASXA@r=$mM@xr2>FFn7Fhd3w(16i$Cc<_$ zF0_x{ffoHKsLmzpnr6*ijnyQC|c+7^u&><<2eqUZ7<%@73j5L@kU(U zaAILd*xujfoLu@!byGEK*YH>!`qa^CqyEqTw6*2dmZrdhp?{@+Xv-Oe7B2x_qxuIR z(rYy%IJTPJW^R? z)p9()w)zR#A}jvl>F;r;gT|G132kat&+5IFbpS#Df&tMnsYSORCCV_ocyKa#c*!Qq zolp;{N3FpK&JQj=bPHWx#1yH(v&067$6h=@XD-P#X*4Qkk9k@+>C;GJtrIUvzxfEw z0v%z&8z|nQ+LLLBi6W92=dmAa^2b2BB(eQES58yay!6e{ncO_wnnsK;#^`D>f;3OE zJ%|7%>EBX!(`iy~G);Fw55zEfWM)Rei72pI4&o{BEeQOjlP8p0jg01W3~d(D+*%@b zDZTY72?-xIn!E98Z&a&lCUY{Q{boefFdwA;Ktn!tqkTBl)~LC)%VFn2>Tf)$&E2pL zLUCF_2x9|z3Grb-y0jfJ)DTVw5C3$CL*B*Jb(%cyggcJA2B<#wFQq^_$G5jNc2;Zp zbt>Ccut|bkN)J%_r}4h(E)ox@@4S(07f`9(wyu)OZ3$W`r?cboJ!*vhNo+)G@$CBL z8NHh&B4{MEzTtA>9A`c$D7UVeBK@ONc>8s}|92Q9-eIKj)V4pw5$C^z65hxsbAL)i zc5dE8$Uy`95gFDxf0kO$(#{SU23uaJkqqo7W!UVcec)~+FvY<0vh+oz}LoLsyDi3O&q0Tf99Nbdm~1eprO>sq}YD8%wvgLXvz zvNeB#jv~46jq+~l*jwe%0R$+};q$ZZF|V?u0SGy`NZV#4YVx!5VSVX(>&!*X^-AwT z%4Qm*M_X0z2CdU~9Fx4M0E{&9maX8R3|m{8BolAm)w42;)a&-H{8HU;~ z%dq4T3<8who90cw5`aCUYoMWaL58irxYAnu%)nsk`!$YPMRG^~7P|G#KiF2KNcFw@|$S|07rOE@{)BQ3GFCv{O z%OLJ=$*|lLP{U6WzS>ZcCuhXXJSFLoV|TLqG# z*}&&7cMd6)5Tpi3kp$DLpE!U3!<@o5qZmVm+0ce*I$HzPfeRe7jGlin09!elTJvdY zKN)~so@_n3*P5_6%g+Xow?A{Ft)B?Mkc-ORfqw5Jnk_;QaW}m2n9+H-}~`Q$w-XwV9I$ST86- zG3_@tb}NZh$Vw4`7F|p5$hWwP7LPl>2wUOu}mB1tSzo#$OW5HYgSAvF+Rh0%!*5rZT4>0U?Z` zSdph^F_f?wXfBm;oTG$x)Fd|Q-AWCi?RSkfD8fP*Rj%$Xk2Z=R{wrya7DCRC4%HCb zw1}FOtIr{1_>48>KR;F;M6gu#<|6uc~3|bqqo74&DU7V>-hg2YEYK~u)MXTRY9jMl6#I;JvN++{* zY*%h3P%kZ>Oe49ySsrTaMIbUH%Tkdzwt|a$7?L@yI2~RoY_^FJocI{3CvChM#%?Y* zcMVl3?pXoB{;`2d*>2KbN0T_&2sLJ7tvXVsZ!7OpgV2M&(-b1&f7VI* zMr*Is`w-s6Mk~W3L;y~sG!f)8I4*6XI#?la|u!m5JS;QIXc-({Aqyff7 zn$tApIM47lW8%FUBwtQoW==1N=|2XL966)3>CjY&0(4;Q*IiCg=9xZ7D1_d zfBKI_1yeDxMB@w{C&oQG667ga(qvq34BXIj^?Xc3-7}4mTtRVp3FHAUPY9c3HFNu#;n1!G= zaRAIu24>Ga8DLI9-RL$8*j9nltTUB1YwANHkli>98;BW63-+Dr z@SaL-Lt{9Qd_|oEq|jCSiP!U8OR-p%5GQkCqL!u@9(iJ?3%2J6=*m?rhu8Xbv`zy*sVe`^ual>O*ny=#r(A zoe44=+c8ub87bEq_3CcY=`pXSM%!!H@Gt(Wx%T?2kjKQFGFzJEk$PjW+)Q(9%I6ZV z)@_x6-FWzdg}|ufAkj_`+KiEFw_{VR~s0V1`VgRc+GgfQ!5WvhpQ;pd31PNnORFt(Iy9d9q~=2 z8&|R4=qG0&8TrP(VNA(xd?T0lHS3KY?3mq+y*B2*rNxxhhW-S;ezS%ijSYm$ksufn zQqOQ@L=d$z`dcv9jlKJNuszATL~iKz+WtyCLg>vsS{#!pyk3QjuEaIDe0#Y$IJUDo zK(iwwUN7&&zN-xM)XRfCZy>8JiBU4NuhML&5N~oZNweji{pCGn=g#ooVA$7|$qG;( zoHX(qdUyQg?9T`b^EnDhZcy2os9dczUM%>-_DUT?l`W%O@rI#FZC`n3l@apBwke`Y zNLA#4q!@Ja*<}PJGt1KB&i%s;RKPr#rGV{?!CKi~{mhrB(M^3B(>o{IYde~aVahdN zJ(#zw-PVWP!gZB&N_}P*;k9Xh&l}}k`*x4jd;0e`YV`(ff*h`|vb!=eFoJBtQt7Le z4=A{J{{CB(|xBhvVRZQ zX7;H)L%B)afsq->jLfinoD0M|4P@fl)hu%=F4Yt$-E5NE%nDJ(e6e|ZjNV&ly!d*< ztm5^`NCgK|)baKM&CDSLqbeJp zJesE9S&%oBMQlk*EMGWyTX4c*Y*Q|s4;1Nacs^_1t5gclv$sc^m4P7y&T{z)fA5@k zauv>j=RoX$mA&=ddK!X=Ee*Y=f`GTG`*S?ft^#32$~i`E1HRSRzpI?w!Ykku`)h@j^wvkqIGKv5Y%ABHu_;3I?jFIY z7B268Xt{C=*Jg#tX*$@f<}_Y5o9c)3ItZyK<1<`lj$PLDK-S>XmjAe8i1-xidHC=B z14AF~+m9Y)8tJ<_MnJ-=}TseyRceqh*Tw=as!ardd9n zK-`2kcYaug^q#NkZM8@=^(+r2R1&0|RGKq3tF|wsTN`8QLdq96OL4NbQbmjkIx(|S zPIJAvJT^MggKSj&6-xM;Hk^kUe~{E{+bX-tuWFNa8|u$i0G2zY1Gu*bhsT zTN=Z(+C!zzDHQ@$n`VUtFs?Ki0QEL^50&e?Dz#XfhahOFI;*sUQfkr>9H=NKxdd>? zC`pMRl`VS!lDpr^Qwy=BF;d-W?qvaT;9zuB)_1o6=3D6d2<{*e7^-vO zZzo$PytUketb!lVajnh_1f0d*&hh?oy@&Rx8Y`w}nq{BB z@0Q^j^geh9*I_-Q;Et|@vg}WW1a}sn;Zl`NcImHS*eJZnrw8>b9gSQvc^Y~0{FVJi zb^lPsVU*js7DNto+;xT`@G34dO(-{agNqQ`lE+4&&}QRHg~f zmG%!+-haOeC8StLB1w68kA8yAefvfO>oZ6hGRpvX2u(H;TT0|1iw!`}9w>dQF)#!L zrTArEvkG=7b{CQ__#4$LRoRC$YrAoh)O$Xxjt=#_Qf_{zw+9~%u+^G4-E z%*kl2(lfRPcBwn|DVZ`ycx$CHNIN)Jfa66qv1cQwNPt)1eMd4={!6GWtM9)r74_3P z{ID#KIz6^h0d#CaCguH9nNS?So<|uFUu`p1Jc;RvZ5)k8~E$OprVlTZL9}*?q&=Qbv!sD$kd`_VS2pG z^cH+`Q`Elf>D?D*@te!^d^R#n%$6qn)v;P= z^&=vqJaJpc0<--JG)#2v=Q{Lixdvs9$fFhe33h0EZ6Dr&tkCZ)dYQ2su1-LcUwY4s0~lz-}v7(Ym3EdWXr;>cd;Nf~g}) z@#dZ)cC#6$WL=((O-<}-tO{}Yy<4u4z|iw*1F5XVZG#=Z3rBZ7JzfBoIoDh0NnpA5 z;V~t!$Fbb@gomq9!yZ75A$ewFnK*>Bp!Bd6E%g4;YBTgT9fbv4csqFLNN|xr)Y&ye z14i3tGo%u!eJT4&|H(~1_A%}Kz&3gn?H&z|+K$GDm1YkHwuY;vRQG1Q502DiR`^zB zP_JR>L(=Ru8w2(>Ww94{Jigw7U6|@|Be{1WgH{2ltm4Q6 zQ5y(DkC9w?kPeCJc;>&Dx1wZf-57T&Fxm8SBWW#|j!Jfq&tdndJSGjy=42)(8z(fP z7k2~Zs%W-h(*h^b=NGU|$GzVvmy-F4TVf1cxuH9$xev%NoDnAZ1TTL-yhG{7Y?oCPctr(5Z_OimyXD#X zM|OG|16w~gvwr1?@fiDCGPO0t6St}TW0_j(?D5Va<*%um{{1pF%B5n5Klpu_TIcG? z*7X~vZU0J!B~Rz+4S_xF{*yqZmuDRB!=I92t%>`oXR7W(Zvck)mfCAp!~R%q8HyNtz79{83s>DJQNt%4H?#6J>^jQ2QqAJ>ABA<}C;IOooxo zyG<>+?zNL|bQft@bkS&7bbDx6lo4oHblq!Mblq!MbhByLAKJrfaUYmGTsxKW0*#FF zDGmGE^0rJKy18Q3<$8%_*lyHOKBX&-G9V56J-Jf&p3~yQuF(;pb#K|NrJ$WTLGL5f4Dnd{dBq^75xFcq)LFc^h89R0tPVVxJx)8sq4(!V3a z5akcC#ZCMFYZ*qB+9%;(mtlyTNg^mST*SpOqrppo$A=|G#GUHQFQB0aP0`I3)Ln}1 zEe(qi}< zO6T-t{BJV*vZ&$cq*Dpv7q!nX6@7s|AiW^uVDJZheJkjL8AD}WUNF?uV4d!#5J`gW zi8F{011Iy;QztxwPQb)svWPi!bVA2jEACGBwbP~K@G^N_BFm2cB|fgEXRW87BJaaj z`J%9g$=r?PPMXD`pogtfH`=#8iVg&BkO*xEcXCQ2nLPZmsF_#;&Y)qYv0Wlxq`S!k zKP+goS!8Jd!~(3p1JRMri-n@b5NGRp&!Q>agY_Pbjx`$al{Q>!>K+VaD7_VFz9w;4 z7mbJ7Pi8k0t6RE*VEd7ey6>eD3BF2;x?=E^aVnOBR*g;gP*8FVi+L0oX4*MuQWjlE;c??xy5lx37(&3;Z$QCpj{I<(M zbF?YNt?<@dG1%>#k~?WjYUf>~fWL^0OGuA$e!)^%x<3PLCpJ<6j8y9gT=1xn z)VbqO&lV7&xL43D-#kxy&xj$pCPBA-{n7g2`^nt30vLt+Ia^5Q>{)Q)_Jw-|L@4$E z^n2mP*yZ>Zge_cqF&nB( zBa!pHJ%vPzN|X4%3Z&qKNvXVNK3#vVQi^Ki9lLuiT%ew+1TD$&vlLvG?;-z>z09DI z!V0B@f@#ZAW2<_9+t046^`LYWM4CFL_OE4X*+BehyBOCntTVMLXJ#|Ko=S>&^WU=; zuYrMzDt;grgL8IXYIUiCt;jH=tV(vt)DyCTD)&yxx1wPIzF|klD}f>I?M{dLU5Y=mtU80LJ55Ptl)}B6_UGx>TKP$spFU~q`dsl|7UpR(tn@YbS!${+#10L$( zeKP=?{KBd9+W{EDC#Gsi)rG$)!?2<$yRXh%r|YfANW2zwUh3F)iePvvs^YKPd3Z^w zm2T+6kDX?HuMBG;mDpt+-A_^bfdCAP1J8~;oqrVIB8Q$h)c!k}T5{k(rb1DbwqN9!w`pPyez^O-D#>U(gBRRWG&%ke?#F z?*&6J&VUuQe<3#yL9Lz6x`!IiK88-6#fsE#$)qwa+_Bq@v~KhvT?em=8iC)m zH>=T_XM^~*eIUa4A5m)4SD_5y&Xkr2ECE|pB4ILNJ`8Y#c?IiAxKPNhB${y5sURH$ zSi*7;lZiz^KqgHG0okP>2ta@_bx8>W%&j4eaV|1JST^6qSx9j5<9z%BOgIbocw(UR zZTcTt>KfBc9DI$82DsO-Zeq=AWHiRThDBq|Ygja}zJ>+wL%KK`hhD>?Ve&OB8lGRn zq8SD>>>=bgGo47K2#vXV(b2^vTL?6li`GZau*Z`pD$F5I``a=Yi-zQAhV7DJpa~TS zg`B|Eo52oyF%3X+615sP%d|RAZnq%gFqNQCuc<`kYYhwDigj@jKh=oh^gS9A6rFVO zZkwl@cl>NTq7TfPO7LXR#jn|~qb9C|vfF#+|#si{Px!)sVH0=tGqqr+?1UAt{` zp>Wspr*bi5hcqa&rt<&EFkF$G9)2mqI%iLE*z749FJDuMM!46oXiRzyiw1PpuxPw|4T}bJ*RW{l zdJT)lq}Q+odss<^y#g(X~1IuiM4YLU|nOp`8$S{mKRJm|v8OfpU(tAGa0S$W)Q0zsPzrX&0NvhpgBg zW~d&J3qveRweDG2RD9C*UC}%@8WzoSqhV2DtV`JX@)>#^`{eVe*ro|a6X$4HRJzl! zXnq|HE564fWI{4^0NFHY0<~!o%^N&mMiTAZ=1i!%g2sM1yIe4`F6r<@iY zVxQq9v9JG)tqNx)dU$0Bq0>;kWsHa4$jJuxf4BkQg%{>0Na8&HT73}l1nYxD!Q9x+ zEF?NhJQf)}LA4$p!p#SrYp>1_(#c1NHv7qEZG7-a* z<3~{a2!pX#1ppC%d9S6-@E}Cm;d%v8cq#)3ku^Zo+FncB%bJ{;Kz6Ly-Wd9zQ61@_ ze<{2iPcb9<5o!b>H%+_|OgLo?w}O`TQh*%#G8bl1z}AM#Dnoq^%Z>@2PnfdmYfm4? zcG!qMF^ndJ=5zjmE~E~#2ZQ5A=ltS-!t{K9a~mjmE7|2#xAEX`@-T3G`yd`lI>gLG zlotFjjuhvxcY&FO)3?7u^jGdAm+q)_n1xUI6n{pfVDfBWhd?#I^helCouyY=e6gvF zh@12!wUgHq{y_OR%5Y5OLSEr0^!-k`3_U@5IHJXWBDfdsSdK!=(Qn>r>~exG+oW2@ zNkxuMz(j&Pwp!1hA-itt#?5fpq}rHqkPSpT+5xBM%!f7r$;Y1w0N>hIM%W>NTIZvi z9i*k1yn+$w-CIFCHvGVzr~a5xWZh^8s@LG}8;y8{09!~K?L<}$G~J5K6F?wJ<`9t+ zx@XT4wtbV3F&sj?HFh;PG;N^L9b?g0a};V0uDFdJ_!lFNr_ekO&a`FhgYt(XyBj@r zgl;=1xY_pbDo>rHa@zxewstkxjoIEfua`}P3*8jm=!@Rhhx?+c_HgUnQu99{&HmP9@$a#93V+u ztz$Q!_BGOk8a+O!-znE9G$jIX=`cdIQN)BIZor6K_{v_!uIWN9bRXidH**f;ig>BsqC;Db%H$@%@(!jv&%04NMz)W?0g(Mb44H^7kU*?Odb_N+FtHez@ z?)_Wk_shiX@{#CGK7}3dN;T&oZ%nhRd7n5Tl_58FUQVk`VL9=?Q$=93ohlB6v>Wv9 z%_8eoiBqdWA@oyQ>I$ivqea)O8klZWsRSp4<-0p!Tqv@g_w3Q}Il6wN^7B zLQw8Aj+fDXHbFiU@Rcm@Q%$mJ=CW@ga;pl8Ar-!bBU^{FkV^Z@yRf_|a6?)O^~Tqj zFdbCZS2Ty$S2%Y8;z}W8>P{7SCyd%YR{x;9vyc$NEf3OSNQwLqn&4ICH$=FoZbHCp z1nAk0q{52P+VheZ^Kx@zU!6AA^AWS{@_uY|KJo1W1Usp#G#UAMtx?Vw3K}hbh>%Bn zkYZ-U1WNHzGQ84&)UG_!HR&wB!sg20unrHW*Q%R{XA@+7M8Cz*N~H+++${IJ2l>TZ z7VJ?AOXZvth*q`zi5<~42=c|vATU2|4%AD;WAe+{VvYyOr;zhGkgWsQQXVr~(VG#H z70V0NiAd+6s<3=`@fBg$o4Nq)VWKvU6cS-# z-CylQKQ#r*lHOIGIkCM)-T?FCfVYjERYY8*jUPyrw*~i&(R~o4>LWTtZtjb(Q#-9B zc+^7v-5eHn6L#zyLwt$sK9S=E{54U^QtI&^4N3kJaJ?f#J^cu=Ri@aSTwt*FDBIyy z?U}OTo+IZJg@+21ZYtM4R1xg0a+Zhtk*o+gJbHTTxYQ}Bk#?!grrx9=qIM8nD~!$B z(kblw^;@KppxJzIoom30x+yzR;gHV!%uF=G!n zlodS+3KMKDsG?BXSKfsvsU*2=EF-Go)@ptCe@c`s2(1JzRMlFAy>(=l`JhZ;H-nfh z<>pSE4=M=hLn0oU@*n`oBEk4=1nF8mwnQ!U84+tvvK%_4-@=DUHahf)9xqFLFe$@S zkx@~dI^CY0UcdP=bs6MrpXu*LX5vpUMQbZ__+Qi`6w`9!bafdb7l20i5H->qVku=` z(adnQB&weMwDVvIk+Zu%kOJV7&(SfdjgF#CtZnVNm2gr-z}5}7E&LyLg4`as2jN~1 z#5n$es|p2hfr4DV1;jdDSjQoFbfEn${d9#s<@pGqu0}XWwIceS`88t18-eql9mZ^G4zR@rw@|L=P0I*AtZ<3;uDMO0sEty_05myt)q49 zcI()Ja(EJu@i0iHdZyo+f6=;qfz$$74p{-T#>rOY&U(uR2N4*&)mg3$y`kL)2Qf+~ zEFs8T*^Tcdv1j$T*C{ ziJ`qXAyNsb>A5+91-f~dH&!S zPxr5tr^)5(fzj~R0=6brZu|KKs|!qyH-<(bpX~xAEm%0;nY8x`kro?O(+sCtLWk27K$V%XZ}NVg+2#yQuh)jAQmfP^>! zEs%~2Xo|7;k~3%9=VmZcG%-tu!TC`Yf?Dq!Q<^AbDvYr4ZesCjAW+&U%zZCI)UzRSAp!f0~NiPC@BY*0f2v&szLob{*q)*i+CSjliu}1s^ z-1Ezc_K73dl~@cy-9FLQ-1E-qhpkzWiJ2Mgjuym`)1QO+-~jEaZp^u2;oX3-(m^~h zqI7C-zj3n%Ya-V9;%Q2m>@r#tkIc)09+}*8lQdvP+PZNMQ$S}_fMsXp^2nQ6M{H93 zAFaPLXT`32auYfP)FF$wF}?}UVP58qn4fOCOP51b1EeJX^eXK{Kw zxiXJmu(1&*1MQK(bk15KU=PEX6@yKQNUx0_MMtWsqUjC@`1Au~$d(6f z9`|Gko8=x|^-a@ozU%uaj%#RCu~DoLy&4v^!tK1AS$lRv>(;&pqo*yt(0cl>^Zdd3 zxi4u<`OoXKS0Hkox6XVSE(=7g^~*Ei;s+;%x=A(;yuaB+M(J$-6|0M%;_Sa`bl}Y`52TG{{}p7j=R5n)n(CPC z&Vdf47Vy}Z?TNc&7p~1>oy}_R#{NbRURT^=YcmPO?H9L+)vI9_itQC46nlGFKwuvs zBqVh@-!ywC2*v0;qK6>P2x9)xPbrDtkPXU{%SY*y!x(AT>VF!5O)sv`>IjN?FIr=s zP6y#xL>5w*e-j{e`Mwioq9em7?99qN(=eJHHv2U-g2}heoNP}X*TN_QhLQ22giPkH zu1_CH+xA1YfxMx%w)8kzR4YbzAw=rpF|4wbQ~=Xnxdq3f6jOmcjnH_UZ^`3_(LR#0 za{f$8>R-ykMX!cwBuq8<|9+^0&r@%;;tn487_j0F;!1_s%qix_9git?sDhHu34QR; z-l)d!YW?s>sdI^L)jyD75H}rae;9zl)lRz~YHI(745QnQ9Y$kwpbH;;>cpaX5uo<$ zKx@H@0OG6))6?Y1X@oyb2krlqNv$v6Zhc~r`VqNd$+HJUmv`>Z$gtLhqiai-4eZa$ zu+IEa>H(?;?cd66Yah9@_I$=r`yCmEfU)a0zjPMl_sjJrFXx?E=$B#ZpRE$VU9sXx zd_zXUg4iJ#boJBy{LuiFCA!$R9w{$Yjr=oqxCj#%sq@k2ovAx?MDt7}wo|r2;vlB` z7{mUx3~Ntcrieuh`%M`JBPj591N&7Omdt$Nu+jfZhM|?ts6}1b^_X<&9Bk>K%A zH=XhBE@KU7no)Od4U4*SYgp9PT*IQS<{B1ttJbinFSmw8UClMD8y|9wj5?)jSk#AH z!+s67O%@k$5JSiz-@x_d1t+*tJXwL-Bk{Ze3brIiR_GkR?(p$=-T*}{o)AF6;>ijW zES`lx!QyEd6fEfHrAI%WjzLk0XOvK|cn$~!Bfew&>(1P!80{w}Ns$CIpBM8`ClDgB zlZ2T+gY9T#$A*eFb=F12Zh#t79FoIS!AdH6xAjz(MjtQWebtcnJ1L#4uaGM4lh4s* zwp=x3JUS!@c%F)+zQxnm6QyJ|pKzmLEtfuHwHD5_uRo$%JY#pm!fPb`boZ!NSNa@jo*X>_w%-;GMY<(G$#-Uv4i#w8OTS2Kl!!uI=_2+#Ap1MI7sT77kd<_`fqd`P} zz7=Mi^psetQrYYs7%aF{=o>oOmKU|s6q)DuXxpaJVfy6MRa}no#Aj7=2!F?O0!X2u z79W2xgJd8*k)9if)3JZe9Dgw9w)PK|@!5j&dRqSO;-UwNdb zAI7+3uj{w&J9)TYlRyzUtapvU$kA)lw*iH=SBH02Llq!jdK(v2#O{KjC}j&!P+`5X z#r{DM#uyT(T78_s-ys@PH#+CY@UVie8MWHTWAg#Z|`c#{ioUJMeuKj%7O7fR)8Q1GcTxPP!U8ZCpXUM6>jZm{iRj$VAOKn8OE; z8W8VP!3jO4&3){q1QEkx;ThDqmgmUY$C;afHDvF%r&7TZE1V7 zRGX|V|3(!~Kjf{D17-3O?5xW0{Oai)7|1&U+G}h_WwbGtbCAgGGV*YtR@kfE$Uj-B zCxH2f6T>nlWKRGU286iWcll{yh{)r!Qg3PYm*H}*EYbXN^nhE-10-ZdQ16xNsf(et zVQJ9p@!nQJqIHQ_%F?r?{zg?hzmx(y#b$eflYHBbH@5D;hVUrURxt@Vwd9dI`9z5} z*MCdm?W=s?pP1BjTPWT!R!O?7t`8Y|ymfTIO7WKbh{tmhtL1m2+V9wBB zb!xFs9|@McK(0tVTdI4>KUEi60_)c5=qUWmYBc6wPJ#2Zj!w7Fe@Zbp=hYRO^(x3s zn1+s_EQJUiV?X!PQ0niA(BYe{mk5wZt^}oM7=8WL7}eTpSTq)W8qmkq_E{Qbj%=@C z(UA2T7S&H{SX4i)VcqD(H8L9QU&Ep*Y7L8~7|^h2!U7G8MsCxvXh=B?qvgX3Ef*_J zW1?Z_G%OktPs6$i#ixT8Ws(msA174h8h-)O{ihf zM@bEf#?sX=S|M6w!f65JotC%gHQP&lg*yrfgcOH|zVR*kUp&H_yO!71?_9*Ie=2^p zZrp2KCl9FcH}{N=jXbwQxlx#S#A<{25}E7ZnL;<|e-SXP>6J7OqsIIr33K*w>!r#w ztTBIIz>v=E^5ayItYN<`z-Z5$`rI_BxY@cN2=IrqS&dDW<+%k@s>i7@P$~K_rkfKF z$a)zTM#^sd>0_#m_cy1DwC4s*!b_wS-zkqGYIKpGo#TZ7^)D1Kty#Ki%O9{h6uF+D zY=Yp9>oBPYDaQZYap9}Kh-&yN5=!!f@$O*E*<=VcmMz|LwkCO!TOknfP?2s3}UDghMepX(1LuW*DkWs+Yz7WafNp<%kZ-`YPTJ>I0P?sOo#R zH=)}aMKlw{6Brn(HxPx4o=(htA$^2bX#~E~hn67*+d2I+0@ExHAE>@UPNJp8M9^4J5|?3f;>@58Lvy z6nTKPHDCqj|GSl)m7Z6syQ)xv!uZb(n^TGgwpC&ypNrrXol9phj-`0&F~x5u!kig) zYKz(+OCg^Jk!w)bso_5CHs91ISjI`VsR z|4#A{I%H%t$m0J-@0E;7}+c{@hsxjS|Wol&9YE;9brm7ki zwHnp1s12%yMU9FzENTdje#|c7Kwf10mFwb z)cFfZQZJs8zbWK8r6h1xmNAMa@zR*sEAAcl5>T+X2Y`YF>dh?Z6((->u3&L52L+4! z927My^CT$3U{ICKzQRP0+T_BO&Y?v_EsrMCWMtI%kCD;yhmp~gEsTtwlZ=ec2qU8j zDj4|(STW23b2-=;78Q*c8MWnOWU<`Bu*E-Rw~*6{k(=UamF<*~!F*SYD9%a2uxPGR zMn*GKFfz)485#A(VC3&WsyCCz=`-4^Ssqg2H}i-vew*Bcpf9<9r%O!@R}oEQ#K>qa z3Pwho&B*V5pWVUbmr#Z{Iz~o)5E%Ir_G^Smg+mS+ zI;S5aqlsS_xx?88Is-41{1l1H9_?An&(6qi z*gk(?2!L9oc3*yk?q6R=~2e+Ni^3y*B*U_W#k{r%bFIreu80S@iQaCy7YEq zd{hy_$lsHj+L@Xm;{ki1oTX{;`g1dDtB^6WW9Az+LGmCvp_IJI(|Mnnz8OGHe&I8| zF8%ko4P8DJF+Q3LnUQ0%)R&KuRheC`El~y=XJEg_-b?0mOzs@T!ArU%Wbovs?G@VAK%rwpZ&6uB(>upWk_m^ul?;z8Rs%IGax8>TChgmK|Mt)ab zcq(kbA!j*7lUXy(XgXC!Mx7fO8BGbv$Y4H1M*LA=MV_0X{7^P;iYf`2X7m7OWKCAc zudf~e=0IpJtbLmn%Ni!$$?^ifTMe%y(wJ2Z^e2^%d51|RTc-LZYEg9;d7E*Mn-YdXIvA0KGV!Shh?1rwa> z;$S9jUHr%BqG=>=kc@aR$FBaGCWXH?TRi*PDNctdD+}h|)s%xC=DIkTL0A{RZQq(5 z!!)kmUhH7;IO}MyXT?8g6ELcytT_5$uA9;E_8uLmWKgfUiN-|L5gHcNu4q`4g=rW~ zjPsNQ{TeKK&@}i8!huP7kVC#Fq4~hn4-@+012QIrG6%s>^=60|XYl87WfN{_s9HVt zMy;W>Ex0jR)ttjN0VW^r)0g#ZYVQU&8rznkeLLZ2v>oY|M#t*Ahdv}PkTj!FG-0?V zcxs`g(q}0F|0!8f!Fw0kV#p-}(MJ(U8frriicsw^FC{}{1U)}_q~1Ct6{*@c$aI@ej?JZ{j6n2Tl?TB9Q$Z40pLP5n#Qj!2;&0cH zI<9t8_VfYIirUMReptSpBIXz|D2U>!8?YCLRW+E#8(<-gde2+s(E+$$S5?4qx1+RW zZqL(}l#+a#{fZzL2zvX`6_eq+D;D#u#u&0kHp+uYJ307+SOW+uZn;AjKeg)38+<*r zI^uBGlb4_h!<$U|{`tEk<8 z#|yY!)8Ny8{d<~7`KZ?Z?W<~;KLcOQ8le83jU%xQHt|gjV37{^{&_^j93>@J&Q5Ye zV^;<1$)SP;pR(9Y6bKaSq|vZzPNlTy!D3h`iNFiz*H%Ai-KIb;Tgv74$x+X9_lrJ* znUkKG2lgC|WzZwQPyS?Ej>6v(_M9~4+vu#^RvE08rBSnrX=p-w)mmNDw@AaXy!Q}N znEfMV?>wa*d&Vq@3I6r4RiP6$c%Lmr-;EVhVJX$VkCvh)4W+2I zqVzCyXN+5dm!h^srKrJEDf+xqikhO7qQ^#DJS;_Z&!y;-SZUnnu&H8hekKi~S_)qA zOHmbYDQfvqie5@f(bxY{RJ~m)HasguZFfphJ#H!ZE?o+0SV}>SQYokoDh2gOrC;#0 z9O-)i4$J7HY^g|5Q;MoaN>Qsrk0WRc60|I8#qP-`_T^oWjP%6%5gdUcQA}c1#|XhSqiRiy@5i#UL?Swgh|n#gdBab*JcViHkZGr2zKVRdx9?KF$k}x29%-+ z69;fvlhBv6jY5a)>npv36zjg&tBM9?{rYG6-VIlB+Uw~*YbzgPfU)khQiPD)1=8Jd z5LV2ZarvdXqnci>z8fQ7JxH{FEol+8N^e$$WoPA-n^p)Ex zyUN=Uk8Tr&3+a5cK9d$r|DH-^a05cJ(Lm<+nN!T;EG&W2_-pmSF~sZ~Bto|S61u2l z7TJZbSj?0wGUiapgA1LhEUrb=Ohilw6jhjce`Djjxp!U#GpwoT0K5))H<&W-kfmIm2qdZ_)3t7WiUSL29L6=iSS!A^ zG=*1(_0Ja2r)$(9U2O()9B4GcA%n-!8^lvwtA_Nijto0BUiDDf5Z#^}XWkF>;b zjC{tyWxOm&JRMO5oUp{8em3uyotMWE{FTH2EsS`qQTW{FQ>F3VdX;iUeTayzG>m#J z+atWTbS!<#pmJ}9k#)%gwGBvMN@(s&!2Zf_VOcGy!k! zsnpXXSW;*1w~yazojZn{Qj>5PXEJg z>an-*0F5|5`j>Qy)PZ3SuLH$4EOy1VEnn829b8+wT4)@jA=E$SQQ-%e-dYV^8mNTf z=(UCMmI9qZ95Iz>knpfHn>_pyqxDL)MlS^VB56l5EY?#(_@MTxx6P=rhgM^1aPcUv zEnRG{+|x4iRkSpDcsul7)w(!CT>GH9SYz=$Jk&y%s^=fISLyoZUpPq4o;-&~XY^Gq zdjYdPv%Ee{)|@uR5e@0#=^3pus#*WkzkAn7UpDPfVpnVCdgs8S)&#AAzOkl?jhz*V zsYlU>wPzH|2-aqb0zWja+1Ug-Q?n$3B1Clxqu9ObJ+iM^9(*5xHL1N~)G|NBD!QOP z?5`l4b*Y1bL?@Bw+(vlRGI^jxYSb@4Ff$Kow*Mg9%UQK1C^!<&#GB*e1tL? z5@{B2*y|ag%W8830YgDCE4PPmM`d@lsSsq4XRZT9-BbUFjWUC zh-WJi?!#gosP4{+&~LrO_4?|o4mFxwmOU`jJUcn-?VR45$C?Py4MyCv5tK*qGqr}- zjPUK+^9zV8KK>Oy>>C@UsO74wnE;gv^65W5XJCd)J@jH{r8ge`6K=MbT4db&ogPc& z_VX#06M}RgnwRO|JiJDt8D6(nzHn~~&ghvGAz0s)`si45-&WkS)F5PnB2+?dI@MsO zh><_L1P%$7M)M6j7_@+n`J2cy>r_mRg|{ydKhaQaiUg<%+3!OA)xnv^U6N_45*$Gb zPm}v6i3Yd_NWwON6WLpt=+)Q4aFTr<^k=D7j8%Oyvi#CDCRXqFbfMlgaUU}58j2>VvgM|-jCVg|p zqO+3il_pxZb4+E^R_l&G>O-;#!$|o9WpY97{Z(pMK27%4%HB%tXVO8?)n^HnT>6_D zRdYCSt-Uqm#u5I$UFT%dTjSXSaOKtnnWFSnYSsOGVtT^FHVnN^b>p;WM+00NvFG?` zO0KNv<7!)ZOyzxXTZ$PUE%$7o^HFEOaf`P>SJAVn*%%oy$rrNW+J+BCdNx&>WfeqR ze<%tcQ2l@-sC*05*o0Jql*DH#FvT}$V~n=4jx||WxSiV&{Cpoe zrzsN=F4{O)t?wLb?i%9aQz-VXBQ!9r6}Xk()RhngZ{u$+kL+%!>_}=&um%_m-u z-~xL7xO-I7ru(t~yJ@#A8*Q(SjAGBBZF(760^DmOdyt8Si@L5zFF&nz_$hSK7UXCU zAf=6sQ19tHRg!LRZ4Wa4WRkAgftH~&z9V*TTcW2gB&57auh)Ds1VnQS%6r7QBsjmM z=)Xu^$keLTel|?CmH3oJW+=5f7RCHbwND*qa*px@dv$}pVLY2?pI<^v--0T+K_c{) zS6+E7r_a_CmbHxbtS{B+cOm^Uoa=`Ev)dfmz&33bw;DSHyA|p>osGmVHZQNLN6~i^ z%|xOGKt_+n4S{Ymvss6zFo%>!syiYpHTO6zc@mP(e=U!w=SY@j#93@#c>xQ5=UbK? zbXnBIMfW3W*=Mvpv8(u|S_5G$)4R`~SKTst4qC8kRBYwPJJnwvtKk2rEVnM+DpzaJ z<42F_tlB5NDoL}T)ps7Yxued>U?jBu(>)<_7mxHaPX5j99Olx2D?Bjo7P3nLl z?6l5aTZ03{!ZWP^4}6eabZ~WUfPoIulsnw zl5fUwV30+b%5iQgB~8BE{@z4H&T#UwPFE{;Be`^N{op)86sNP{^ilR_FhaU96G7JO z%V|tqx05&r3QeCkerJH32b^jpR;%rGSc2mA(>1lx)9McH5;0iq=0Jba>bzW4{u4kN zWjl{fu{^V_>`Y*CixQ_n?MU}6%n)T{%&OzI2Rv$WIE)mV z{#$PsKSZ0+buc4doL?cxmWYuSm$#gMz^a6L#fzM{@6ibm+J;n~ujVeXRx^>zG7Ed` zj*Goxp(78#f(tcWrNQrH2QCZ#12kw*Fh82oJVlLIs%bVY1p<>sa|el9rTW8E!b4GC zEW`GV`Yk8mwP;^FqKuLsWrKE+=G}-Fl#z=Z_odu|a#)68W=u!e#i{;|a(a%I%h87k zZhrAww$KNep%7M%lGww4Ph-EmI!?<^} zVw_V33=Imt6Pdl6Uyi3s{2v18Stc+=qn`3k+oFcyMl|hww%l2`1r|+9I%~Cn(=#nG zSBQ4ix>^2M^_~QtqiU8KI07YMw5n!)VUll|pKR8_BWp>=+E@?IO?VE+|3-tVT8FK( zYrz<`D=yqjNzL>BbM_`cb{^Y#*h?Hm-Xh0}6~{_cw#t!YmopNiXW6lxXK7{t5+oKv z7(7s83k_c%Yy4x2A zzS?|>Nj$tWS_v`}- zw40l^hbM>q0lLK3BLY2lM-G*~y3s=pkGscn1J&VZsWr~}2au7@)hF#G@>E(=n`xAX zHdpL}*)%I|Zd0YyVuP5hLn_+!EunGa0Zf;6*P)T4(Rob?9p2DHeQ2yjZ{Mx@5*VUq zcoxXKagtB!zo${$LP+v{dVSNFobX%cz>{ zaC~*D(L2^A%50aCa~z#2Ii)RYpx4_7RH20RyQ3!SL#yl4czL5fG*KR^)|*3Hnx*ln zN>wb2Ker8dbhzd$e{vM~F7V)(Y{Z&RDtVRam1#lqmv`+n{Xk7`Oti$mN6VXkGFsSB zmnKJG7HMd-(b`Q_%?jsLp+ujo>|ixyu;YfI0oD%bGshbz|3fCFmn$xinoJKRudR={SugX8bi;f6fEffgQ*RZh0>Y;{XL z-rfl!hY~lH?3e!ESINy* zeiRJ2QGspL4LYO)wmpB8qf?dXZBTIUc4yY#Jz}uh_Qqq<_RKuRV8NYqzdTC!JsxsG zvH{3_xWC=&-DW<1|C=fxHZTwHZV0~dhSKCjsakdiuPqFJua~M71i$1<6|BZYeVc1F zf37!vc6U`|w6o_kqC5G$?sWsU+uwiw^g!@;IZC>$nW~InIE`z)y?6$<1Q=2I`PmpX zO4JFTN}KFhsp{1Af!IusI>EAS?t3dat@>5?WipTF!dE*_^UQAcL&uUe5*(Cgc4SI? zW^X)>D&MtvWsgUKT3GY(!<3SerBi_fRfB0JYy`e~BCNwMgD?Y;HU&1IlXqtQIy_BH z79r)D+0^-Tq4^`e%JTeVCeq@d=z!#6tc$}z*Elxz_w4AKRwWwMyj%-7UQqAO76&ha zWd~c>-xtkd3S${8tk9X;!k{E}Ta9R%{c|!B(H0lVu@+YN7=eZLcki{B;%p3N0qI+J zBO}c!&G|D^%fnENLyOc1{Ud9v#9f%IY1Lsp9|?|6mS2Wt;6e$_UhReHHtfg-beiSf z3w7s=ER5J^q`vqAJzkcxGuVJc39U}m{S^9;N#`{1&}BGtk*C=D3erT)7}s-&SXZfT zFV|{hB2FVFN=Dd80LH47NuunDV%)*jKQ2+ezEn5jO`_QO*ChZO%B2}HVJC{;EH`JS zV+dR5-vEb;XXuBffumV$86s^$)%emlP!&)7wZ>D$-)+uRhH9mWq4lM0<>?e^YqJbb zja2Cf%&@SdCyN`k`q0jD4VLy4aldJRs6srs9$yP-PmyAJE z8yYLa-#0k}2ul;KZG8qgwi9pf?M&9^?eIneQzfxp9mGhvfyt&yGtUvV=9Wflrj}mf zO^{GZL%T~mO60z)w(!Od?D*Z#-X535Fx^|zuTcJaz0ML|531?cmWJMOFYoCz5BKMo#T7P#ZE+fZHdmbUBiMpAQVgF>whH?`gz06Fr`-|_v zV`Uj!P@e9U#$!u}ev^YEM1n8L8+fF=3t!I=9yX5n<-cqk#?`_N_1er3HnVY1HVBH; z?R{_$>{7<&q6^ptNGJ2zUFuuLGFG9*LJ9KjO!C{cE3FQ)FLU0@4?6T^BM>&waWKs z<`gYuQuMu9YCzcpB0U7%8@%whSBQ+c{VG>|-Bf8ilBgN~Z*ro6WsBO95GZDhd@qVS z$8O`RqtUInjfRFNg~E*QB1xV6iESvu72Qs3XluQ(qdtw>p9qW(^W25JUq-E)S>lK& z!O@J|TrS~cPNFXbB|jEKcHDybn7F=w7!i!{x>@+l(~6E^7NF4i>Q?8`1FA3nw(lgp z3uV0YNt;U%we~-GrQBr;#}|jx*8Exe91BlYOzKO~8qQpMKlw3{eF%F7A*e9FoTfvc z2T2Hy3~CevGe8k*i#3AAg9!H+3f{sX!%PmwI5lDq^)tCrnFjh~|$a3y_oY5D0X>qIIl$pKi`NH;;=S;YSh;i}!< zoPvJP0wM=XbcLRZ{VRc6ALFtieTN2{(+V+6_aXO_Cq5E(x?%FEh7b?^N$2X*S@#oq z`@7U;?msKqWS>E5eE(5s_OVQ}B!b(hq6kFy#)#nq2>7OOLEE0U`9*$0;d&AuyW^ps3qvDBCQ^@Z`c=P@e3Qog-AQ*+G#Sf zwhvx!ADpMijSz;G0V9P_7VLn`wFv&jcGiNRo?W611NV4JY53w0v|@-Cj@vwbqI>C* z^(YSegJUY1z;aXjpd-uAE=Bd1k=yja65Z(df0`lu{V?^gDO7c%;V&bX3W+e=hY%M? zp;|;L?;+#_p&tuh5Oq547DKR7tI4m0h=0~wTZA%=v?faMT_vr5I2Nd)IuDpe&_Ua8ky_4}b#0+* zc?>yxsY~WFoej+6oIpNslCoF_2BRY41t3USzBOBI*ZNin_LKFA=62WxXkLE{-FH8J zChOCvbumMt(9mRk65$|uQ(WlA%YQv2Wk%Tg5mPEi3S1JoH%fWg}VfM#pSf&gVwe} zo*OUIhU|wLt+w7RfWY)i3X^`VY_P<*A7rdF)1s&lB8vTRtLxRG0j(_|ItQwzf|g#Z zzGIX@{dyyvkX4ZMLv3kQi&t_>Wts%Ie(j7^wpB>^)(^9`RVz=_GZVD(S>1>Y9ST1B ztMvx0-YShjk*Q#)VafWeE^lj;aUW3KuxxC19VYjgsj^WG#>LP9Pm&rXqKg}Gbu}?% zs01u!3`Zbo*=vpMtr-odiC$QT58ep(TcX9&-9SL+o1iV)dP`wZx@kZQ7FY_gjkyU+1qE51wgI= zE1O5(?7I`wtp+mHZ(yj92YtX)BTj;B6(A* zpDT~mGPaaxrEgo2L@SDdLp2a{U7}E)Erifc)*FsP(LWufaC`p@$(m%-pMdL0X{cHn z0xN3tm8-^xX4u?ObMqu<*-w$=nSg~TNuKux>lDU)SA2El)k+@!G~I$>rUWN0qa5N6#K2YD7vLq2TPDzScu@he^P(z6@6`@51>3+L(ytfP8)VTDBD4 zd6SWn!xO^IOctzZKx5h>+n6~evIzRAipgkV&rdGNjX_wNp^MZS%@p~>igOkRcYI?- zRAB2#-Rlb>?i7+lM#5Pi`3=S{3|nc~_K(UKWJ-G5gqUgg4UWQXGBv*8N;6ga)e6Yh zgd-AkW4W={8`~;V#)hB_ZUh}~hIf)abdG9PYWA58JT)8SrR6m$zvUavX?)FH5%0rP z@r`Dcq&$|IxL_?fWh_#Su8_ENcsqFasTO_3xNxM^M6tPiOyPe4e^T=pHA4exqvc?!WY2^$< zG5if!douZqwo8JTaPG}044zB8+Bihx7`at)_z+sLdCY{AX#GODy;@Fz8R+d~Y7rj$ zn@IiHtT%>8D%()1zDd1tEBvLc=-lq#9;YG5`tmYjU<*y`o+`OaM_g|sUC%szsS}4Q?|bD2a<5^8_H1fe zb9ZXp5|N&JtkrCmzn8CzWQ4XfU=FUa;f0sKvu6)hsB_`OEUqvlmWi{-(3>aMZy^WB zECPUVBeg$=&lc?s#kmZ*22xi)4clvrgP(Sb1qf zO?WaqR4s5P9IC^_W5FILFM7OI6_;TT(HbV-qY3*-;+@-IUPZ))qmZ6OLL@ucsf_Nt zeeycZloiIkN0+fiX8HY!R_W9`bR45EMtj}7bOqQCth?#}J-KmFWHglh#L*lji$=jH zi7LYY0yX`KqwPDV=>4_!^^-6c;rmm1j)LmpTGIZ%gg3g(cLY;cyr?jO*lcmj3n$1H zV5~S~5hz?Q3U<1Ft9$OoEcs?Wd9ICBiaIVcntzXpWV0K~RVcsFH6u=76JU~bzzm5d zMwSa{gUCYh1W^(*Mm`VOEu93tF@wZ6{dxlTQF@QmByS>BM5$&XU;NgDX)!b9n)`*$ z7d$W?Kccbov8OGd*uZdB6L>c3U|}fU3i;PVu)H>4dO^B=*ycdqC;?IX*;BmZMoF~7 zTA`1wp8G@A(zt6`P7{UdOonwKav!0;mKhJBOz2467ADrP(cXF$>8Oi+>7vlYPr-WP zGhqE_r^8hE;xgDR{2a9&gUF2X;QjU$@>(7U&&`L8+gt*lW3>zJaQ8RREV05p$W9(A`-J~!SEi6ltg zfEY|SzctW@lswywjPz{m&f=eFw%>&kwv40iJ07s(M56J28$LfoKE;og(`y;OAaa9f zFKWSO>7za1eu7^N#2UN)3cdnNk7Pcl7j?})uf5^lGsdg>EC`66O^K>PQn0R!dxxix7E`kHf?gj4N}mAZ7LY&;W1Y96edsk7H(Y0u8@rhy<67 z(mS)rV@%>G%Kj8qh0AC|hIpjQz(XH;TXgLnJ?NJO8QAnlsW*1aw3?Ax6hWl$=cDh$ ztLl>Zc*$9qVYNW7iVL@LZ&&xj)7RIzwea&n)}!p$*>l*DD6KSsXnZ1vy|9tGb{^ot4GCpdb|)81VVq zr0GLefCwfNFvat9pAff7_`-bHR`}7f3`-%*s(LuDUslZYgra#*E?N5UI+8Bh!_CEX zQg7~qFqK5m(;koSBL99Gacqvhk9q$?>7sMw%auz9(#0T@C+;VUO%Ud-WHB6w$m{d| z;WXm#1H2TFEXK&YU*J8XbL|6jNf2IBCs7)CEK`%z9uHU6qJ8IV=iFDxR*b&pFg-_> z>Zkqe4xSyLdvKC&~A79Z|{Q#={EX&Ky1!}1@10> z+FeSI056)5rZBYt_&gA^+fN=P5i1{m)83yxLs?3jpnVpE(&CECFzUd%tm2TQdb2?a zNh7ocukmDfycT}+B+2mIOQ*6IgRF2;m`l^b3f~{LuK(q9Zi22jyn6Qj z8GKQ#{>nL622P~wuU!5R+cjO@y>+yE*1Yndx8FPVIZ-w9wYC1+SDtoH9PU$o?{fS8 zQLGZiPf4_C{a73&ar?ph5M&^hke~)}S&><#K%yduV}<6*oJXYrS4_Gh`#7ZnOG$nM zLrG!9Nf@QYJ6#(@RwC z_%$5G?p|Zn=sUisCSHKJvIxnoaAr|WkVq(zPG=A2zSL;Xlf?O8@5}dTt>aG~ymU=m zkDWc&diTH@8@BPK7740D>^-_JZ(M!po*@`hO~hrsRG%v7#*(eHhA$^zzk6 zq}cyH?7}bIAx zOZP}g0Vsr+{`aLTkT+WH%ZB>#iEZ=wydj$?B zu$<#-nSbHtA*t%-K08IjX7UOHPx1n8TXE4u5P2y?g~458%J~X)*>*eE_O>s@Z*T>? zYRJ82{HRgN)2x`?3G|YYC0^>Kqe3u(bnRR|VU@m7xifeuHhz3{uotvsm&qHyPh}dc zO%vZ2bTLb)7J*^~a}0?z*wF(f#g?jpt7Mj~2+yiyQr})C-*`kS;5NwLfN@_f7_Ny^ z&L8sb-z>yf+=qzXM!fX#^VIU6ll#HghwO_p$=)(eanuj)ypNEpo4#gN#`_mHO!p)5 z>SGCh4MapP2LI9fz}$H4r&l{CKJp~^*-+Mpjt^uXZ^2>n5|Xok{eFnFS^+R3B)v=I zEy!BjJ3Yw?%c;3axUC=6l^Y-dxmU!KlVryG?8`s+_bn>tg z=*$WRCV9dr9xI)4BMO)U}1hB<5XtX!T@a z8D%lV8;M2>7M2kS%vFR+S@57qh=7tcIbo^24C|T0pDFUgvfk;>SmPR&Np)XX7U)ys zVkAH~t1kkEN?v5@0!fQS*d{qrA- zupoPAvMdEyDC=|p;TjLVMcG>IpS6HMTk&s{@IKrcZTQ8F1GA#6v{v! zzZO4v{M}X)dABJ5$Tb-RH{=;z9Ds*HmnAg9B4v&RX=!m>bxxYX*_T`y)4)td?;YPu z&axJu$>^@CqLH$?DKRx7tNGi*;E%F<&;8_DlZkQOM52I|B zlwMCH-(#0qijioTcwjHs&a4`KZmxX_HK8bJu7C2wt-7J$gbpU=*aEoJIlQ+iLk~6eNNo z$ocW;Nn&v9FJLBVv%*7NpAr1|mKSf}f3Z817BzP@oTi!e6!!10xNdk!faN-h?W4Br zhS+<43I7L0U+3g0FOeVbHvW1rmjGwpGDJe1`Locz&bmbKjE8g%x3cziaa`+1^`p$cD$QVt`7pn8N@IsHT9?av6Zwc;lhF5 zgR6kr7Bor2hvyah49jAp2~<1|;5YlbNB5Cp0$w$wXh7y8c(y2$&5i^SFhtH^B=b)- z7!C&UAW#V7yO4UBH@ea$*(*4gIi2&9541MJdC|E&^aUb{1_5utYq7|m;(AAG2t$H( z6x$1rYEwe;YjC*6gIb8ySh_%?hfjXN&21YEpJCuFj0DN;OIOiB5)sacECtBwb>${0 z2DnlwiPGf1Sf8!2W3Bx~KhX)(r$_5pk8V9sLi^!ilJlg{ zNSj5~!^@0RA{i%ReqZXI5qk>33hLTB?c-mPx>me!nXk%PWCTQtB{}vfTFfA&ICns6 z=Ec{T1Z}dqLFCzNSux`^fc;3Cl00WQ#1%R`M?b{&Gz83F$G`wY*C}i!hrU3Qvydfl zSy0@c-$AZ`2vigvh;@8K|MW+T8UG8I6`Wam`;TC%^p8tuy6!7Vff|y$E=cQnX#*b- z9-UP!rLzMhMsj?<`_)&tiw!3wesR*7UeQw&!FVNKwGaya;TBSc+oUUAJ9gNl{>b0@ zf$$(gf%&;guNE&L?YnDd;hNwlC-P|mnOuyJi;z#lSuH-ssOg?CI3@&Oiz${r`%jn< z%Mpg82db=6rX7H1uD(1<)bHRij6d57t0t)E%3kCxhK>ZDL!yXw2aYl}EKTu4^K|tm z=ZVX|M-EuXD}p@s_IbYlz(C>tdj>&yq$e=OL$ljVD|cZzKZR$~=!r4N;tP98y975f zJjaHtyfl{k)B?hM9zV)Q_L%;{FAbU?X4Bvz{tgWQE=+6>+m8ABL;5>jr=Oe8TX=xK zAi>k}6UyV1|M44Y7PGptNDgZl&-_!e>k+47|Dl`!c(IebH(`&%%=7M+7v8tXSCJ8j zlE2%h+x}Zr0a>L0Z#RC}pT5=G^M2|EX3nfp9ZDBTOAW}SOxrVNh|NUG7jawE|;GAa?xHx3C=&6Ud^ zw+|dj6q17K!KFl@^vH~wZ6Dv;KKV_eX5cOwRbF}WqP_1$y5}w|h`BpzR2jz7bWQ2V z8rAF`z&jMFbs}B^jve|Uw(ow)&ZAMYaJ*SLcsx~8xWz^_Y59}ihWdPzIjmC6@1x_E z`=HQqikj;z9qm0@Obmq5vfNI6>gC0+R`x!lV_|<%+NLx9d4Q@2xt~DPDE@Sm`}N&s`iyj8=Lt z$D@7lMd$F*L``(q0VkH&mmvOk`t92T54uYa6O}uk-|j4Zu5BcFP|UsWh34hveY|)? zH@6ED4&uO~@*oNlPhdDkIJQuKPu$lr>KOYrt&bqs8AZ?qe5wo zj|zkMzou0 z!{nkud?9jAH|_#aA$^{Q^UF&gfuBe~AkD}Sx2Oq-#$Y%Tl@Wf%;gnHLT=Yb{^^r-( zk+`M^agPc!Czw3^GAfVb{vwFXjFC{k=OWPy9fOVs zfssJTt$puLs;#y6-|1eufZRMZe%tST+@9R8bKQd0iDbZY2OaVo9oai|eEA7n;PM84 zQ-?u*T7G7{#%#a;rw%i2Xg6GI|4RY}4%`OC+17qbhpjxB&jQ#i?Elqaog;WX+4z=O z*dLdl-mS^(9K_p6amWCzsK*YweTJ+b;9VyK}j-Pr$r=LP>=z ztaoGI%7us7H!XDWv(v2VJ+3V6BQ}#i=uI8gJAS~M=7l6|<^1QawO`X=D;IM|Ks&a? zG&}FZnc-PB&8FT|`}q6qtMjhMvpQ^L-v{3K?zoNsI7m(cI0|(or!#dB7w=W-Yu%Ar89`7SRUS7BF=rCMr zy;FwH+bNvWVZHZ{5R1aC-Auqvp2Ry)4)!;7SmzV)Vf!5HlLTyu!i62|KTW{E3D_fV zr_f5k&fnA#Ts4Xg$oCh{Ma1M4XmI_z>(e-AHa^ZlN+(|&ZY z{rINq>stz@bL|5%ZSi=1O2Hs3)WeJ_7?Qi?nE$GZ`MR@k&-Fzl#S^UZ3=o+!EzgHT zA?**uV=R2sJ$FoVwY0LT{Z#m0L^zsma=n3+w{<8h$DvzGX973D=v>l&;S`#;OPjA zSzDpH&$F!Bf_%}5ANe#Zro;UPLK| zwuNKqm13#BREnjJQYmf={fJUbEI_X8QHpU~SaYQm69W)alafEJ*oVzU4$ zmCp&NpVH7Xp67Q1)A)tCOtTI%nE7M!ie|NJ0nQq*tQx2Ydg?eCFYh14ouxyW*KjeT z$oNTY4=JAMx>68e!a7H+^1kW?zPWV3m+xe35qT?|n_qrFsyweQWpS+d}rG9SH zOgvvBc?qmKj-p_z(5lKmiM10e3J?ViAht(1%?wrzVa%T%Al{hF7I2jL=-^=e1$1Jd z&fNzls8k6=&C`fgvn-M&Kk)l%&QdpYO4 zhdi3X>B(@)$TT81=dbD-q0ZA>kmN1&gZj3_^5jXvepmKNYKrI2tc1ddAJRoz(Z)6X z3<|{G3uM|%?Jf{EJPGm=5@%fw#<5+Fw8J!4wDJGpSTJ4eAT^rRq6)-wITu1?+OMbZ z{xNz!p7n1_T|4fE3@O_Bhr0SpAPN)CS*>Vc6t#sF?hgz50dJYyHhO+4yP7QQ4IS1w z{FMhQ%yMU2E6j3dVLzd7N7(Q@RVEQW{*Ho}E`8H`{v=Zq|Fqr|9Tlqwv_1a34(nWg z-aaAp@B8)rNv_ydV@v)-7Kh=q2=fR;&#cY`tYj<4K!7HB}&vust|KkK0d{1WgGVG9TxsXq? zqy1gIO>jJ9u*4-K2k?hFm{h11S~O_7m5p|9u4UP^lFeV{^0&TT%&+Y`LsRz9X& zZ^Ze+*MyuxCEx$MIucgujOK8gKPZDYT$^+aBIroA`AZThQVcB~2;2Ox6TRQPys}_D zMc}J)_we%Kbz;ImeDB=+5!tvH#<>F&7$%4DhkD~33OF(LDxTW^l|bGJg^Ewi)RHV|8$Spc@W&ekrhbBuj_x@7} zjUa=Uq|+?eHtP!>vN|MU>zB__kSrx9TGWgdUG(|?25+5PE!8_kG)X%2KFx^J4VJf zuBU^*Xg$NO{cDU?+D1$i!afuzCjh3X8=K)b>fNOQMu z2TK%q?)?%q>oWRz@9o66emUkMwD)ihB+Bj=2S}NQAe9J8;@_pG2zEi}72HWl>4x89 z9D(q96EclKZ>7xHMi`--^ifK=_Z$w54~pgkhvI&ek4jlv_^F;~0$#&-KMHGZ=ZY^D zH;<580w9wK8JiK4gmk%3$DJ_=EuyyFj=%$oG&0n|^dp?h%nZAG`^M=QL1Mk1$U1L? zZ)9g7$n@*I7jw|-TdvZ(FB~#cwGV(K+CcuD#ce_-+Wpd`Zyx}RW-)=NSr%t0Nb=AZ zM09P$lN0(W*Y{0Ki=iYC=Lx|1k70cWVWN>dnWWq`rxq@3c*6uP7rE+!>teIYw3i{y z+H^238Klwujkp%jw@nFoPr#Ucv|^FMUMZHAXr)+M z6O>{EsBvVCQY=lITCp%fE5*_%sT4z9(a*g>#-u2bVF~JO`A$38S`a}6Ivv496EjtDyRFp?s{eK>6~XUqNP>$+}F8eB=Ru=h6NGz zvS$lq0GGdwHYLhuGSlF0f!+sGTUG4;cx$PB#**vo85~C>0~mprX!J^wte@TTmxt(azjT#S>{D8?AEzr@VXRg&ix+HVMun9 z9RxeyLT=o`3IzcRyQ+8ET{_<0F9I(L-wC#@-O^j51c?X?;+YnTg|@Xplog#ks z-0ckWKgcl?hl%{t6bOhcfped)JToy3_RsFd;C0CGAZjaD97ya@Z@9=8z`P zTKefFGOJ>2BEg0QVGck9`)h9}Nsmyi91XLdt5z=AO|4vJR#3}D;Ja2X zy{FZ3!D6fBzHp*KgpaaTPVDV*%E77?O0i8X7owF`E)zg#<)nPh9njTs!OyGZA{BvF zE_rvY9Q|imH}v^~aI%ZGT3^K7Yvocj)XJs!rj<+SPbjFzgZZ@zeJ$Zp8_NPOa!DG4sDff)CTG`O^y+@XBR+rF3JxF*8+e)P_b&Hg}e7B`e*qqcvSZZn8;}6pM;vFc=+e z=-!QDU1}KI=G4)y-T<|b`QT9Y6qklDT>SrI2#s8j4x zfvfWt)|~SQWtRWweVc+YNXQm}BRx~JEya5uVHufI@`qc(GMOeNEDLgxM8)Enny@TL zuMrl@$63NMY(UPO5tfnLTK-Z>SSFqH!!o*z#FO-4v3%b-ETb$RCRayT0IN;#%6o_a z-Q!#>VHxFAx&MvcvV74!tk<6Z2pof~T6j;juYa-f1@Z!(?k>%x&%8UuW7DO^%n>QU zIF(-K!7WcIMeQ*e)A$;vDo(=?qtX|KbQ@&w>KDp#;qdYk^ZM%`#v}_SDePs;RQ))# zW9J7C%mH`MJMp03YjmHnR zEeqYUKZ(@;jA7|6Hwy)qf0GhA(r__{#617#&iFEH-+EO zVV#G$zoQ-7uO(n-_jEqFOwtIi$)b+z9lYIpWSrh?ga1s2ksE`}24rDBAcIP*I7Y61 zM6dC>5O?~|_12c3pqf9Q2;GjNb_AhTKg zpn~aqnqTC0@z-jY2M;^L{D%*YRkys$RL!pjqpA@Dl>Rw8!e#Zq>@ zE$lbtu5?#14oc>2YhnLHhruY3WiPU@LfeIf6&g$|tk7U$VTH+|EUeH5Vqt|5h!*yJ z@(5zvLGwx1SLgiIm9yqDw6Mb9cnd4Efm>LiMcu;wGu=BRG???w^7q$s&8S<>UPf(a0&$d<=xoKgADfuj{FkIBaygSWJp=~2i zEv7Jt)xx&Q)$r2|;AJAX4Iv*HZ_8q?-_W=sZ)jnK?74*%@~swDD2rHFA$x9Ng$${M z6^afPR>+}SSfSa=!hT0`i-N_waG+x&DlE+VpaOQ|B4rY>n4aDgWszIF?RNN&OE(SY zK|^{fNduorSQceM4m&my%Jw*j(~3p5B;kTEMsGl!ygo}j;oo){XF2bTAZ; zG{}1hb1_1RZFzMPoN?tA_P2Fd``G^Wb>lT=VZSc@8eCcem`5_^-NOF7cUt*ecb?v( zI!sKyqr(s%?zQ$~I*d#sR${Q7{vV04AuFFv5Nu)pREI%C^IH2~b=b<2>+R2splMqh z)5o^*#S*Dq7fnQ%MHU8ETG+qR`|a+#x%|w;HCxzPz2Elf&oh5U3-iu}_+DS1Kpxoa zT>J^Wsm_bL-hvc{eA*uWkv@K;O<1}1O(x)4WMOtu3oFc3YGH-xFDRF9u| zm_|N(2sb(evbbgkNkU|Y>g_R~e}I)1KBrKAJh+o>HV>Tp|%m|D4D6|BngS$vfT@o+e;uZQfXo?AWgB zu-*rF{l+9Ww6MRg!@$L6Zx~qE!vyTp{oYsTpZME0)!z(aG5r&fTTFk`jm7j&R&Fs9 z(wyR=E9fViw#dSKiX8@FSWHE43Yr#jcH}MnYf=n!3N*Y>vT|+F!3y&!*-i^HDOuPb zlYFV@bnddZyZ)38>z)3xcjRW~R&N_DOv+?o9euJmnB+9UYf_ky%C=URkjlaeb75K7 zZ|Y-1G5}9mQJB2Nwl-jrPz(Moxy~Lxk6%3bz0inl8}#<4Gn!>~U5gpS&~1^0_CpIR zw8L9ip=sK}3QfBfR%lPQutMv)g?Z~n@xos}Hdc(UA434l7_B2x4dpN-AzFL5(v)~6 z%02&mnL}_-09!!MXd{F~&3z%`@X3pt-?(-^y;5qU)EhkkNXBR@N)0eRT2;qBKxIdU>1Gr4I-%jE|SA z^%~9HZzk<#BGA_9xd0=#+B@q7TRo zBr8l_45t^48R#_5L} zt>A6?iJ{HqQnjGx;p(>1czLF9fc0v5qOPlO1wOX2}Ojj_B z0ak3dL4%kq~n?N|3xzkR!*)fhL#z8?ttWwLH)+81znJZ0VZ%qbQm zc1syf|3#bs?Gl~3-87AU9d1Ban~7@c2ijV~CMq60u7-*FHmyhGeY4?OTT89+YO6^{ za=1EE886e^xD*p>RA%aQhk?F~l&kMxGw9F_YC+h)iwEdsmbGyDT5)= z!r+GC5-=L|R&*P3F|7OusKSA#Omz8A@+R*c`O4n$>&iF@Lu0M_G~d@;wy8e#ZoSeR z0!Km=#!z1Jc)j!tzmdHE*x&CrPB7u`=A#?}qJ_KUPqyy0H2fWrk`-rcepkLYhG zPnKS(*M1lcP{t7iDI(Je?8}$wtI)p;@b3}e%poLHOaMj*aN|aMZXS66v%2dm+scg@ z6Qs{l3(>eBQD~OT6B#>uFD{`O$7%RMnI|XYxvEusj$z0pVG3bR0qCZg4bS0qXm0V4$}#qfzi# ze4|+<8WIC?&X3-jdO$pQ1ffh}Cex!8bH?iLn42iVF|U|?L8U1^xA7T_nqxYF=rqc+ ziVbx2i8el7z_q36ZMXtMjP|}n)SDENDCXNx7Z0_TzWcqi*y)|~-=Gir=K*MAxUF{Y zKt&g#MWrT zAyo(zBG+%BkQ71Tiy=`5$wLtylBlNJZ9yhhWoL$`GdrYx+C)@b&@5aDJC_f4uY41) zsZQ=3;fwldA3H>u8O*%_MGO)r7`;P;i$(GX;+6r-5wd!nB5x^^>=-;4eo9y9Et;;rP>cuAGGSR{Pqn?_jME!A`O9xE-%w>@xzmG+_;FMD1+vh@rG+ZuF@@W8yg~ z-`NdFdATQ=p+kqmpZje2*}3+$Px=kz0D>kBdkf~_$W?85u!TvBX}D>`bajr-X(%2A zoK$QEaeR`8IKJ6aYUyDk;1&tR=wc$B=;0^CF5=|%t8fXQ#paPlBs!kYdC|Uiz_0Mz zpnvTX`?`2L;W{OD!;lMzz5FK2Pfughtz3KIH%dfR@=Bo3D*140aqBd_QG~n<*g&`p zk%b{{k*KbTDSo>Z-Fws{&DA6rv3EB<7oBOi3mNWL`xfZ1x9>g{-qzS$F#?{qpg)I( z(EzBy^3zk;jLG$JgM+qqO6yIM4IwCc-I;j^wJ2*MW7P8#Rye{ZrPNEv(2jTXEIlB9 zzNi8d#j$F=HK~pe>PzrN*`-2Bmm2RPoePOYQEO@SU<8#rVQalnYE;2B(-&N&JtY;Z zifK*c6}_>(6DslgM6RLGYXrMtwAv!2xZv0Wz}i*~$}Q*ud{itGY%1-nl2!*e9u?+X z{+YB0;p1pN9ux10Zp;e$BBL)5GlO8oL~4=g_m-(vqXG>Moj6mA`QqVLb7p9Ga-vLQ zU-j3i(t&w6EYNTG=Szlp$>#E|?eCU$8Y_W^V8$*N-Pd8eKuJPv(SYQ3e-)~~(gYRt z)1JIuGK201!MTApt6r^46tuOeUYmgkJz>6QzZTzUHK6w^QhlzkmMewhAHfvgt?v#- zrfqU%L*$B|F)&?LTT^Nn^G-N;mdDm$cI+8xGM2ZK#)324gGUA*xb0RQQ>AHhRPw5h+OVuV=mSp>z%e8kJ<@fq`G4@`iHqmES z(}sdsrSGO&hZBk~TpMUZy;-Ri?3XujP@C^jD#+y2uyoVqMsvC{Gc^SC&?~Jfws8_Z z)@n5Re2B4``uKJlKOKj1pTn@e3}YFct^RAep)vs@e{)-ZYVvBe)ST=?xkehL@$EGj z)rMZFH_&TxcALu+cH1WrWA)Yy)@MgQ^7UF1Cwa0TVr{9~uNbG#TA=jZx&hXVKKpDP z7-ieP`Jiy4sW!`WT_jq=F2dJZSKehAOda)F4F>)3>aGdmWpxO-=@jnoaxK03V^igK z-huB`n(&*|f3Ku??Bur(8Ck8nkT*!FC0}1DPtq)`)FssCYfF_H*w?&>Z}Rn}9XpIE zR5LDF<%rEpga7RuxiJd%kCh9= zQd;L9<27q)j3R3?TOIT%L>A$=6@Qj=sy0`MbsMU`GxQeR)pC*<*Zd(=r6d4X7NHDt z#?u(6`Sryp8VFk^j83LZ@{v_?2*GU4q}5eKd)7aL(jv+_iXXQ_wz_Ouvd&>>%&t<` zf$HZqxKEJhWhheyF!GWrM!i}A+fr#21Bb2PR?sP&VKgB>7#cKnlT#Jrz!0`4S^VM9 z$tadW{vwu#;YcvUJGIYxPnr)ZTz?`@30axGIi9724+;69K?~UWUU_<3-P%t>Aj?p1 zm&=(vvMM@$-u~l*NoND<@iRBbBk?qO33#~n+?C!Qm|MxBx~{aV38z5(WH-H6)F@3G zx2~w@tr9%noPd@)u=tKOYv7q%qABw|LmIl=eMKo1&Miu5=9uHOdojkBNKLu+y}ZTX z`(<6N{$5l1Tjn<|>BxyPfeC{X-=td+u9^#bt8QYpmdenA;-A+Qm%#4dy>yAp6=}pg z-VcQ-GxIr@eoU^J#mAj*_IHo&Bd4ciOM#Ioh4amF`naK&hgUB)CY<0e;v7P?nwTL@ zJ1idbAZe<<(9Q`LO<202^T(TciALSBp=0u^zl3bK>dL^y1(YeXYHsJyxu-IPj(M|U~SJ_j--d5ec4$`&R3eaQnR3Z zlh@CYdeYk9lQ=fdBoV<*ah^K*Tqr2;)6elKKxmSyqkLw#F43BylHRVjpsB%9ess1e zra(v>6c|gr9_8pal)qOQkMvmXs3Fc74`^UdUB1!pNW$<3(^v1_0$FjB!}2x(`%HLa z*c-WIDF$mj0_tGf}_D`O7@9Q~N1HDa% z4+Cwo-r?u4W#WzH0mk26JVz$_=SNd3pI=3UI<^SHo?T7(?<#%8$EA#|hV|0t;!$AG zM`~{VYGp>W1DT{z^<6F7yjmX5p$!&tva7k{YW7r$&(Q(nxfVXOo^k$2aSDDDVL?y3u=n z3IB)tu5 zNA8}?U7Pfd(Xw4M_&`|)Bpv5nY^!ERp%6mM(E3VkJIOlk-sXh^KSR{ddPx<-(@j#c z6`u)7x8`w2DOk9V`*a=bND8Pj#29BLxddVJjtC|P#C(i5lt`>%<%+lDVSmu1$ml)( zG~UL?S;>4>2LLBq>_-#yc71t^F~3fGh<1yK4*2j```|s0Wg<(@5qqw>$hdhO_k_kZ zc-&?x+Lw~GNgyJLB7u|Fkh`;VusgS_W_1KzenOgMQ1tP+#Q*rws9)V;?A300FD%42OaC((hh>271rKh+>E6UhRlVBuAP7plRefUtz0+$|}S zUY70X8c%iLZN&7%9M71>AY@7Ex>7yjHpb4%Smb`Kd8}-zwLr;`f-yIe0(jhj6LVAW zkXcI4!`rZQbH2C?<|+9-Bw0^(9$ez2hn|1Ba^)tmJE=;ZqQyCHr{ExBQmvAL#hRHE zGLzJupq&CbsTdq)2ieZRMW(Q%9TyJ$1HnMktbmYgH5Ox%4Kw{qZ-8*CWPEk1NvX|D zVM3|^iGmn%#Dnyy;RM6w7te75DUdV;CmB6g`=&77ahJa&uO&yLc-h>wk?h82Cz3Fh z{`!20;M^e0gp_9xNA*Iqt_4MpL+_up#$LEIMmi2d;$Jnf*se zv6HNke*@xD6@^icCWua7w}N{dg0fLuDh2 z=;=4X^f{{HI3M{Yqk#J?BC9YuAK%4tLSNMVcuC==xdZPCg_e^TID~jZhmq=owXm~* zW9>-amBfa-kCjED#`j?g94bQ`xhV5yN1FH>FYteGDC!T(6y#39oNChDOvtfCoBi{- zWcTRU`+9u_di^AhY5V%)exqbe=k^|Y-U?CYsZru?bT?hPTaUj1iN!di6n z(~JF6p>*NNDS8{hR|lV$X|t8)9OYBn3dByWfjsySbU`cb$5$x$K;BjmP8X5r(35VJ z2BhLiDV9u)E&gjb;>%C2z@CLU(m$nEa9!#ksqJuWSeAreCLV3o;F||epoU5Q=WzP{ z=0rpd$tEPn_b4!hmCXX96|m%^m11}M=Kx6@&zhSDNE>WLj#Jb{mH!ZFG`+ z!le~&Pu{)Py>tjf!@ooN9hr2k;M7y}t(7bWt`d)lmI>aUUy@7PNO>2W=8fZjx*Fp4R~+<@oe@V2}`~fDnZnDkY15kEqp&Pc}UKQfcwq| zlxHM8;@~C;?%;5e~6Cm0nk6;}9r*o7NXc%nF6M6!yz zT0A49#78=JS!i|yG79WB570(lr4f{K0pv=8;IwG@e3Fg$R+A*m`%>}Y1cMIm7qDp< z3b-rmAlmlsr?6cP^yM^D5)sK!vXE8_J9gzVxqhvCuk?1S+8Wx3q;3><6#_8=_>w{1 z!IwcXlIW~lJkY*OZowgxqa=oBW-8msS2sjJM?i^gJA(&r+T8|uww6< zBbXMtrF_;0_AC7}qPO>2`^9-uYPp}n=6H$7Zic6+&ygQf1QL$OtIM^@?rJ#i#N`<_ zMCp^Rou=>@lQd&PX$K-RgAS+g;fT%3Jt#vWU!f0s`6k*)Lbl*ZWZGNjZ$P_YKWW$s zH{1kP@`v~cTx-aIjGc(aT`aK}Uj-oP|!jZ_#kl}b3?D$O5c0D~$o+l}(+>;uJ z13hztC{7(eN}6`tY`9 zP{!7APFxcJcpX?&n57l}aoh-~ChCw19$U;_c+Pz>LW63tZa*pv+aZe+JB7t)-dm2? z<{*}!I0t-QGT69rx@e?(j(Gbo8Xt?G5GoKXm1X#MT?FewXNyBpOj1;@d31_pi~>Jm zU^ot!mE8tixdHGJfmgk>zxVM8uS5U1DFBj~I3gocPWzrno{R)U=2bA*dXNPgdGkK} zIN?(o&Xe|ob?DXGcdBlu4bqWe%iYCK@jh!GH&fk$r8h3MU~3WmkK{bae6*%o9-qO_ z-WTvF8WIK1KknQ)<{|uVWC0p!@`i%xG2PNAh6i@L#dnC&G(5bY+>z5@QvdIK-^X^~ zxrR|h=Xw)_Ucgd4B7T%qAH?s<-YieFhs16S9BM_DuA5 z5_3LUEj8-Y7*t~tM?^hUMwxJsfP{G56ok5|fWegz*1CWmE-#*IpP+ECRsS9O?tc8d zvmfvNQBqO!&zoJiC1G3Yd>nby;r7hbBQmWv$(WpDd(AJmDz(b@yvA{13?nB!tsnQ^n^)ByoMVsG_nb3#vHY7`XuZ zA5j1J6@bGz6t?bBPYoThHAN%f#qbzKpJuxgmvo&CE-vizp$(;(ay`xH1vR{@E?^_E zOiZ1Y7mgz_^2(=IJtIM9;S2mu+qGc6ku#T$2M>fS&g~_#?T)mNqP{sajMQ!=38{=KNSQ^rO$);J%1nvtyuB`}W7FW7c!zW{W7t zTy&(OzCELEo}@Nwm}OL`1*~E%ub$LDyV3Ji7#Se)M&!7ijNw|4%TXzt5Lbu8Fx#3Y1 zQf0yzf}P#DJda;i_FT;FayQC&r(_~_V#l%voS-S*(S=U}&NTVaIUhN_E$`k5n&W#1 z+4eY5p_?)nyBwXiFiMG~)M0h2D|1?oRkN>`kY~oEZgAzv_3}a<9G)qxBTDWk3yV?) zx!OFtjdd94OwO@9gOvl}NZ^x#rQpCQ;?iHoQ&^z778d0Wa<%DF%yQ0WY28IxY;|>B zqYg%V7XI)0MGOO7jv*Hup5g*iTry9S6#zF);i1hPJXG33JZ&%4nrny4Hz7Y`b2{_Y zaOLhJMZSX$M25Tk^%ro~NbR}9R%k z-;q)qxuo926J~fcG)o)rn&O#`K{}XfnLL}Wl;?>{JfL_E#ItbwF5edZag7N8spVk! zfL<4bF>ya9eU?4EPMN^Sfq@2F46Vd0Lwb)cqgNUm{|QUym_p10$-6A7sFtAc3w!Be zM_-7-hfbZ_*1K~RZTZXA!XPQY_VktRsfTnd3c4#|)eEXaf4}^c(p=0!V}`8-1)2$8 z&*f`p&y&VYTh0!M7wn+Hw_%FN0+s6iAC;X2h$m#AU1+QNe4G)ABeq*Y*{44 zxhir6y`^x+Q9S)U*t{~qBR01cN+fKQ2l59%^vTqOZD;(Ih{4YqNUIRS9z0pl{z5V< zho*ZMlbcF1X!rPV`Ar9(f92eZ&e9h?(*x5!TrO}wS~n!i=h92^<@c~qMoXhYUM(ZJ zBQfJ?$fgom1nFgoK-nWB*!7TBeTDh!Xr|DDDjby(<37WpQPcN7p*#Py@JEZWw7%F~ z#G4xT!Qs~U_Wb#S=XZP0?)e|U87w$3t?giGS5XI&yULvc{I&Pt2Y8b$SXvCtGa`2G z9|i~~eHI!uIPid{09)#fF=GPA;T&u+L>@Q|r_Pl#wBdqLodT@x*scv|*b8)Jm)7!{ z%Zp!m8s$_+9=|~r2hK*6su9jS9g~K&1Nm_N98TAmYFkb_g^5~~Tt!f6FwgCv5^sJ| z_Q^Nx$eHVd$du~f!E}i~G3jy!@Bj;{X7nQ%nB1X`tpEp_DW3*{zr^Rd@vL{^ej8rH z12t^95PBaCrt_didX4OR!kh$8^8yIgW(>~-Rd&@|BF@A$??;I$tx5H)D-Hrx@c#IW zvFbSlo!35EiUQ#4+5038=7ubzU5LfCnO80HDRJ$4eTdBch9)?;jmc^dR&q z^pNs!x%)D;7aZ?FH!6Iayta7WBn+B-oOI2l+M;tTDJt3bZ9*Hp(JY-4k++lA!8#gU zoXYlvi=;3a+{LfsND}!mOh`MGvoD|@@{9$>6kdb$LDa<~=gEkLa8LQ_V5XcR$Am(M zUDyL1^QCXJ8zEe*_Q?mNI)pX}t{z&OGOxOm$`zy}En0DS=vhsnfD@~uAjA1Me=7dw zM27i0c@nR4A_(uQzllf%-&8ng$5t7BLuno5_;5fAMYD8_kK2JX2Dl zc#EUsQv?N6o>Dv6{Ov^IZPs#c1UzC-rsL&v#r_cwKXc z=a}XF584kQL7(m}&H1Y>&E3M$2_fU#D%Eo2vals9h!mFLvnB20_rY3W9YMXZ8D4F{ z4{_SYfl27^(5Jt30kJ^<(LY(39;t%M8(DAt^1^n&#$dl-Jm_N+UjH@Ddm)IwnWy8A zJ8S#if~)aZVWR@i^Zr`?HDaL4D{(9#!2aBkSOxxAybt!mxZ zmB3G=6Tn;D=Rfb>IZF?4wI6@pS-3Y_R1Lgj_t5S3nS-=pO#! zB`Scd;s_R2fVWyUs_uzP-BbGqsBkB%u)J`%efM(vlYIl!$veTMJM)hUD}XiembmlT zVNxO$E%EZgLAdl`uNDE_w7WhK8#%CA?HSZv0#s z=MGXp%|}53@W5UPKD_?vmSVXHC{^57-I;Jo7(8{}YEo0sZz6yRd^Hx0Tn4lM_`S&V z8H#72NA_*`12ljqo|d1Goda#szuY5{#shZ_L*Ul8@TjEhRKIZCRmB6BK&M_O`5(#} zP%W^h2vGEw%ab0Rmlkb?lXoy&P4O>R7_Db!OQlL61haM~fJS#iQ0}d~H(;0>`wTSr z2>qZQ!{u(TepN_7&r?7JxP+@nfTC&9mjSnP#`vI-4^0g(fme4T?13KPRVwtk4Hb0q z^kBn5Gea@4IwyjyD~NTE}F1oFPz+U}~ub(3FlZdUx6&=CSa=>;^r z7z2kMq;7gnlf$ER_dn51Q~pg7ZVw!d?tvqC%qX~Vu=binRJ5-{f+V+WQC*gGijBvT zsP9`?enNMX=a7c6(?!ZoQ2MHh|b6p4IB zodb#6HG!548$J$P4HVdPDi}n9u%Y^(G%!4ISwi9ID)JD#MG|}qcY#GtrNgn!MK21w zUWiJFyeoMM69+()v)%4csA2G9^>+-{>Hx$~TzZBg3iw1y^rh20$5*hSWO^M#FL>Bk zHFDQB9<`Kd2G;0Xr)R}a2B`&Fh|Y~vhYm3cx?e9nYv285<>p67>DGJxkuhqRg6xAt z>BwA5l3&dqT1UI9{(uez$-#%)b9d+u_@_`R2^ns-kVDS6lqg8|U1jhnJiQh_L~a_W z8*Eyz@Gv@V!~GOkFs-bL@e$2Ga|lE3eDusx&e`^zD`3Y%n`i7=6*QUlNfN++6JwQ^ z4=s@>HZx%*IHaijxxf%}Vqf>n962jO4`s9;yGZ28uH60f9deZ(_24c>c?Uq@?u9}T z<8tyk>D>$oCkf&GvnwW@k!$3yQ`-mT-5W7_+c7=lo)dn4A3W%OL3XkNoV&POpm9N! zg!|OoSM;(N(hn=udE;r?YftYdkREk+%i<8hWd&k|AXl7aaz{xt8dM?Wowc3@8-hEb z{8HD>;^FF9FZw$L#~3U}j+IYgus$Bw?~PkjBF$fW|3kMmM48#xaIn937Np0L#|@>% zuKdAaDt1$d48NWfz(*H{-vsTSg%tucZFc3uo9!Ei`Z(<5k1=LiPe+YqoIJL=8LX-+ z!@9O_97KNu9w{*RmeDl=jj>bs?2*s*ty{hNHE${0_QQ2T8rU?C?6(UYdXzXD%MNN6 zWiJVCZJ0u`CtMPE<_&!p!8|%7H1pGa6Zv7U~+VlN0~9Ggqbk{K%d0jLrb?*2y zbj$J!h064UL+fly!A9}3dlcNPj{4e@XN)v`;>e;v{K()C4AZ@7P=rJf{cB_1VZow+ zPGyO5Vg_377c{PAOTnN2K7B;!-RAC)L`YvzAqe`7(tUIl$6Sl6;~NHzITf52ok8qf zG8#|hn(i6#Bi4wN%U;Jl(VlGlqUuzb;E8cb=~Fw+7Jxg z<#x)pwA>AjLCvr-0Jux;WG9M}aFgr{GUZO9>r4T%+mE9()njq|~3+-O$DV=Z#B z&)X7rs(ys{)XD*ZPqhM1@6hpCFza;4>Bgp~3-f>g9*R5Vo^L`pV$f;%7+6@0EnI0?Z=kkc!0A*~)yS93Pk7X~{BcL^>cic4@R5IxIQKp=FG*CKg~s`CFALhp9L15o(f#CL z%;hCS5QpRsNasMw_~MYP{;)Fuo|p+zPe`o{Z3;e82!h|%YD}VnZ6=cYUF&YYo}BMI zdET8vV1vya?=U=8&w(h*{32lK=nDsuw8}A!&aCQ?Y3Ch_`8${~<@>cs{S7-NREBQM zoQf}B4O%LxHv^Sy-+do3IVLU=f;6Zr-iSsBq8ki1=jfT^R2-~*49QbJwr6&vHBs78 zZqD#mpnhFD^0PaaE!))FK=w{w>z&$%)=;1R*%B>NwCG;DlU*@)j@f5Q;JjULY*Gqw zwRvyTXM<-1xL~}eL~k7$fkP}-oPtDa1%8td&%v0PbL9{Pu^e*5UbbA!uLxC~e4vvF@J_b%5X<>1{_WM;5^1F?9~i z-e#Qin)X}n#pmsvSTQ7FdaOYpaRx_WORHXOP1g`i>2>6?L=m%+zg0%on}r`IDp&8K_rMutVyL9uK%M;oy&*2SH8(^5sjmF-RYl4_N8-y9^%MX)=2u@ zRuitMgKibbw<{t_GTF4PoQqO$Q;Vk0JLoAReG+`ALD z{!h`i5N~n#7cd*M!Y3Exz`&@|o5A4S;WIa9ta?|;!_ju|9dy9W#BoKQog9(YpqMv5qa3tzZCqB!N5^Anc!sGfAge7GU{j?@JHZ@WlL}UUdTe8PrdFSz zWtUg$tEK9DrCoXT#A|`JY4Kv#x=MAT)Zo+~!9s0qlxD<`pu#hLiI&u$ur^)}j*Z-} zcm)X=_GT!Q9>d}iXQ7aLW3)6;*`1G`vG~Iq)BX3m#J*OWY&ECKGZk~9%w*vrPkLtf z`k$eDc%)P{Ja!nX62R!}(4vGe+1VCox{8i3AI7n%MxB#GMqgp9S}~dVO##<=6YR>+ z`ufaN#XMu_7ru(vB23lnV87(eQngt!dHDRlzfyUJzq9M3w7vXJrCgw(JI$P__$<&J2@$}g=TQF3;!&l3V#6G1u zh3mYrQr?-Gr5#n@&otbcNKALEw6k7uWg54kY>nY6l-iW9)b_opQQuj{6{Jsn4PGv?&@>z&sv1sQZNwzD4@TJtuHtoU@C}SDlfS5oNN$om1rI48Qr5nWs z;Flad+}n4bW1%-!CW$d%vP)e5&k%8!?9Nu4Ml(!vB?PR;Cd{?M>BgA9T!+-XE#mp@ zHS&PoAhVJe<>&;9i5O8x%z1*7&fyd7OIJJoDZlLqc#0}Bvsk#^9%N-efW_=c zy)kV{czLL0i5PpYQvPL9geDOiAURRv9zYK6yA#vMSDep5ztAOqL#r`eVg|sQv&_Q$ z2KpV^S}h^$5!9b(ZnkxuC;Tuv=6=hQrB~{;aOFlCyIfxzbPNbkNeG8LR!1k~u5%l6 z)$A{B**t8d>~Z_eByKB_9UHb9!ld~S54{)(Jeu4(oY<;mu9Xq-pRg|L@osI61gv~5 zxX{gj{{;NT`p(IEqc5i?x7Vin3|KbaU$P~zjFWZQv)G`yCEW<*<#8IPliS(OPP@x5 zVwy~JmS3+@btDWOX_Rs9&<=k9H*@Z46W;AA4gEAx18I2R^3A2~^_`Xus^za&rl1g@ zbx@1fRcR9uJFXUwwQ#l@L}bjoRmq2tJ`QX#8>4e@n^i>yKbuVUSsIJ(okt) zYH0NoXjt}~FXP--V(A69ol(=9t9uBCe~A8KRmt%gfyzZ3ZxwyUXNEvbyqWC8uiBts34b#7k3#vWAuVf?3-RUkV$|CHF3r zk)5w^l4jckHEpbn*PA9<%6w$0Y(c^eD1t;fRH0JYP%h1o&Mm4$nF5HPiVN!I5PG*6 zYuQFx&F$qziv@IPkr;kwSG~5K9{+>ph`yU?S|UbDGq~8alC_8lWkFq5S>4)gcdd7<3?1TS2foXQPmrV{U_ z)#cXrhQ>%*@#P))(Y91}fZQR%16>LV!Nhi~JYA`pCHZM=eP%f^zWmJ{CRAJ1mg0;M%z|l#vzGxTK846NsuHFNf5l?+t+WmAAf?`c_6nO zGY#B6IBNVUQhbN@?cQi&!&P>vm4+KLJ1b@bZ6`-i*o*eh$8Mi;X*^zu3mlE+ zKbdd3qs)|)3v}!jC~^m6O?>50LAxVma36w?@s_r|aEvm};3C3XDccQ)yYD1|kI8z@ zLF~N#&dJaH#5|D0^MJw?*aH1*GpCt<20Pc<2qA)iBe5!6+S;Bioe$eE3?UO`!@qa{ zgona|7}Yk_CooaaVf;+eU9H~OjBm>2)O7ZDIyG{X>ja0a-eAlzQ9q7lX7C;u3cVhbAy@%o zJQ3OqBVasO$jr3~JNu)wyUvlSp>v*sSLt79$AG{{ZVSwK%km$k`inO^=kr%7Wue)+ zd03qvD42wiLPqB3j)x;R^%$rM5f%QM+nD?(6u(^pV>$mMKBHaaN9RTOKULUg&Jhz5Pq*fdVv6(q%>ekeI4{_Y?Oh8@q1vqxCUD z_k6Ld6uo`s7O#)t(}GBk$RPKz!c_^mFYh`G!M-WpEE_@i3wWf=`vqUCV&#yW`0AS8 z7{{I#agn3VrYuT(F#6grhBFAA1Nu%k(#}L^W;F2eVbx=|M7i&b1`xB)`6yk!lr=gJ zFHxjD=z(#0j4MQ$E;f|#dfLuPm8R>tT+4!ZH_B3`_?a6)_8$ou;5+B=D9SM}pb@fn zlusFRh(>AhGBd%P8^od`%^Vo7-A??J>*&M)_Y-s}og;gYeaz01}(h zI3xfvRmEy@_3{mn(~YiQFUH;(hvSV=CtAc?K?ih#^}26EsGO`DEuRh${ErThdQlw# z3O!LbIwQUORWQ*dljF{nOU{lR8XW;+$vunF${jr(&Rdf=oWbEwH~asS_Aan>W!-t$ z-zKT!#&KZRPMQ|3VooqDV@rlcK2$r+zg_g93Gf@Sb}wj24A~plyJr{np;+tiAR= zYv033AweR~Ui-cG+Uvd2|1u*I;k~hCKN#)Z`v*&A>T$^ja|+u>>aYkQdsdGE<#H$I z)61PW)GLR@I4xkNvgo$vGJMQRCiXmE}6I5^Am}ulcGSeW4gi^;RZxI>$7;BDo_2GV~7HbhQb|Z`@ zx@sSFbr0``UQV&2SPubR&Lku=)WZbafpbw*>|qM$|))#`Z|!Y(e2MF@c?^BuRCVsG*p%|I-`#{ESI&S zi1+}WBmD^c$1xt*S|V2?Mv;x=+xRG7zwG;8rtdi=Vpf_n<;{k}lUh4c8?vS`SrIQ% zAJoESL{p@!r0bwKA@V*0;`%Twfylzx%H+xn+kxz};$USkaw-%b!I-g8q4pTj_n)Fo z%H;53U49MUQ?~c)NgNdal>8*sLYSo+aw#Y95oi;(RX`=8Db2@>x+aUz#_?NlQt}(` zrFMK|l&$+9ilhy9_B}_s3r%pQ1#)5)_fxiPyzD!{b&c*L4peMP(OXQdbYWze29X3A z2F(VC66drnBrUnlx7U#L71jVo=tFBDPvJ1`k$J)x+JpMrfZ}J< zY**NZeDfr6<294V2C|tvK9i+1P_`KbU$O@lnk-CZlws{W*o%ezcgZC@btJ`5s<&7+(VZJ9iG zJJf-&xrDIXNOi@kh`GO49vLD#a$A}^%c9a(50V$p07-w`XZD2gjF4^lQA~gxQv7NG z;(Wh8Tpp-_vPRn;p%TFDD2-O@IU@|YS&sEcS5Ow_R2p1}i&FmCUxQ2n=MsJ91ro6v zW*uQI!H9p6zA}d`@*rks<$C5pa+!qDPT|l~K%AYcm-V$y{#HR%Tim1%qWC+24`*o|8&Nq1kpa3Xxg*Nq}F&p6c|B zg!+eoqNs*%U*W7Gk29?_{z#Djo(_kf93cb&gp&=>E2KnSkWKz0zym=gXU~Cluuke) zlf0~!fD~4(vN7tMA+2p}w0QmKXlivE1#z~*QIO0GISOD&U5ppUELcr%w8G9e+E#bx zCh~T!VN2e{gDhjfS#Ow2)uEh=ELO@r!un0)`}BTES0a@6?FGR}2aQ&P!Pk}t$YV73 zeG3^JbWv2SuI;62zp;K^ljChzsLAbZtL@v*ngma{W~Y-wuZ)>(xyC6evD$c%Fz^5q za*=J2X3L)d9hf3=kq*5T7J0;hXX3~La9`wG0NgiL`UDOfwQ6cgV>d>G$-u3Eq9NOw z;4KAvK{C%%pIhPuP;sG7P<3PVBO}-`9U{&YVgmplP$-!hQqOcl;4(%g3p{@FywXBS zW&QTr9^KGlhi)6PsXkU3)QvVkuJ?at6-~c|UI?*JI=&}hbtr)%p(!6d(pVV%#4WhP zTgg>YKZ0mE-Z{!c1Cbe7hC~03J3@CST7jJwq7WM?V{&FYPQ+{!@_qKIh=Qah_+dHU zLi4Cs9OBr4?>9o+Mfc z(~YK35*1+L_=4nxGXrF=elSaHAd5dGo9lk2sRvl?jH_74yh?;7e2a=pzhHDRj?* zQn;a7tM4+likYlW0oq)lcc^PqdB63_Q9!npVHnsC%a*$FCsiPfe3OYo1>nQVuEC)i zblCO1q;iM&(J0*&$oDB-j@>Jzv=38?4IiG*O&uoR64MWgA(5D9nUe!jjly>zHHMUfzqGSO%L(cWEx~t<{aG zuU`AxqhpmWXhOPrOZ{bX{PV#0p!$bEa0m?HuaE|@8O9Fgfzb;4>d>gugQpd)9f5ry zon*3%o3hddC^FtFs%s^=x}8dMg>KDaO%Xy0J@ zqs)y{D|g6GD}~wtw=KTt5J0l;s#gDfXb91OwLj4S_{wU9z2$wCQD6gqv!sE=T2OW6 zVHua37aI@om<*#rWC+KTW}*m9_W`90R2>uU8Rl_w{^@i&JqGA04Z(Sl+T$QTT$Wbu zRF<_Lm{af-XLU(vP7y>6qi7ol{POT1S)qOLcsw~Y0Z!2~)A-Nuc9C)e5z;tZemBgS zp^mlM^bB+KltD4Wyow_61{?>^$h+;*SY}HJ{w`TPe$_YCKQ8SX-Bas=)0#0qr<>>n z=3-%1D8&nZ_j{IaJxqPAD+|B%Qtk(I=B%)Ji`EZkx5R6g%VCUWXaK#`(*<}S@}z}) zh$rACiiPL?UbXy5Ej`v=a}2Qo#!I+a=EQjrvcv9y{kzLHhJ@}+1n)t39)HF@T|%IQ zvjK_`9&lFU@;z|BWEYF=;vSfz!178LHkb~8*fPO>3Sl=wShb@v5_M(^hLO1~)Vg3} zYS{7IfPRihGvDcuI1hg$IS$q@rp@51m-9Og2|0#bSF86E-y8x&C4|l$G;ngvva#rt zZ9vNBxyVSh%skJJn#S4h^jgf@V`AVcL4O$uaR()RW~dh~179YGJ+4sjBg?hpUr26g zb-8OOq1_eg2)3>SC+#uAGk1go@03X)I>J%N9~i;I z?c@$QukwhTfP=}iwIjo|E~v%f4+cm^dD8m@#s#JN$DdG?7=Rf5i`N*;-big9K6_Y% zi-~R@pgFsn1Y^(?LV#i|YK^Tmdx+ftDSa7MlaGEG#pu% zu(j5~LJCobN`s^5h2SbjErDz}3poE(M@`@x9Xt@`=s-+J>cxF^axqqEgDfhNo&R^? zJJxyQnPt*@3K?S^3ak}^RZ%P$ys$HjZDrh-UYg1P^g;ye8r|Iq z5pwVxy?#%rJhFEX{0{M;I>t*1_y)I7oJeS`PH9+-+jj?$50 zT~{BlHb?qUch*uvu;^rTt2Mnf;7as1+MfxDbSUX&szW$SDZN}+%;*5@uS=M<^VC>i zrMJY4t6m%m&UC1q5U+LK?JYGpgmr#ex0LshcP{J$t@sS0y6DWHt@ubX#rm)i;HeCP zp=-mwPCSny_tKmDa1gRRV=1eb`$82R#-grQwyOGQXGlC@>sp!1VXZ`hA4UuJP4f&!{&+a zq@#vE=Wgc)FQawhTH7ZtS8qcd3J@B3uEfUMsdeEJ!96g8@RZr&_$ZvDD3x+8XU%Q8 zWX=pdY=dCS#o*K>E;$DqA##yziGV5sf{}+rFJ>GZm2^vG06d2kMVb=G&5AOO7&yLW z+pwhdeyb6Xi;#&0oxVUT^@N5gz^`Dt*~Qslh2ZoA0u7jX!$F?6Rjx}AThT4DL;!G+ z`LI&^SUb_OtxZtO^L}xGW3l-Y_I5M5gM1Q=aKj=X)j(;D7BJeAdP;RD*>2j&YjzY) z!y|_m`n2U8sOZMoQIa{};fL)z#~|FJdqIDwG$Mi`Dc^8ygdq5kZ9t?jqeKw_4*2|h zQ0j-lV|ka+3T>&3);KDc95F=q`(aFGrIV_&w}gf%ab1Wh3*kditG*t5HM$47)=|V4 z3SmU%+_u1-1P<-c2m9?kb)b3xt*;`s1}zIKYeA(bq1;#`6HI7mKccTtL;PKID4wa_ zYPn)?Tu=9Q%|{BKX%zATz_y7zq|7Nwi>1UL$OZVBx^`m|3W4t7t}Vdxq*dl}i2{LA z`|;c%SWeZ(Gqd<(?jm`KT=^Q+JTpjB8r*QUAxJUA-@*iV8PEXz`EdPqiWu!pjGfAO zU~<~s&|_j?ME`Pmcrzl|@;c0K3#824%R9g-1-p$5t@i6v;(q4L@dbl)?2C>7nOWL zZFqM|$(k~L$1=aBour?oU8nA(=+ckuBpw_O$b|Jmbx|H1IGDomL}f~AAVWk52X#wH zrqF-Hqa<#YrI=okAeb(fnT$Lu@YYAnViWXOJn9m{KTQ#!5BI|XkezFDa%4WyS$x)z zs$&3abn7B@hJd_H@52NDdFA3_VyP(hS%pj}wVs?o$jC-7h8QWQq1PdWRyYCxS##N_ z`1EolmmSy#U1xkOY)+{+;LJhva&ny|XFZ6Npycc%(T3=itGwSUj^|_Jzmw3RDHtV-D3#!Bh`x{ z_$5EVTnjUT-xFLZiL#4@7njg7CK7*lee)+Y>|ahU(Sf&sMCuUXoNJ?9ffo3)-Y5x} z_m}#eXMF)Y0_up6a|OU5&E&mhTo>bYIyG97 z$))>-u!%%|&1$m21c#%ek{n5rfwNgaXe1H-o>frzT`J0Xxn=N7`F{^_g?15%oR!E; z@hzt_2+7-|j;85<8HA)S*l(T+wFE`GxKJAe~Fb71W1&2ZPera13Fw>D+JfPD*cK+u-DdKrPkYE;dX%~zvq5JsZI!deZ&Xk1{(%vwDSsC#7h z{%X|_6l;+b03+3)0%e*8!t|O}m}=6rqEKt7!SphPrj<(BmR24y7Z#vE#MY<6`a*25 z@iHvuAsB1t>FItF0*%NS6c9{EGv*hCT;1tE)@bQr?Ms+UPc#?bc}OBp%$XUmoCQY# zWI1*?<$89|Nxk#3_4%R3u@m@g{!ointd8GT7N(K@xqbLe`qOwS8(78lb<8i%s~4G- z$)1F69B0s$>^N=&hj{UTqz6j(9t0@W`$&7H|YznaCB00^iWk>$;8QY8~5T5TzCtxk1 zMJM>o?7R~U*cx)A$$T^wP{yH7NG>^YA(zOEFh#L^7JBQuOdv+HOu@spqXKUYIu&%Z z<^K3jlP>XF#Yr!4RCCVF?x)P_I}7v$iVfXMDf?4b}rmRXU$&=&A;)xAU%Xr}ao0`>>hm7T0VO1r> zV+i7FrIprQf-Idu#vx$acm;d1W>qPZYHVBFgR{;wI3aeMcu`A_;!-kl>PN_^un{UYUD98ZLR%ua5SxgxnTDJ`RS644`(W!wE^A%6e^#J6PT93hw?g zQgW@h>j}@zAbMqHh3=pO-1QiJAzrzpN_ppoW=cyX<9tsl{Zr) z6-Cl$pp@3T6Z9s}9n*RVb`t46+t-gZW^U)l^n)~V_#9v@OtCWT-vtO(80VtHwEQ4G zz+Zu1Y_Jp>1`0rE>H#;u1C;&f-b&RF6~9cw62aBX$fZe@dwFXk{S_OeH}~k|eKqf#K`PaLVv~8~#o8>Hw^RY3mAM zp@Sx!VnFq3XakM{hm||@<3)w(0Jj0j z{@Aj#1KhXAMv(uBv^5=oB#+$z%n^!tpx~%{fB@DjV*t4}7+|!}uY>3?n#^x?8~t!)|K8*kKh8 zbzP~By+|=>A@qm!kC9Pqb;Io|f4n+CXo6SUKXR`PS#@`Qr~$EnWrFRMRo^MV8G+D; z1UIAQ;jV5dY>dOZP6A>KWoN!gZL5 z%X6Y-F3COBRydH0HMpblNsXRn=3zn~1SeErG0&zN6sH)z%ts@)44#1SIUX}6ZaD=3 zk5DtP;6lyLhzrlrs!bq%@RjzJhxwpfc!)frn(NU#<)H|~CjpzS4q@>X1WUyDPQ1=7 zWkVF^r!5L20$f=?C;pLzG!GUVaAcz29bd9YF< zQv$nUd43V94Au;Ed~JDdr-e*4!cCE#1X++qj5p-X;pwsp##;@!DNep4e&RU$d?aW; zbd|@Zb?Y|LGRfJ(at`%(O8ct?6x?Q#8f-ANaBpj)5+Cb}oMm z)+6K_o{6%zaP0o(4!qn$nan63`AV2JN={HH*S10|g&>jCrEJ!kTN;mOV`I>G{SKqn zr27I-+_4I)&85$3$YY5}%S4pf_0L5Q2Db%WmrOxQ`|hOdnbIlhfM(mxuD%iPvV9fr zt1tsulf!{{ARz{5A2>;q=M%DZucg7)#FIzpl*%^5MI3=^Qbwh$iDKK?ZNq#45j z_SAIq@-bQ|{BfJi3i7Qs_Lf;oZ3DhN463J^o1KjbN>h`n@V>D!(pH0HU@Xmt9lduu z^TIGmrd!g`o6R9ThJmdULX23Nghn7wmP0kLId;~~I*0=fUemBu&(b+Bq4l8REC%wonlnaMwFPbl_NUcWr%8t_d2H~r@aEJ}_x+ zMOe1DIciX+56J^b2ofIT0Bn0@$VBuFB!mG}8ci;2izy+IT#RSt?yWqCNHI@pIK;<08| zC-_+mRK{FRVlF_sOXdOi+9y6aU{({*@uZjvC zAY^Wcft?Cs@7^>Zfx%mx>JfyrO+oEki1=Y~sb|ElaVdF`A!a97>W|@dWrEXbU|3+J z4W*?NrI9dBSI?1KFA!hp6%pfH|$+QID$)K2`64L)1aZk57@Tz*&YcaBJc%kV^By{c*?! zk~>EmQ@6%LVWk7kdTz{4PzYv{0-d`7@izjjeSQrVP521{kyyJhG`jZ=f8nAS zZIm(r-M-kkNoh|b!#lmY;gMZ}wE6(1N9gU=yDw=@FcZpIJJm*}v<#b~%oWMOwF2BLTDP_d&l-!4D>pJ^R_qeH-oY-Qn+SJwLaB!-2a zT8D2p-d(}K#7{V$!=<68umR+`CNHlgPjAvRTDR{sUfrN+Se4g81nk63B$sz!We@D> zO<0Xa7!JiQ8 zKxw9z7HJ*mC%fbRI>=$7&#T99qG^@eOGiLyB`;q!o-K^a$=K_GPMm)O;nTHi(-g=V zCTL7eHD1k7*Fy{w$Hqa+x2`M^tOD7%JWbE& z!AsG$XdLG8^t$3T=Vy&BG~U*k+m0EFKUoSeivWDSQh{`2WI)pz8dVOW^ryt>048Z& zIZHkcl*0y>zzvjVlfhiMN5tESYaL+dP~b7@(8!G|Fk$TkaP>6#NX1(KGnGs|O95^x za{;CyWIjFLIK3#^!MNHpH?Ut2&LFMp7}OZ}#WJ;75eZt5pslN?wAU4q8gv4$QgRiv z)_4ZeJz`>w+WH_ju{c@w)vcq(GfXS`kmAmf^`cg|$qMDy95v@U9W9|%XOYrjmmLt# z6qX2kksc}QuJ!V6```ts3+qLS9veT_jHmVT2KYGpvQRn}QPlhrLG736{Q^l-x5;o# z9a*piSt#np?tutqoH@&C(iHgBBe4ZpnBQDPA*s_|+@bLiNT2}0ZXw}fx{nsb^cZ{( zeqHm2=zx!I(A5VV*=cik<^FUx=XgVK8BgXs@9v3Y={zyBEl%Z(8 zxYanjWa(3TQ_nsFKMxWD@VM^S&}8BQmK9vD*h9~I2=tecY>9G7(V?M``dnEi!3JLD z*oiQG(mt9og{|pSk4PcT}pVNbG zhTtkd*afy0QYVvTBh+Uze&C0?^=7Vp;cGf0s+iGUL;EPv&d$x`wk^nC#X|uL100q- zTf(C>?)~DV*ctOKB?~=cBUK|;U=)Bm+rIiGodWxlh7LpH z+=ai2SE_PiTQYY;XaV)ctf0bsyDw(%c!&vxudJCj_W^} zp6=ClN$lT=FB=z*k2fc$n&-fMMurx!Q8>{*0LTCb(&g;lxVg`@fe%;<2zP*a=yXDQ z5af`NSFmw!GMO>L8?;oo8C&;`70Z?K9jeDySki^JG{V>Bazkj3U#8x0Cv^64z zlAO&l_jW$p{*~mjNvr9t61cn9mo1h;MBx51#Bk91*$2l16wB!W&gepb*6Blyb7$zB zr>Ee`%Ik}`m!NkV&!%vsfKrm%=W)Ip_m1ant>rGSqwMaOqq8q#`A!c4E<<-ZVl>9u zqIGW+2gti&`u#xK!`f(R%sX_%odgm__+i3`1@Tr5WVp+WiyKpK33-xa^zZ7+L|j(N z!7@$^E&_Fb^hxug$%ah>3(6aBka+T;ed5hpvk(Z4Lux6WATEKBp?&q4*_~{ENTRul z1+tnNyeb~*rpvms($l@!Eu3r%*EYorNFNLYk&+H;M)gHWUOjD0Tkby)RLVwyZqN?! zJeX0UDu~XRBr$X{gBw8uanoHm+Blt_@-=5@?7j?!hTnX!)HwN2A3t?vke0*9s8YD4 zotmUaMWLaBS4z&87(*$2!U)`GF@aF0*Z%x|iigt9UK(t7jRW ze@yU#XZv^O3G^VcXE{V7j^vi$q_*Co{X&6@Cm^HKa`s7c;u;3Ft%e|%pOkUc@XMOZ zm@s%5VmPtQhCRa9=x9uU0FX_{T?z9}iWZRmViqnq10g+@rW4By?rEvR8t$Gi9Hw&! z1#^pzSBnXBw0yxefFI0~f~5zS`QbQBk6lBX1V6y}fhk4ny5CcklwGq;*| z&KtVJ{4~DipJP}|kbwe1l$3G%pHGtn;{bivzVap;1Ro6$;uzb}@v_4Z9;_8_fx`|32EC-?e=*fm66D+?2};*i&1k=E?}4@9ew@&MZG;lqO@ z9i~>d=@7}AGmV*(+%LbA$<=$wllydUjMUvn9LgdmFYl8YJ*2PfLdqNOFgr=;oMd~*kUMlFQWNS%ye(0WMN>)N)pJR z2Sfo7k{~`o$-#LrMY!nzw(?4Sjc_`=!v^ghv@O_NB3w6Y-`4AO?txmupH6577vLQq zi{Ly@rwExTLlC}LCpw|j4W9ypSb^lhKLuP!FEfyhaz1baQ3vaStwWod5;nPVuzheA zO@KeX0}Fu^SOtaf^99JFG<&zaUT#g~HlnTen{&i|l7#W>6D*?rB+r_x0PQaA&M6X1 zCNG#{meedR6eO@Xopg}WW#T=C83<~UGByo<7NHnu6vl0&{-;4}%q^0>2TcF7EFnbX zSkh&-Y*O<4N;3ZfOI9p5$*Pb5!a@HniG84`AsdpjcY)83HtxP)EZ`=_s&r!Gk@fKW zHSLT;9}OW6gt=Eqtxp%#oFboO@(&@a53>;5nM#UTe)-1nfC4IH{io0(_-X_Nfuy+U zyR|wp9@I($2+%#?P7d}=sgph$UY#F7B_0VObFb8E(Yv3PXll*Af`hF=0X`_}Dw^*O zCMQl1gf4m72+C&HpjVkfk6$oVK;K|-2nSQDcCwZrz~=JN=EVgJb#rOAHL@qB5CT0{ zLKDe2MV_6L=;T>g2J)mO-kp$_iyp3k6o$nS?j){^Jt$0d!)T&4`BdC6s+-X+l=uJ% zS4~6=bG~FD2%FMa-8%Yu3*_hxM^bbTSGs^`_8|#a1QsDYOUOSIXsBFU`OJ|ujH^WrzE>$Y{`Ols1Q9uh8Lql3V( zlBzS!$r!xW&@kEgPDQS&uE2L;zskS~&WXdHbEKC(S!D1Drg_vJ}&uP_vVaO>h%*lPjO zx$CpUFKXn6B)6cmBU*&)9A4mFj7O23tVGY1je8b=yPHb#pXZ`?IXc3`5DOwS;~Qgu zm0fe81=%9X!5a$k-s|itMMz)lOv^T>0WIvJ@D%>m*LUgJUquvH2> zt+*YMw~K+C4;z^~xWN<6_}OaHgkDY8H`5_??8?j}v8T8oL91@Ho2k_IrMrOWs zp=+}wha)RlBgTX20{!mOGMa_=j$zAaF6*lXo1b*mg6H=173wQ{NyBq#cU#^-ym#IW z)DWz@NPJoX#IHa&+9+UpVQ%*Pq#;2NnPT@4^3_S~fw5`Dd-nGr177(jywzYEb<7}L zjl4_g?}H>`UIiLxkXCfja4u;Z!9Ce;Hdg%id%&=4PaOl^&88+xYt~5e$C2QT^Te4a zFCUTgki_OcDbFzkIjut`8y2p4wr>*>qCN9D1nvT_u|*(oSMvM~wh610pPj*8hRX;x zH5L59cDwQ!j*^2zGdRh*kN|zzvK&I=jTcWP9FeSk!|gs_%^YLtxNm-U(A0``ddZ#^ zW|w^JiEE#S5ySirNpxl``mE-`Wrv=)KAap8KesQ63zc7Bwh_e5Wy?MSvzAVQ2#f9p zh*4OPfZ_e(@p!7WRrJ|769IY*m}5z9^bA(U#we|%N#pkDYU9Z{cU2@HCYU#+h0=2V z;>yw&jk}M{AufGHfl18yWCTJFkLO%D{l&_gONfp$9+is)w<|r$bm}A}WrExF)S%zW z`pmB}-I#y|O~*%K20=&mfko%oX>#7)0{QPI_O0<+$`)k3&HIPoJWqMv{n6n!kKWeA zJUJG_;x)T5_!oA9v=}&ma4BO;=HOS0C4>zbg0CRCsTV&^EC3VIxq7tojv963wG~rA zCQQ;Q>;3ja7!{5$zo4cnn=-HNM2CtM=R}wKCXyK#P2cV|1{Y^^MgABbH&hMHM~nCu zeuIKJ;Af$Id(oNDn0~|>epvc=bWj)~gi~^c5^NA9LEP2i;iT)A{+D?=@!XuGfNWB6 zW+AVFG!05tko_6q_h)!DBz~gBcR2e7U?@1o(;F0K?Zl%Hl1&8Q`rs6))P{ce@^`JV zbQz;dE!<$pk(`)J9^6dsL)c@MkzZHA2V}-&lhmn@eo()wwNzaE91k=+K<$!xT`4Cc zRjS!H{U>ze0#HL_x(7PSnk1~eKDV;?*vSdxmeK<8t|w3L((b_F5W5r1nx9G9!WUBx zLL9HY{nf#;L1#HZo;{!KL$f$TW{#rTronpEh1kgN43;5Ptzccl%CywZ;85P)4Pa4A zdsy(qRBWo)Xq`C>r{R2qA3|WYw?2Yq#R|ydM#mUQaiDuhZr;OxDU)KL`5KbFpfxdx zwquaHw2Pa$Ym|mGL#70=g9#Kq#&*;hB1fcC!Y7n(VDK0jF0s(c*4lIASZPN|O5zX6 z+4s3xJk@&G|efb<`^&i=o4<#f2nBhrY99o$kf$$*gYs zQYKHkAn#R>%d~5Ad7x6#-nfigHdQk`hZV!EgTw}+A#>a9ec)>(9=5YEe493BG#NBd<7R5E4>!)r$MiYn`;g;|{1x<0R-pct%v^{9b?Vd-ftF&y zzeog{I}zCn;FiuGLT1*NVgbevPH2HwE?pyPg8>@PuEJ;8a9d>N1b-9v`tma2CZv%_ zFQ6_?dvoaw_R2TY{!PhqJCy^>2$IDwsRLGk{*Dfb$B_0{LjHyhnVh^%^oN8jG`!>9 z|98Djj5u?6%EAi#S^eEhUQQB^A$u=Ww{Y+O2!sQ#Yx~+ItU0kijoF#@f^ouS$bTMT zkKfFuvI&O#DG4crCx^+=%Nys#@Oq?yB90siA%8D~v@#Zuk=g3}j+F8k$(wO#5fJ|t zhlS_rTYugx@2#V4?vh?)(y_12OzZkYYhYP(^pFsQ4@l-0qQ*G+LWbK28NFpq^q!L+ZEDGp72}z3*N5UE1&xeZf zcUHm+>dAXTLAfO`3S$lMOmpa%9xY>Z4k9gj${i(aM

9xy4>Osd)91RTy|SbzjvFJ6&?J&T>b@h?!>pI{tyGC`o4s7GFR`* zGr3w!$4!VtpTuY=B^&j~N?c?{42gyHUQRqreR{MZKA30t^S8XXke%?o=1fW|9HP4G zgu%t0!=4@_Xnn32Tqzn#)3cY`9iFCkZoAS!OfOSCHOtxUnlI}1_`VjWxJ?x!CO^rJ z>L^m1=f3hh7rh+7hshrewnh2!kGJH0%#!{z^1| zk!RAZQ*azKu|@5f3h-+sjNwF&F26e_y!5mUk)Dh|cOF%TWvO=>u~A=bRskasi?K7E znnx5zWvz+%^m`te$}5_l3_#y@(qg%C{LjXQ?w3=8aP#;p*9%8+s)(M#RTmts?f2uJ2Ur`H}d4KBST1 zlZ`wzM*G9}Yj-=C_Yl&tKKRaB3HzPvgTkXlh-2~;RCFersN18*i2NoBmlpfwaawzp zlSX!F+!i17S9s~NS4%`;=Igu{&G5P!?SaZRHtl+m$WIc`{jU7k7iu$Hf{M6D_V z>U)F*7&fjRKYOGnvuMm$*|1H!t>~{2dLj9%=MhdhDS||U^XiJ*&cDlK=_z_j9euEN z<|2_w&b$^Ve_M`4DYi)_#kz57ZZnj}8`s};Isu7D)b&`=y&cRBd!O)wZpH)ivRoUI z4q{*kHa!i`w(h-5gi4L|JLx4)-cSnaYxzczKd&cl-{Eb`P4%R}AyMh6c1jRhpP8Fs zTWB(Z>6mcuZ<)$S?i6pn!Uy*EJo4B}oh?BtR~L^v0{^Tio_vpbZTFKq_Z#v`g7ib8 z|KVHjhTI*W9b5KTNRdqR=a-+@=$AoqJu5rtiObKEF>m_NF$yjfbn%$ldahJ?Ig2&I zq(qNp^b)er1k23KA!RcS9jP+?glFZY3rXt5DtYi3_aYkGe)nXIjj41E3X}0FulU5W zA&b{?$73Pf(1E&_HW)-&=Xz={)N>Ep{H_?ZIp}37tO_30H)H|yvz^R?^v9-m@>&JL z6=9$Zl-gTl@U*WO&3K^8tYsqDZ3zlE_8MEksh|f{i!CzU8@TQmKDC^X^8^ zP~?li;MeDCA@EGGCJ6Oe9DMZRY&I{uoEIY23RZm+OK!8PrNp=7Ex+0DqT6{21q<7x z`ho0ibXAre4!Jj{TfnRLt7Ug1dly-FfHJ0VUKBF4wBN|2pUFQhGDnLuBX$&zT8ge% zPPd$-F%JILQEaX%QD#Ng2;rhdzLjRavG>X4T=kfE)Dvk-|sb+(OAOdY80?!e7a(c=dlQv`ap5fCr4jql6zL+ zdCvaLhiw$FRyO4Z`l>x~warf${}m$;Oyt8A9#FQ;7QtuJz{(UC&D%POni8*l)a(2$20qN^D=npd++2cjF7m*J>8kJrtDqM`Flag!-mW4SZbj3;J?@x+}ItPeaYR{Hv zz!Vt3HZf#-F&AO?Deq@y(MZj+i(9Z~;o)159(rLW|EK@S!|nxIj0?pCTjk zu^0=n_u`E*NDnpK=n);l6lx1cZXAKc{T=6V)j5b`!jkpkSQxgrjt8o!Uf!2Q!U-8Q ztC-4U$}(>!E3HPy5KGpOQPxbiQXMazL8ACIz4`-q8bO{+~h+xK$IvxF+D$Yuihfv zuKngT(|$0zGTFq_yQ7aBeZy=ZLt>5`Js6Qn2hYj(R#s4iDnywC+FTS-Lh=A5SdbvP#@n%e2PBus2irXE%o^p zPeci%O-25lK;was2~8Lzi8T3sE{r3;Uhq^~VLe0tn>s5)ahO+z5$ibP13h%2S*!X+ zP8p$So`c1k7r^0D;a%2I1th2dl$R)hT&vxRJD6bitUPsw{rk4V(Ae#>Ao#1PR|0QP z0A>o&^nKXiAR(lGQUzmsWCT}v}>oN5Z>+*>YfAtBHf zeq#a{>whNIN2uRX6p1iuT=K;GAJOCxAzHW2NJn$V-8L$?>bprNp2sNTT}Lk>ijRf| zCY4eCH10V^_?2;~w4mqVe&O5Il|08p2Fp0Zw5Td94Yx}jc3=c4xFg!G!ms`MWA~z_ z9T1(!H9#~thCEQ#t!g*1X|oVLY<8ua$K6wRbcaR2owSg*s;QAw!|xxO+0+!2Elk4e5OxM^5-i`S&`LW+juHs z+Q{4W$&n*Q;V{#(&qb)5iLlFT5t}uYuCKan0cNsi2gVNaSpV8Rh!~4Xlxm(t7+Zk` zos-3rufW$ol9%AjspT-4V4y9SQ9;v)U1OxTMfhMC>N zMj)mA@wdKPx1p#UP;8@HvPDG}ZwXn3WV(KBxZ4;4vjy`SQ$A=huc)JZ8pIZL%I(=_ z;~Y69s?S7)srs#Eaxv05zG`p66J)vVv7HeXWp%=2pB@4q@Yd8+akx^i&EpebNQ1S< zgUCscw9G1^qg~IWKb8XlP7f+-1F&GxXOsLx4=f#K*xifxndE!iJd-GiX&9X*3HCxB z)rkLKZd3SGFhtC#tU=!$5}7*sPusSr5v~4+Zml|WeA8w(Qe=6NL&nWo$N{B zG@+j32>Z`qx9xgNWE_%`uJ zl9M?rCj&=c)~*u;DI-!{W|p3hM!o}&l_Yu>Bi`Y$RrfR+nM>~O{&<%I$G7m+#-;q7 z`5>-3s2^yRO0n9XbuUT&Dx&*hgl{E$&4_ZkTfdyuok|PaHqg_j+>tEm2|e{(p*jRN zHQ(o@lsz@l@M=HA(f=$lUDzZTwlX7Hr4~X&1F`$&Xbq_``Labonlhf&>zP5wavou) z0eJh0gK`+IZggTV+~-i4h;LpNRx?4sWf8;mZq`bZ2Jrq*BqZ?zpoB847 z1{lr@2m%WJah6J2^q#infz8i{LEd81xKxO^%S=a?V;YS(>s{hXSjHE%py&9Yj4mW? zBo!@43@MwzHP>x`_MmlWQCxP6-Fnwn@|25h#f-7lE5Yyln=$4G@2~Tu`gaja@hh*<6#k|(E0l)R zJoo^4#wI;5b(TWvcQF}}7RaLJE)zBsZQQy1G_eF%P}~|N4bisHeF7Pg?MZ>saAdx9 zdV`!A#h63KF?{INmD~ z$~*KK?*XyZ!Vf<$s<>GDzbZm2_R_09gb-K^>}8J)1Cdtpxjtr{Ww1ktu%cd_Ef;&! zN+oRHmIUAb$LQkdTkg3jX|>{|VTp*}xv?1g*<~;oPe%~eX|TvEKaxq5lP#M3m`3~- z*8`m)a^Eo=?)#kwxd4#lUEGmdKb|2N1h3Zr@^Nr?g7s~yT&Dk9fwQ9k! zh775?)Gay&*`$d@N?f&@<4L!ImuHM>4gzkJ2U@rHiVfWI6nlIS{Iosg@RL6a3}X_a zw@mo5TIUkAB)&O89x&^}DpGcJH*U53Y}%!wQcz^vAG>Vp!49=sKnOm=W`miN zwcs}Ch*n6#1+^k5>$;~Ad6 zct`e7+ak6ilHa*dTher53C6&mEb?c&gQFJneM!Hn4w496Tl*07EG)eBZy4z@l^hB4x^E zb%wq3)je%27N(=lYR*Y6#g@jZJ+E$XZ}+1c19r{aD%?sz6%`kKdltfeove)~o2mCm z?x&*dJ>tnRcdAN?%-~SvDEeU3EXS?!j}nO%HP`tm>&bpI)k1+LqYd6mKyl0q9_FQZ@Hmw+Lwf zkemQ8U>$9TN174J%L;6q@DxBCR%WRwnzZN%nBFnWS$Qd!y2vVl@+TbYkf4f)0(3jc zwL_T58Gq@aJiq1ic6OvhVirmO6N4tLzJo;5Cl6xiR*?FoFruG_cvr8WUJOKRnWo5TW7Fx}-wY!Z&PgM42FJl>1-VMEpO>&l z@}zpRcnaluCpuiAgFCGeKD)RuJPyW!Y++FxOoNPbeBV*qve_fG}uC<3Yg8QHJ%@>)6 zq)1*GQw5|XpVs1a`iu6BMQ7}-mPAB`M!3-I)B#eHWWOgi=)P1}ym)}+F*4YoAt-x& z7xAWn?+p`qe;-)!Q=#)JXBB5U1AH!y6vNU&b*V$ex?-x#A~b8sU0%9h=~f0>;dCRt zgs6pD2dY3g^}J0J3X)^^qn}%|oxWHVTSue1#ucxgh)Ta^vd^AC=T9ees4q%|Jz2MK z5&0*blZd!?XR?7#{sU{_=An3|-qK<)!dnpI5GANT8yi>2JzpI?_zBw5o&Qifkz~T;0Ed=f%ANEl2`ID z3k6Y?iTnm&KTTD>xl>BJZoINwvq9W_0_6O*-*6G^W?dV6@ zTvjIf3iArUb4106;l;Hd{!nn$J3QC&fy~seX{_NvT5pI1fdWh+GUl z{S!aE&}aDMD1SbVgB^*r-uWw50i6pQVdT-{ooEvS#At=1*0OL>3+Y-h?&WJZvsKp; zuMn{mXpWPQR9L`Xd-F{$TQ`mkW)hezV-gVnKZB>BUUUkwDwxVMgVKF24hDR68p>vA z#1^Y(*jAHN0Z)M2Pi>5G!(fe$sGT=^+E2&y zFaxT+-dM}R0eW30?P$5qteboTPNxIyXaXq0)ONO`gikz0`WDlN!ST}TC!edetxh#( z*uRbGtUCD867Q1Eg{wD7bx3utGdsl*)0-WfBiSiNxm=AaHS?%{T-{d$OALLz zU(6?4-Qez2a8c_`-}#9<_Tx+m(x5RMhtxuZ0jHI2EK8_5bS&#WN5=>$rpRw-_`M(| zhT+_YA?PVOc+3H7AA#*1&wtJa#{9@MflS^iGdq1%(E+cNHlf=k?)2Qdj%89BrX*&;lVhYE9bZVunr$7V}t>;z2QYNkebM36%WQfuT3D=hO!JT|5@ zggTL~Z(#j3(z{hEQU}@RW2D5Dw!Jfs) z0?S_TNB#m*3k5S1m(U#R?|1JP7?BFv?(_fNgS;1{B}o@LbNtY#9EnH+8tR9yLlSEG z_UBA6EGyxgQe8#@qJK(SK^sB_qRU}TQ)Js*nD>zPhGg-9`EIa-Jc0uTuBsc`f|RG! zSjlI>mk`;n7*iwX3f+QNr!$B{YH^c_gMQ2Abot=T8Cx}ZQGlRz%45@W8SHoOhY;nC z^DbgI_kG1rr=d9qnX5PVCEz<&J&k8sB$ET$mwuJ@qatPlzU2YpN_I{IC?Qks9H(;^ zel%;h9DDM>DY{}y?8YsW-w+5|RC7%AE8+2=AauSr6rThTUGaiF=<8BpMVp4NjH=i~ zwi=G($|T+DhY>V0lu4u8?j5Rg+XrLUO)&rIp5Ze2e65HohgwvjFC(OT9Dxme;LJ9& z2#HXC=_yqLs4$YPl-2`*&m1E^cs9HqpT~ZP_07rcs55sU+c__$e1Y+NXtwNIYXQ`c zc2Fx}WG%Az@!i9QuN#K%zFSfMGqqx)nvN@;1Y)O7E~Rm{OYq$P>FPT7k+X7ga>Ov- zU1$(TAC8*4(J%o5-=KdLT&be7CN$|Mn&o>ST78AOLf_TarS8tA3?+#+sq@;4S(`$O z5;Go~E)g^NY!VI^(1Thzndf*J`V(RQg9WHkX!U9<3LUEWh@xt8dph9M4L19%i=2*a zx}{Vw8^StiQJoJzAgDrzti`aPb*c}`Y+mB;s_vM4YNQJ;cG}{SMCgU{F zwg|G9qb|16?fpm^(vE4-Z;RjBN8Z{&+7FW8X|UKdokDn$-a4EVyVrAwuq|lQ*^7b6 zR8Reb$`i4!SV{Pa-M~k$lce1kx8kWNlb6X!Wa6G3yi#T0!u@1M$B=*;nmS@tr!u*d z$RPR`jcG65vh8w$-uXbeQ^iYw0~-N?w$C}|!5TqFcZ518?4a}znLg}Gl&*LJfNk14 z=nsC>hkqmz!to+_RzsdG^RvpWw11#F$MOB$duxP+=+I#(Aj^_rj)@Z};<^^wJg-l$ zUg$~gKl}V0eAcLTb}BZnA+uKdZXV(~_o-GJw8%gBu^$&xU&9L5|3=iwpn*|N6SpRC zv0%4n^=-!kEyl(b=0psSy`tSjSiDs{TEP3;yz7qy`bv|Hz(1u|Yry&v&P;jmU%@ zLnl~#wNz7D`4MM4pBqrBST^W9^GT66dB7lCpiyx;9JDH`r}>uL$kY^wmblSCfjC8N z#}w*$KF{?E7971jilF`P0ejtpy!R_ycb0oba z);0aA2xxo#D5WzNSNrGAU66;&dwgMN-Z}ZwjjVbv2G@Axu#qDKkt``Fy1oD@09|*l z^NWa)ax%5Hm1Kf|ds$`}gtJ8x3`*mqX^%4(pdw9uuj8A?X{Sm@_Z68SVk2Mhsh&d4 zH2IUG)-X_1R6Z_R8rU+2=7{IRGx6Winn<)Rkg={VaHZbU6mE^5=fdeb#7X)XaDO%( z82-IXCk0!$)#j4iREaXSJR3l&BwHG>lf4&QO!|nHxVe{Qnvl@lq(b@ z5S8f_gxU10^HDlad64+;MNBABxQ(pxKr+>6vOp2t!6B{7{a+c#r&4rt+$5%!4!pU~ zJCRGVUyim6-C@thFL(DHGWUqtm2uOLfAGnc%cN{aB*{Oqu>g^ll5}~W`(8me3$5HJ zzd1gUeolZUy>|w4IbMBSe`uapJ)Ymde_ps?la_pXb05J^DysEbwWg>GwZI%1KaX_J zswIv&;{Yjs{1Qi-M*LK^YKqV*;W>|WK&Kd#A^0>FI8s>oY5f+VyOR$%0|oY~tosv_ zrI1=;4n=1VwR>>&o!*+bj=gWo9eB>aLq+)uJ{_c`NEe_J9k@xk0=kj@yr3moM=pfO zDtsA@{a?`vqleJD%}T{^IkC|0J?M2BUUT#rQG3HmdZmB@@gHrX5M(P^rw zH}zJSkg>SkD#82sJx3qfQ-k2W0g5Sw1iYOwV+5Rlq2V{AR-?CN?ya@+)DS*#l+A{r z#ogO9EB|#w*{>+5XqH<)^GAoWP$TnXIqPju>T=v~^xq4nARV2Cc+XsQ=!-lTa{k|a z#*KV6ckWz&hVx|8IvvG*bdra}FN0`2`?Z0tdY47Sin zl_0yf!K6)E)b_S5*!)>kNSU#bdu-l!UgO*~ewyvM%a(PDPHaOu5&s~I==P}Cq9^m; zjLjiYJ4OcV5OH++LdN_Tb2bY~$911+aD*hu@2OedYiP+=>x~|2A-4eBJ+$Gxz(M;p zM|_&c=#Wb$KO;m-{f?m+n38dQ&qeZg;+IM^{266{ERjb6C?q=j*`B&KB>*O)>&m@A zOw~PV`t{W&6K?j#G*x0~sa%N$Ag7SUhn3tldUPfpN=p*kV{EnPwrFuG{lT$7!eIzk zBSzICkE1h_n5mH4YvyKhTEBhFBppnO0NtK%Yfj$6azaGI3sMnUVrdu2brKU|t7sz$ zS$Nw=%LudO*=fmaE1misj;q2K*|MLe5|Zv_Wl=#~ihabAcT?Cltp4fLQP|1ni63?qJ7yRNA<6LkrzC?@ zgtt^Bf{oCoEvsGRFHX*?rjcrJ`SkT8K9cn#m5s}4by)S3RQgeQWY*7M@Sf@IXf#ky z?c8@7OgZvchv)YsNQ7V~)<1qrnc1;%pt5BU$$S-cIlDvF%Jgno|6q29xm%rzC{vk) zo&kiqXY3p3r7WKJDBNdGAL$F>yvTW|3k$>yX|k=pha|b&PQ7HlQ+{W=?ujq3Jj~mv zr>DBM#kX9Wvc<n6F`U#50E9Y&w>IW#!xG=7ag3yRY4d zuzdQQ?l{fNpG)~Yy9|~g4w(_p-7{ah>K=3-f5mNVD*J+6);9yq%98<7=Jey$yJ2~h z^mv5mfUB~gsv&WsxNeetvYb%DSM+u|D`gfsiqnmD0TG~=Ek^U zijqYx-@`w70^6NvS3Re?aHxAp)!E|xu=l#gTl&16`uM5RNz-CO$9{KXquycCVspOx z$ja`)OQmEz!wr*Kgvlc%t|W*8d=sEd)+m7X!5Qi^ZAZfYn3MGqY^mS;%rpsT{m9F>kHPA7jy54v zBzDGGMwy92w8{LV^TPKo4ELpp9B5siv_g|3bI{-#EB$dINK4P3$fv<6b zBoCyEneU0UfymYf&?wnMZPTlg5vyoXd?=LvP~7*QE(w*`)DNV21j{IGDI_Qv+TuF7SOB^MLFx#hg=AO zN|p^2C9^1wE*>e;&|8iOL|yfdy>kcG99u_CsG_bdfW&1VTAIjCt|)zR-DB33?3R^84`@S||QaB<(e_Mii4>VRm)JXz1ZG$JAOYk-RvL-j5tD_h=J z48BUW2rtRWZiK@=;W&%6fNYjf96YnCXOn(3ne82^^%FN_5g0R=yTx&$!^ZPnq$;g0 zk<~^{C)x|5APzPr(iWV+qpuKk^WI&eccHf8!8*uFq$)@R zR%MXGkrdwPh`!q(op!;p*xT-#vZL9tsGM>(sJYZQ?{a?=n*&}$u+bk_K=Bkx9}QI0 zEsE^O0@b&X8@BzbeB^JW%DNUMM|c;5HB39l&k@T8ZWCS2Gr}1=5ZXlk2@pw67PXVV zng5yeuGSDbr{fbL_-f0Mfhwn47G6?e!kz?krY=uw<|h3c99VxxV5swI9MM*|kV36I z!P72B&GKo^MRK}uF5#k1>-slz=tKO#jm=Go;Wpx>!JVEjhK%<1?9 zi-0PV|FN!y>_CMVmMwi7A@f(eSum@s&$cf7qJm|V^2Bap*u{}can4$>9)as}jV_1B zqt_)J5k1AD?<-wtP33lQMLr68{| zq|nvO_`1Z^2n}se{Q*^X>8@<+?{7t15y-U>;$C60cQ#+G?kyMuKo>--x5#_%;#uY) z=R!Ccc)ogmBLk;`heYl*9;&76`;!J=-F7Ezv@Q($R2q&`?0*mxm8Ym8zAt0_&<7z3T5-YAkCxeR z>Vn-?uPqg%WUJ5zOQsb*&Zcr2&L1Oqj{1jZc{y3a@4!JX9;Cz)f76%HdV0+)E7aVG zUQw{FIk&^=A^Bd%60+Xy=ioG|9ewGs)6;XEr=F4O8<1Ers@<%I#e<;E|Drf&Y)acG zI%n3gq1> zLLe*p!R z9TbLs_km4aFe5|QbQYq$^j&+7o@(-usMr*gg5k=Fm63RF@;ufg9j(LdY0lf{6lDZW z^{9e^hOChs3NJ_Jz{&aMhtzMlTaVL7X}OpX`ZKPOEhJXZE8S@Oif;WONR3}}X7c1q zcvd*T?mj}O#LsIL^;fd-Pg@YEsE;c8JGLN6*#_d*D5{BrUtux?dy|?(t3E)7QmA>ba#d`u9WBP)19<*f$(UTYBN%sJl zH^=0qnicBC3UzNO4#>C~2lzh);*#!>_*t-->ES7SsLRg*EJtig96SyCk?!eMuTA#N z5y%ScTgLkhoBjvy_wth_syU;QJ9WsbnbWe2hj6O+QhF19)uuAJ?y?&Cmt;(Q!`ZtQ zCO-bsyClI->{Y0q7K^J4hI$O&CP=O0l$6CcZ^~xk9)i~0^4hK<7WUROoixSL#7X`= zR3_YRilad#_pKWq(-CV1e#q<6$>`v1CGAaGg#wFg;m~8V1^oMV4+7&&Su|>M-=>uX zvUUlb_c09l+J5DZ3VO!2P?h7ZHM=9ua$g(~9!|wwM*hK7{$7Ghyia?1S{)q^lim3N@a#_b)dNc7yM!b{nSf^-T+^wM++cHhlJOqHY2r+C@;?ezQ=n7 zX>#7y+x!Im@H6{)(!FK`ibJpOkG{e`jhhq?ip&2g;{*Jnvm})aGcSFFQs(ucwvLWp zGC_JkDHfq1Ptv@Syc+{0QckCsu`_J_57jbl($OHR8Bs5de(b9+@|nhdp#MtP3Bj_g zSp3PdOvK<8FcC`3x3rVVGK(Nx^*{Nc1sfqh&#yBiAL>9JPq_F39BM}g4IHEqSmKPE)tuT}e=ElyLi1SvS5n54vhbE8f#iVpR-E3>Df5OqPx#CY0<>o@3a-?g# zv4ydhGhLnK0iVHNZWWLbX1Y8c2}ve03{buv!c-Xx*3N+oHAVO!C_m%e@j(jO3J$d? zj2$3W`!ZiO%aZ{F>n3Vz@S0%ZM}8T;TfAY!lO=bs;{B=r8nwS;P6|`djuV~8HSERv z%Y9+s(hb@OUZAr3ZD_fK26Y&2#dZWXWqUryDBC01D(1;z5{oAbuebIa7<`ZY!_Vh3 ztqZ6Ksw94}^z9-7Jn2W~ROv-7m0(mtpur-pv4|uS{>IQ)mcemi z0aCKTw6H1BPJ|lWSTT`B{Y>1}OL%y!_q`GN2D({n0v@{yl~)%3nP~p!<~d#E%6(Wx zCg^m7i|BUwDXgU2j>^hLj($o$lFx>v;62PdSVh^ySrJK{L5UCFa6*XKc4J3y&44o` zK$v&qB|L)GAN{BF#^jsN|7?x^&)a`>jJARF=`$<*OlRNpN%wXfT%r=XdisoL$#J%C z^K3lq@Cr(`p8~UD2(3HFKClBB2lu~%(Vxd~RH2aV`6WX5%1N07(N6t`*TCAS*o^Hw zHUxg8i$+qW_RYX$nj%-9b6H9Of|&B=U?K|jUnu*38~5enr3b9RFJ!Ah8^c9rUvwx~ zPL8SX+ZSw$DGec^z1pw2K+d{HHB&0UKp*mvTc=kHEz(o}sPp}=_q<^rKh8?ImUG%PP@5X#=&zz6#=rY$>X%)tx)Wu%{v z+^k5Ck^4IX-`yd>PPnk(9mq|CD$2?w-o-6C>iuv(BBmCcPX&my2WC~yG!XH?0=ejPS`)PI_{UB1Orq~OD_nIJZH4R64$=w z33OVge7LPscS?fg_wPALoffkYA|&b(FRfAk7Sit_=iq-hbcJpDzuanSrOazeREd6+ zrm4qlpRG*IRMT_HggfT53J=e^#%G94`M<)@2?L^&?tb{d?nEr|Xr0{lW{LB;hdC_d z_aBwzm`ROelU+Fwr-B?K;0p-yJwh_+U_Jo+!G-2;#zE}n(I0L z23j)rS}sKpr^UEM}aWg0JJU+y%tfMBly@~+7Hw~o=j`})^?7t3J{Rz#M^(-EKK z*m18?9sq-78fWDzIY34A@Ivy3tbY9;2?z-WSzhXe{~AjF#GiY}8EvQIcMMniAJ648 z4HFb*lzA1H>owGP{YYju+ZZfpA%ZY6G1q&n{AmA^;Qi~Xf}j}G9tZ6YunyDt{*b~6_!x}SR=KNXl&r_l`P344G-)V=f3`pH4dblO926b)8*T8f zKmIdwzx;&I*A`noBg(MOWU%c89);X(0x$$tnnU(m+>aF_>gW9!b4GCfEVuuw3zQ_5 zXK{dG%`iV$a&@lJo7MvB)EJWnCKaPqMbx0siyq5cOA{z>0j&TMYXw!u1j=_jeJ;}T{u33uMiLOu6Sr&m+{{LEhFQ`uOy+VRZe?B=3s^rLETZ>aP)kCU(2|T}oScP+k;f4COyiy#MW#le9svK6FG*cg@yt z6B(Dvxa`;ksM^2c97{1b$3f^THY6Dn{LLDl5I_|uFNuHeYK!{vNE275X1+{=@b{kY zo}DBz_Q6uEfHt7^U!91E=nzOjF~KX7fQ^TbK%c7;sr-lc@bB-}u|s8!NQi*)DBG%| zGN>ofJF(h0g|Sm+!7?VSFhA* z9!^n2&PQNuE5;9y4gLX<{O^v`0igPVQuRb*YV&I0>fu=tlKe5=uTJyys;wXV%}**x zF-{|RGYwPBHKXsv?F|!;lclyWM%^9H;ag0u+6EVKw&VSS1yKI06(&%xfT@W8#c`hq zl4PT-i>@>$kzZ$$wZuxyqN5BLc%G#iU zTDZJ&=0b|P7zL@LX$*x6YdEi+i@;~*zy75y@)#oEMCF!M*5Ietmt%*G_QdfWQHS$R zXuJ;ns~PN|FIoEBJq;sm6exq|Z6cQD%=3CG9-p&czkXChs!e47*X}|r&OsC;TchXM zUb?e#d;61Wei7P)rqL}QR4i-Lc6X~vHL$JROjmsS2eehS8jPHh<{FpBo& zb+K{?=f%qMHlY1$%3pj8wJql^dU>totRsEg{*vH|y>f-TNTXYg` z#UzaAo056z+q$P^l~v^=y^>4q9270b{i{bABg0`zHhztZO4jM1o^UCF@C4mM^R?r@ zn(d49d)0*P-8SNcL`|wtWgbrh+eJJ9i`5|)C;NS5DDRh=``m!!fVH?jde9vqPWjaC9^kJl zFa(iHF#*b|=o*&CSpWJyH4f367Ub4U-_M968IWpX6n{$^{a4R$-~_4XMr*0&%PYp^ zkhStN3^1D@Bm-5MZ-xpwex%*e_i+qRevQv5nzSSS`$9gCGgiUo)r2?b6ZieGGbd%FX0I0Fzt;{ zYOX=$#{X+4f$)2P6jh+OIuwm!n)r~`+MN1teR9xz0#hl`aNejC8v~-hdTP=CBkU`n zqT1T`6_M@^si8ZiC5P@%q)|$wq;o(d9NM8lx5%U3_>UL8-@U)Z_x;zJ zHS3_~%s%_w&-=W2_Cbn+aK*a=qM~vO;87jP;#aogx@gqn(p%NL#WQ=MYL~Hh!jnC4@AtJh$zJ!sWGqGI9-+wqUhSFy;WS#80aLzNVyiv=+Hi2zKYy8#@ z{a$&P(hU$Y{tVN%4lE45*f?~ICxL0+VSdYxd$C}qECw^OjtY}pa?*W%0W9CYQxlw3 zBCuR4ZDWe4CyO`;4L??X_SS3sYxKR>i?vYCOLswKiAt9%VXy0B+Uo`=XUthyxx7B8 zYLm`H8~dxn_5UKIrH)QDx(Tnk)-0_pbrkrO-^osVCxz>%ew+Dmva_CzFI~W3~AK*=)&9O}b3> zSKIeSp9Pk1PuCS*49+1WRN_bGvr;c~)p7kVk#VZiDQMxm6#NhZP7mxYbLY}yi5pJ% z`nj&fR&aHmT42EJrXx?L_coyha3B62AiaTuz49Y7^Bwi`JiaU@w~f$AE+O9Gbmc7) z2-nNtdndP?Lju305i=; z@!oi-S30V!tq8Coy#C7&Eo9-&8^`UkabomS7(xVR&+`;RWy|G~&zG!&(bdfK*@cKO z?_;w0Z1#1}jG8Yv)Ef0{orR^egX&a<{|iI(T`#AMI^M)1DF$&~tj3+-xx7|)^8H`n z5!-1RL1KoJ!+8}YVVupC_qv(uTVVZ&uCZiP>*W3HFbat&rLMS zpDInu^h>B^=l;?H{x!P1UG?GWHF{sk}=4*_>TTi5(hw{FeWlNIGDmTAe!y@WLO)aUg@ z1UP7YBnWws^9c%W#;b;0B2*4wyi?=W{Q`ZDX9|1nS8bpgmyB9HIvp^a`PBd0B#AC6 z@BbP_h&;(Ux8f^cEO0?9B!TnFJ_jT82f-AMnS|E18_aa;7vGP=&E#Jabcle<%8s+u zd;u@;#Y+*-TDS$K%hyAX9^Av}FX!MD)ug36zk`XeS#bkRrMyg|LR2jhlH%bPL0;;;N!*}qi6SMaDfM0JOedeG~PDA+zXa5ZpM2s1aUU8+-GO(2H*+wSN97J+G zly+JQZC6wr+$;g-OoR zMX8nRuX+1Cmw12s$bZVc$Lt5|VMzTMpD>@32=@)<(ZpHKVl9DRI{ko^*0 zzj+^FG7e|cZKje!V7F>J)S{o&rsD1Px0c_!Erwg-Y$y-mVoG7mXHbs{yza!yK1*Pr z8Xone>@wo~J%JWar0EjKT23?F#Ts9r@(uQ&sa7>y&*(VzF-WRxBAXem*ZP#oy$cj* zQ|{uz+O4@O53hS>u zk9Vaj&dr8T)>8UE3|5X8Z=J1GE^(H+`WZXn*0_FqdK6MFA{lE_Gsa_b*;|##x8)%^ zX&!8?Rh>rkM{kheSh_L`i}-?aO(11adF(9h?}XxqD%5r8m@i2EKTCrH{e8YwQgs;- z{}Bfoa-tW(AY!xlkv|1iDL?l~=_Llx+mSt8hC-rZ=7sU;?8#~QVW9Gv^zE73lj??j ztM>N>tCI5#n?;#?hG(FQucoUtgwwWP$kvuGr+uC0JU^eKq5Re33&Ws~02V_QdzN*H zBwolgfiA(JH89pkh(kOo{@cI?AC}l6<8M2`g8<)F(Zv}cE?^T`jyhNNjI0(lA9q2BTyG$jovG&u{b+Q@j z6JPiEwmc=}8=xgE%G%XGCUu|kH^-9cIwHfId1ZKU_zWYxkT2;~pWYnh-k%L^LKNpy zV~hQ2c+yc%DWak#3rj1JBCpvthBIg4dBv6DAvxGHce(@HPw)wq!}O}IS^(-<-{Ft9 z4(Xz9l!Fv=pTV2;A$Ex_$b-N3QM=?@p2e8{yjH0~Hwn7rED92VW!@iquur`s+b@!j zwXUf;Kj$MYO5Zhf!UkP-p^|d8vu%8ay;bkC$g5c0VGWmhbnCaaPXtc}1}T1%aF73c z?KLeVZg-(AGgT^gI)p)}X7(fx9k8p%)ZOkbx$bi;G2cj!+qgiJZn?q&1vYtX1CJ4d_OoaFb`DlKKWU7cxP5mhr9{y)dJ`hO^JQKrNee1chgFb6?XqY z)G)^GMKO5mmD5}-%I~*U>=h2qaC*l=;d9$R>((NtmT7(EPfPy@0lpk8@Vf6@xI8&| zHQwPwq`zQwCccpyvFG9P2>0t6+{fj)aplQ?T;O9GWEPgKol}qediQ+Gx|}cO?#|}U z$rmEwrrC9M8*`Q2W8Ax!4VYI4m1yV7pCjnU8bLAwIsMXQO5shk;cX9P-^2g?GB)Ba%f{CE#ep;Am8j;Xma&9-;zN8t8|X zULKIVMg!>Z?y{G;Q$X74-5_*lGN3+B$hreiwQ)UZ5KtabC;}HSBN!~~5Cg@beZdkS zzJD_w*dv!q;_vjNIU`okzj%Tvyd^7gE|w2PQ`0_aKZ2|dN(g z`-nZq;uwyVSZR`Oqpif+bRpCIR{DjLmNgl|CFgf0^4B>JkomEQgrt_fdo;)^u%R!u zg>8Zp%YtR+Xn}%Kz_@veBd;J zzHf-Dx@g{Qg|l~uqpAnIlVZtI>9DcCMw#m3V)>{akC{*oc!)#!5Qib*JuzcOs247} zS0!Od+V?mL)mqmc)hNab$iBp{6JQ@G_Sv{Bg!E%AuDD-Mp-k|R0~)^=eBWq)O?Y!h z03eopX?AXB;s=fW#UsEjC>C}H9`p2%4CBY%o@F6A*v$1^7Eh9_guNISxr}FjYZKGh zJ_wbo3PEVTZsf@%${bqs371cT+Iojd%kIDZ`+DZ zSJa)9(nGxyW-^D^}5IHN3(Su_DrC_(7*8c9)6OBcDUv<|#%e-fE(yQ4YTI*4NLU3*xMi}TTsy`{;DAhOB zk(C4W4-fJ@kgQ=JgQNJInXgcT@&Ps7bOX@!j@lo^fLl9y?Zz%28oBF%Ej+yH4!~b| z8$`W573}zieW)^Wb-4T{2q0s%8u&!J(xn-(!tn_bjwjN1oj)^x$(|}Eiy?YIIZoV1hpbws z0Pv?tO{;J0MyCx-_T$VphvF3&>Hf2%)CU*i>$`Q+H~_*e>ax-IN8@z*`*Yf&P;^o6 zh!IxT+rDV$h*7~)`E?v}wkDOP&oHB&#^MqWXl2T*F19N=jM9q+C0@eziWk~MD30&;-bJQr zxhe@Fr0Yf{#7%O7a`G+EIq58xwb8)}qoLL~^)yERl{u(tpYi97aEI=Q^iRH^*A z(K4S}t*~kj!bO9u8tm(8)A*RwlLUZEn}O@atjj2xrFF{;kmwjD)2O{l#85IiZh~4y z`>B&PX79~s0j%QG;~u*tmDoutL%maj2S9{sNB}95VbK z=I)>i*psu#R5eYoKS&|)Nlh)(>ocD11Jp+|Q_^7J`JKarw?3OJ>|AG=j?(S2=n{TC zs3~|U8$Y?^Jl&o4Vhk8@|0vM%L|vew(6Pc{oA!_7L~L{F=FC&(?wb}DBD6?UJOfpw@V*_80ry3PQzIAmrRNJFY^s(m!&z1(n zTX-`@*`J3kDs=X>lS(GZWjPdTE7cUgL~!m4&hRE@8mfoAr*QCasuS>Wjt)+ZS?OD{ zp9_{Nl{E@EH^ZiN%pn^OxmUc986pJNrO(XU`^9bWmD| zH%630?~~7WNNIrA%nZ4?=FIHz+x?PZx-~)M!#(+eF6t)pviw5bErnW!{?4LPKLjIj zcqeg-8eFxs5;igOUpZU1zLkzN2PYnXaxt>)MEE(W^x`=GkW!yP=^Hz~5i+FPN@jY+ zt*)kmZ0w}#nM@^H(oj4;HS5}y4A4ja&Mt_er~;}wGnFpj-50!jY`mb3lGv-9Bd@4X#&?{3Gw^^0go093C-`uy(4LU(cKuec7Sl;GlS<88~tO zJron;rgEH|uI!u6`bzj(dcC1tGeTA$_RPU0D-cWDgcod>Gs}K(jaR*o1v)x?)Cew7 zpX${Ri8eR)+T~H)#n4}B$FGWB7R=^BvL~5o)X2Jh^3D+1BjPVps7dm0YE7$Oh4`es zf?=1ay#Bl?ZP!ozBV(85r1HGy9U~tgi7mx(%sk7I#(eO~?40%x^Xsxi2v3ym$6(=o zn{HI@m$*Z5URvpxn_9S1Sd2d>i$s7Xu}=CP9jCe_swTIaGXO`dq(^G)A)h#9q$_&b z!h;)*l@1z$UIpMRI(KQM32iqNL9-Bp#1aGF@-;IYq-GTNXMYLQb9(1~XmZ(fM!Ua- zOuanpHXK0}2z}2M+-(Y~#sYH}j^;0~idpV2faLyiyydA&ZlY_qXrD%;73Hq!HupFg zoorrqrCLUvz3$6S9q(yDjr`!Dp!;%qltND}*-n7zZgr;s?~$T9xu0Riza{~o#OMl> zVq(NzvRmO1Uo=5sw$LjsCQ;%iSGHx!!|uRow*uLIoOFidOWCCe`k5Uh!ze^$Y;9wK z>KlLeXP0TvEEU>tU&FV&hWaL-pDv~_V(i{tzclIT@BE36yY4U_YNN(qBjg!Iei=zv zi9aqvL2rMQ)af7j4v8d!>cEmG06U;hi_RTR|(hy>KGF zLf1$7u01XARkYWpsw5s)jw(d12hSkdhdL{@Y_m#BLB3MFyM|ZSs^lKvjMGi^XHq-Q z#53n2+U78|cv)}+_Q@grWM8yKD+zsKm8~pK)KlMmQhCeK_sn!W)1da0bKII;4)(5k zt*xpiXfz@rImL&c%CYsm5BmxFiTdlJc#B?zC5rB|#+MB!ZBKiYMlUa!jzubOZ^+kL z501b1+3%B1*o}I(lsf(}v-L7R$YRSh1L6_;KfM4{7Xc8i!h;4k zjXO$~ffLP;2%Y+PUP=wfe=r)TlhK;742zj|y;h@pZt&ad&<)&i(VX?s4fIzq4qs{t zG12<3t6+i~jtjeIfMXl<_SXvlg$_+ad(yVxH$I3x{pEVa&>{*~va;w)*9>nQfhB^| zn^yd66%VnJu(1P~Ifqd<|*)lAZF;A+NNUEw| zEmmqf<({NG(zcuDzcX~p)DP68W!f3`A6Fk_n80z;Ws5};3mAKJEa5wHDfwC)={6yD zLGC0`Mzwc6GIXtNR8-eBG|`h2rAF}7&GeIZ!a6b*2ipt7{v-8@y}9WnZu>1fECW=@ z31gQE`*bpTbVI@@cj@Ppu?P+e3S1mXpmPOCck)60dWECp2y#B4wu(>`w{}gfde)Wv zG=-sT2gUzVC6TIZx6;OVr#=uW;1RtOc{H@OZ$BKRlGW77)QHa++PA&2Gy+?+X9T(v z))A&_qcL6>Q4cXc(%gk-@5LBEomwv>0O;TG45I>>yscjhD&w+#lZ{6sC;xaC!!c0! z*m~I)!{hOxX4Vx9=6E`=IGbGgHok+<3-;P#i3cI%?}=r){`3Yo1Y$ zF${Lo4`Y?q=c{4?ar}6941o;)VMBrF+q;#}gJ@1_^MajLv;%-i$OxV1yNnqSV^`GP zfGgwOsUi=r9{E;00qXPc29H!8=J(Cd8{}phJ?YkY7Sj50rOO;B?e(+N(Yj-o2JUbY zZj{vc?=X<4YOV;D~X5+=W^bo3?pn{61%Q*9A zGzS-2HrHC((o16*z!+AegJ8%GNNMQ=yVH2_5=o8g(mG58=}EFHgWyAKKAy?4tBFEAL1U)6ax>gIuApam*ck_hRlRCNsx zaD$R0!;(IBwpL^>MO-RftJ$$0V-PpzT6$^Edir9j(ct2%0=2zd+6O3tXv`ydmR9uE z^@Lln@U_oW;=*U&+p;$dv0gK;I@1H22$?L?^!PnZ^(I@M168>^19$ctAw$j^*8qwz zC33sYomp4X;=ktWrWCwXmm(T7?wz#8qdFHhvz(1z9Z9<(D0Iv&lQVW9pcob7b15VA)*f(R!fqGI1#CQiR-YC*g53&5U}ZXlgf({btaV+-3S=aiR_6 zM_wgN8GoAVEWV!bx%1SXBds0LYP>^E*S&Jg5c}kV{mzeHG*{XQl}KxmzFTCA@_c z8#-;i8oI@{7hB^u5ak1O*v^~tq&DM=27FI;o*OY`iGQzOw15Q$wW0QlYzAGLX#r~p zvGzaCmKk~v-=Crm#d@8OS{HpTV6q>jSfn=P=%AlH_Tz}ft1LtW!{VT+M%3dAw*_GV zkFT=v4FiQQF8dl^d_uiIW4Ugp4H?i8MeN$=E`&#G`0Ms%Q$ygR25qCTL!A00OiK>o ztP126h?r>lN@$#kQy4zd{e@VX_eeO_Is}!TSJZxZAw1}aT0rccA{B?{MeG1Un9ZMA z5L#D84+h@2et}|YM7pocek5`l^a2PKZO44|$II)G4xHxIgSX&jv+nf*xKPB3D4`gS z^MUn_L!gH#HPdo1LkT#2!d~VWnAKidMfx#N_#$iy1W9;o$6O??cX2Az`4#zO5$4ud zH6=_Pwp<%r%P$SlHFmHmYlt*Arxi9m>o)vodao4_LAthMvY?J%z>kLWTrBDoX0UH4amp{z|UBoLG5w9SS?kCBCp-cLJ|0 zTp-VQan=VXrkcS`HOG&Ok7^YpgYXrjF=vOeTNqBA}hf0 zi}6RueeAWETIrXESHbf}1gpd!9JgvhILUb%22Kw4-T-mAlm?r>57~9&jJ`M zL(LyjS#I^)q?5tdD`4VGI6aH4cLTlSzwIao^n;eXLU)iC-fk~Tz0hq}09}|xK+o0z zN{_E%d+O&WEpHjh6s7U=ZqE;8xID-BbNn4G=hOmD<|H?C2A9T@-zdO>w9|f`oR2Na zca+U4K`CpFy41u(AJDoCQyR6_Er6oEcmm5ej`&&W3UkfW>@`$@*rHY0i4RB6UoypGIy=D!dFZD zb8E~}N}#&GU3)sg_*Y@!SH?pM_dP=fwXq@<9Zmapyf-M(g8{BTPlvtpIj=^i@)Q*f z^Vh6fJAVf-f2|C*HZQ%ULR)#=j`lCE(hZDE z-iUmj3mW~p2b-_ru@9XwFCP`= zUTjjpb8tF(%HRt+JN=e~DD1WFv^4*ss9{N1+xgCMrS!o;V#qM$F_asmsIkD7y4Du6 z8mv~!cX=nN_tg3eniwQ!%*#@G? zt9=mK@M@mw`K-%{-oy&amL3e~0#Ik*1QKn0k>VS93B;Z9XBiu8dRj#(*zJ3gcCgiQ zYmT-)0ytFJvJ0Ejp>vpuu?Q>nDK0BFG=wTomWQ4n*QU?Kl)0S(G+9=KN~r%5@&jZ| zgoj`*CJAXq+Ved56&7C}y4yB>DmqQJsoV_{>2B4iypYv??YlM66nGeinQ_pskP@u; z`KOnwi#~6I?)*5M-9m|VSzuV{ZYaa2!&}yag_qS_y=o3JO!(<8LDsp-j;G9k@X!Oa zBn1mBW23NOaJpm_3v1ivL^zNQGz8*3O{6?n%mJtf#x#skQ`4dkO0RBj6BC=ykjHcC z>^K!PjFjqo)H-C5nYJlED^Et~p#IBNQThZ?V*$H}W;x?Bi8(WFY>+tJu~#h35^w}p zvsj7c(Z3T1ap70v^HcpLcb~Vk?}vJ1jY)3ep}D)j_G|SzIJv>7;@)qDpw_^p!s_1@tIElJ+uULq7Q+3BC-)3+@ zlioUAEguH%`M7NL^EAcNFNDF02@6uHAWo5ULCq2gr|dZ!2KyE>gYzx>iZ5Olss_p1 z98}or!=<0~>aTb=RCs@*;>{+!rkqtHG)~w`NTPj-xXQ~wtJ*r~%C%I?2IEkAw_V*Ni>pQLS}8o zR{~*Owo906rmxWwv>s$=wK5Xy$tezRz>Q@dq4=H?F{*3UB{g>Pu?>TFl9X@f?$lge z=!mTx#Jum|BE9F-R8mUhLPYQa>2*)OLh!F-X_ckBLqM)Z7(#YVh=-DNf66+~m7soX zRP*VKUQ8}?q{I>rs`Fi4j?yQFDivTF0wtJ!xu?js&Eg1USdDa=4guR2DjV*&3%MEA5ro*QbSH(&on$bPq+rYcv^mKLuy>meN!x{k$PkM|+M15mZp# zAREqRp|v*VU2F+dP3y`M*Q;IF(^CPezS`Lh#g6Cd#x-|8Jwo&3(;dAmPaITXb16|FUfP6+W0&?8enA{goBfuTg`wQ z;>C5-$k3(Pg)uMuyR7mao++Z`xIb9g`%ann4i@q__u>jPK~P z*`tq$Tsi+N{{!SDB+n~fs9QK#G3BT9@((hg@?;waier69*&D;cZ?>7``Rf(H%B1I9oU(@B`;Ia)qPaGK+ z^p?vL_Nt`&76L0Qp^Cnl4g1RiO164ffUJ?NqrKdTw?qw1C3i$jAF?67$R?4#>|%2{F#u_DKMF9I`(g!`{zNWatlkK zwFSM~^Efy=TDSyXY(b)7r+Jcyb#0RK)j`-kR3z645H7*!&Ni)VBMPCpPC_e&u92gvpNn@9 z!v8^=l?rjRy@~sGzw$6Rig>8{xLQD~muqNJ7f>z0#{17V^i5OSU>NYoF zk|>3?)Y5&09@ydxsT+%WcZk z#9`K<>q@DHRYK?^bQaPWe)$Kjt=&o*j5G-Zi=9F1#342JL`L-CkDp`4+C2r7tU8x$M2}^B_9kVysLMy zk+_kwc|xM>+yu8I?_-_;Gvt=F@q!u?*L{TLQfm+`inL~wqHHSXD4BFu#l-b@|KI&y z{{$MWuM0;E2C);8Se*&!w-pk3if(WrZa#TOXT{v=?fVZ)@2Ao!8W`#V6uo+zqsknG zj-+Gf%#O3va}RXx6~SBjRAEz3%=mc~X7%*rGB3{v?Z62+ArngcdPaaCJp509`R~bSGC$M@F{*&~pOZ}4(rF6TClQ+B zzTNf|mua?%8}=)L<#Y>m0}k)9WdGtuSVP$d7z-N*bLVquIP@)P<XS)W#d_r$vghfHFtmJ>cBAs7Iw4y`^6*{sh4c1m%OXDsd^SC1x{BSwINncypJ0w zQQ^cdA{JJ3p(=EJ^L#dJZr2t^pWBRo65Wf5QDqp>ebw2LSCE$s+zTshi=iy+B-D=@ zR}4uBA&E%l8f|jo_r6#9>PQ9N(JoGMc?#}uk0q_X24PCYt0$8b)BYRYzvto(b4NSJ zG~xF-CZ!qc2P>QkL{-X-SP{ z>5ATka_Uix%X$0vqavR^bvSm*Kdvswiyec@O)v`CL zF$n)@;Ql^VMR}-?Gj+7s=IVcC4A>=H#5AtC(#PGixJNGOT%7vKynIx`3QupA5W z71Asb4RV8cDqSz@Zm5>Og>fzrHWb(Dn7apU;Gfm7b!@bX>i0RV8=&QDX69zWN z!nBwm>U3Rv2&fpI?$iy&5{n_q8gB_&H#c;;m-zY-VLcGm&MJ1V z?gc9byaa9O^^G%K#5WFuSP9zC1(TC7=F0B+)AseZy#G3|hP+oc49b5~=uZG_q(OP= z#;m&2N_zKB36{h@EUsC>qzeMC8>k3ut z#lvE1l@%F45@U`aE@hL6!247?wGao)bbVt z#k%{)K%!Jf=v7u?(v)SipJ%|QZH6k!S6KJxr=|3INQ1M3R%41xQh$foqf*j%OU z%?Z)8U4HFp48zhcc(GFVA#NThCexK#uJ0p<{In?ory)m*Sn?HT8*zDrM)H6$_?L}w z7v2Kicj>^3Uzkh3a!(r9hx*Z_!{JI1o0o0f3+w@cUyU+so570OW$Zk9KE6<5p=j81 zx@>rxiC=%xZua$>+OG%HM(YQ#G|c0P}g+ZlAtYlep@5{=IHa;lOK0ww?FXt zz22$qNHF>JWXS|_Jsyl>RIJM|-617Ofp9&o8m`g1m%Xtb3V}L#ua&;zFXLEcGCpSe zIwq!QC{NRkaj)uG$BRV`7S|dKYaqY{E30)Wm>y7@_Gsn~@V}6v3*xeN)A}z?M<9G$ zQxq6Xb}uqzDLr5kLZ;yGuX8Cu=Piat_v0?lt=EW&qTWp* z6rv)I=P1ktl=^j!jLuMk+M?Q8?QEsbbgpJ+wp%|+-=^p}4oVF*dYlr(OHM1%DJL?7 z3mN6xC<|MTpj))5ucb}PGjvfU;jKIVf=E5l6bZ@4LGsXk0gkTtzsgF z4w;9C2TE~!CUd^bO#ZS(bs{fyH%?SboNVfE5tFni2Ixj7 ze#rK7pwmwKZdQ633Q&b0eC*Ip-6mV@YO;q(?Z*NYU zO@EZU;xg}hvOZCsqvyKdUv}6hq!DKkP5<@tKdHEa=OM5Q_`I@RI4W$hIqwTw-g)Jr zQygUuV?lSWr8Ratg-S83Dy<;8&eS|tWB1eKV5#$YY0z@4p~1!Rrq+?30=DU_*QGUW zS5LxI=9*jU>KVF62xzM5&`1>##yRiX#*xv{PR5)>z{e-{vV(9P=~BT2-Ppo3A)C7dlsvYnbSO#IkeZ^}%9yS#J}^7cuAP`^RF)4&o9NId za4XQX1asbMY(l#G^`?iI(NO}Vt;eKx*Dn#!r;q8RpJNEBwcZzFpaHMEVcr{ zCi4(Wm{~aEF)9JPC+~y_ZtX_?7n4BR7zWbv8Xt&=Q|n_wC=^2N%LXo+bp07>I*=+3 zS)8)#AfuNZ?ylP|?I1tM5xve^93Ch$;QN!)|I4#{qyNj5eu zPT)5-^oYhY)j6%znwf!#$KCC0;p3OrvtU8~{qMNct3h~x%uke|3`JBQ9*~ow60)Jy zIc|q{g)YFy9$Yy#620@w~V&oTqo0@mJJ7S&2i zA!S+@H=ZQu*>}>4kHBFJ%kq6a%g#Y>m%13*TlnUyOPPSQuJAH;;?s@a?LZ3>gx|~$ z&o7HQj32PA$-O6=0IV@W+s zaSVuhl@_-8WfN?ALSf3Npw=Ep@Vhnd&e)hpiRG{p$IFUOsxz2&s+g7; zq6Tutq$oly+Y>mX;tP_ELPLgQfbpVN3z%IdPrCycK4Mc#Loaumi~VAWxy|6e`I3dW z4km+6v}^arp`rqYc#RP@w ze29bVPgN%cmZx~%2=JgKC$WCQcc1{)B)ZJH<*~Jui@hcLF0R4x-K*iCi}^7`*zAjm z8iJaQ>?*gES`XRRA;HZ8YS6`zTwD8A2$bgx4u5!_>~Skvzw3Hd>+-sQpB#+TNT5~Zy!7%p~@CMoA(u`!N5?KMg2gC&O}zr1GG+UX2h8<@!V@g zWcH3=0TKhpT6Ezhf^66uk0M$Ut9~Ge;tUfhhLZsx0Vef#wdYt{K<^T+pj*7z0l03Y!^eJ^sB8vf3i=p^8S{xkFpG7kxqR=@2Z$`Qer@9 z>YZT}e~0(kjhH3@FpbP*TJ2=gvN$L|KgQX5>mRu$;;AFP6A?2KT)`}Ggt$u( zm-e$(65>@D86%&k;ni>DB)iLtzyvXGpQ-c2X+-U@hVRfU>hhO;LrqCP8c z^57qhDp6!FuE3?iea!9`z18azxwH~zw3vDKW5%KXnQybCs!wdsM+z^Zh5(gPyEA{a zVg=uR)O4K+7xWdxZ!ezIlwp~2AZqe_jZ1jshpD+C_m=;xO$yX-zVex=tF1sen#Vw) z(R(fJW7m343OVymg{c}s2-TAK5AF;_N*sU=!pF0MsoU$hTmJ?t*iVszj@0n?aYw7B z?Gl*Nly7_5vmz>~2ZJ29mvgsEFy{hIANA+VBTQiq z$90%#py!VQL?fn{eRDuSEO#2$A7793JiDZHm*dOaX{kp@`T7$VloXJzU@WQ0{e^+G zyoc)p*PN^+2dPNo-0NW0D0=iBbC`CW&s!fk$zfmg+ImsTVh6vqR*DJ~0-874{%q&= zmpo#`WAx3%b0v@WlK)avmv2?Kp53~~eBrrQm3@ z*yD?uoR<{g6oa@bYo?ftdJ9>*YA6}9E^vkfv8-RY2c)K>DQaw=bTJn*EIiuXuHS9S z6KVap_VATVHH`mMq}IgvTg7Jx5>*9IEi~(_OIi`~h0C{%A3+{|{BALvowwg~wunk- zk|qMKIy+3ced4CCi(~r2z|Hh|Ekh`w>f5--Y+^vv?>NJb)t?w1rC~q-zf1%N(+L?+ za)yI$XmQqUm26r3Lu25GU@YF}3d?StD4!oeyOsQ<_=l3n?nqc|750H#?rd1{RH~=D zbE3BH%Q&V-p}doCsH5}20ww=Rf{7Jk4~)i^>}0+nZfnPSEiuStb`cRkbewQY4%@SA z$^yS^wu%krrLY8jL3q56ILja_AdhRe4|75S}nCF-~nMLa9XryRerDX_uF7-UEKv?~4*Jv4@>7M7pvPn_z zrA(#1Y^G0aH%v`);BzWi<)g$$dgbVoXc%lM#`i#Bx%G09ba@q>Dx%k#fmN|OdArF$+f%+0h{P(ABj>WSK0{89}8 z4i6rZ2_^x$rk3Ghw6U#w!q%H3yg(y5y~d2OOYB{XYj*2Xcp@aH9~x%9t_}m@hyvcC z8)0fN1AmS6Dk2+Apa)DvzTklamoc%|cy-!*tDhAT|4X8HxB%ZFo=hzaQeMRX3^FDx ztDXQnrZ`}A3^dM+Y)j!k5wbQ8g8&FQvXuHY3J|(hs}a?Cz-Z564p&IqMM*}jls8`? z-AwWTqoQU^G3~u}zU6b;kVoQ3rezr<@&|zHufm>-l!%AZWX?atX9$-adZP$n|BYfA z?)2>yezai^_+i|kgxJ><*>3Sb+nGW(V1m0v8TwozlKC~&^B{=1hye_+ zv)(IqyV~!FR^$4P8npn^mLy|#73Qvax70=4hL942%r`CH5Ci)8YwD|B!}cpeMAQd= zh&6DxX#FPS*U)^m%npZZUO=IS>W=}12~y83YLcB<4Z(x_1G2hz4-yLyy>%6t(cp)1 zop_wDPbFDsL`8A|j8YIG&%i%?*rOQ3#L&Jq0gpn7OCzEgd_CA-mWUA(NXBuJ?zoKW zyCAERPW*~6Q?rnP^;eZgEUwKJ@aivam4t*ZBgKNTVGknf*^tC9np||gd>*$2B?e*s z6)4d=z*RB$u02FT;qUpDS*2&a1chuw9=&}7u9$fD4gD}X$anhsbdDWH%GH7+>#!2M zD+uPP<}W!6;Q78S>XCked`0gt*(*-=b1O^Z_?kd{?9M<}9 zB!oyT6YWG!Pb#hg=3L;yV!DcfXOzyu*GI#7u-C?^AxJzN^E;wDTYEpX>wW7XupFfU z$ap{hh{tu$sCK(*3eJ%4H8p^_rfn)L&-ru`&}^NW4_soil@>(eTTsjkw_qx}_1CfI}1GSZISYS(4z5sGOdFa)rtv$KNK>A^lZX0-i z?IOA*&h5%Bk)3dzs276#NZp0{LW(2Q6ZC1i{mJ&?YOOk$mNv%i!QB;^x7zE6ib>4t!*ow4)P4v7jb zKP))hPaW&qvvea*2`Gljy0kwgJRsqsLlKmwG_rpJo6w>d7^)jnkM>wjjIqxsM#+og z??K-5-M>8Fj+l-bmfaXJ#Q|Y%_fh)>p#;+kOD*waG`5}iC5eZO7T%J}<)c5-ii7i6g3_Z% zWONLFXz_&+4OEyI-ZsnfY3BHt`XkNNEvHq(ex4>>3d9Kcu!w~SQ>W8wX^zv`DOUJ7 zFFbpm1b_WCJfvt>>hK0_^SDDTjpT^8*42R{EG(4&=jQ+vd?!1~>eVN6E9AATKGgT; z_vF>Er@z|8nXz#pOQ)>qkN-u|0BQE<#|{sRqA^tso!^*YCQ8wzS|-jM6#>~blR4f* zf6qMJs1!Mz4@JvW=5(b69(JlFb4L0(+( zA)16+?b@Uf>joo=5E+PkR<{LYW1E?ezHs9v&F}eK6Cp{srbSNX2o4*{e+|@keeO%!kL%#;YnA zPeDwvPRU#p%e1^0$X0H`cG9~C)BV}B%$}PJM6`ml8uhFIhHi3piU{Yhs#rf$oVPG0e*ZCbaa#MIO4;NjP z;LVaniP-u{X%x*)+_=x5)f|iBZ~4Up)q|d1jty(=_%c*M%WC#Lm!UMC^hqFRZ3${K zweNFePp~?3(_C>VlAxIOQo?@eJe<4Ha-CPh!99O)ai-wLfFS-=$w}IM(Dk&Wm}&{v z2iK5k)UgL#Cg|v!#JkWjE&0(0gYNxP9Yl^L0q9qXy? zO2UL6z!r(1+WH>Iaqy-BI?Z#yGghi?njD3ofx?i-o((-haMMjPeBok+`_fOnFC54u zd@xF((t5GSPOux}#0C$#940kB`CB;>FMy@*o(XJwv%~t-YHl)nw7erI_f(x^EQH1} zuVOeb>G0LSJWi?f$S_dkVw7JPK4(_t3VA;dOTq)nD^Q|*bBK09+E=1e)kL$z48Yl@j4~Dwr!w-EzUeKS;a->VOFr=;mZ$5xKvU;9oe z3r4nmQC71LK+Lv(6AiU;9?@}c2}nGpGrMh$Du#&9^nnxyZgTPU005^O<&#n;O8Sq( z|J1)#8+FGIlA$pk_fAC~vgqqMd$PLAlz^W2Xibf`8bzmj#b^uC8*6bZ0OxzmJCJQOlu0eWWT}VFaq;=<1?rO$wS6-S z+iNg|+kd`gZcaWd93w8i#yR`w9S|G}ldWABkXW?aaU6%~{>@R=cK|55rivMFY#iM~ zMxp-mGFln~T-Yw?zC%h|D+-R9RdONK3xA~gt+(vyoxEz==JTzFyGG6IAp&*E=%~QB zp<*Y+$6NkFdbuTs~U7D|667OU zbA!!Vu$W7WNF`bsj_QYw+qn!zR!Q*VJ0uAJ@+cZrQi+(X<)$_roIh(?i3HqHX3UBP_KjA$IFD?Cy?pr4S_GX#&g z9q%j=N?0hQIrkWlIQ?XXrhq}PTO|*qq%^eoe(qhu-JH3_9}j*{TijTp^Y98B1i6i@ z@e&|=RK!Jx>`|7ns_P3O+qRp`WV~Rtj7oCJE6ejhwSdLL*k)^#VQCk@f?@m4Th6bR zia@d}I;bCAKH8WlKa}(>JXs#YpgF!ZDF1CmHf)Qdz^aRSkS@jM~216AjGP#Uk1e1x?u}KRoK2HL)ap=|nJe=o*I003eB)d*?l}WA8`}LQ{ ziRr|m0t5#;phi;+`AJGgaXx8qOW$lHYBtL7h`|G=@3?zs!kaqi-r{6vpy8rlJTyaJ z_7lGnG6|0QkO(AlkC`U~Ahk+te~wq4PIpT9?l00XS%@mN9LKMpE`!#cn18_E2OJWS z=UIkm-B~Nw>#i=l^7z5?v#E2?^_b#Ov1PjnuEkT}EY8w}2Yl%syBCgjfC9xE_*mORweD0%|LzuF?v<5`x(&f{6da^zGm^w3 z4G1oD`T~Irq}Pt4T%0xDNIb6!z4}^1BURTvz&f0& z^#MS=pnPTWkrcpkHjB^KT(50jtp}r6D}+cFG=o3HT)o3qeV7iTb(SaYGH(YRSt)D_twBPB9utjc zp;1i6jWhX#JRgdon_y|Ui9U?r&Rh2;YfY5IUyxJYWTMTcr@?TV3E=O<1_;8 zMw2s8UQ2u!1Bp6-pfnvQt*_R)NqF=V3gCSs72B*7x^ z)4EL06l=QpjpvQVdG}!TR6mP}iO4TR%QRA`C+Z!BINU;Od`SoA_-{^+s!#1p#tBfG zxXw`z_TTw14!&t~2%xeqPFul-_>5B1AY;{mk0r`67`E9wx{zz}gW6Scxz6_(klwva zUj0WThb765;)?fnZoA2{>8u2?Fbe*yIovrE?_%BUBo*g4)6=dl$clr;6#IheclK!z z$`ZN>mRrUKoiax^xAlQ2lQYUvlDt1|0uvx9($Gh9=fmDJ2DM=}6+LLcps}vrW%c4m zh9n&qetm!4?`EP}Jc}949qOFImlv%ctrVms;>}VG46f%An`!k z+Hn396(3m-;*I>^7eUFe(=5pmYPX_o|3eN*p?HO(!!sshP9CQeQb-i@~G3x}7CGZ&b4Q0ulr^IQcySGq>^qe9EB z#9yv;g9<$R&?{y3BToyiJGne$o!LP(p8xK%c{}s&;n_FE660SNWHSt}TjudjIZx#p zC6=GaO=kLie*ANPwV+^Vxk~7#YIU-lOB(&E=1eT^{+6eH)Xn}%?B==0#{emDOc%4; zS&gfk##?4dTMYs;QA!TR078S%ICuImg|9wX%(=oTJrTdKQu0)Xf3A$Ym}^CbQmQSB zm!NbYe>DFfOIwniUQ;Xo!!og5za!N+9|d=)-{zlo6kO}May8~K+$!W}lNlyGSq}9F zztkS%Kk|^_{0@Cc48>LRbeNUg*~{bk2k(cQX6!idI!l>hYQH!m&UQ;bD|<)3rJShz zu%qa>N!?JvnU&_LkBRytqF0>Bu2UHk(uxjuoSo030h{5!CZOUNN44GzwejGH`m*Z;$+qd#el9A}nV7!f z$)I@9!*gvq@q-a|t@!fnnG%}Nw&d_MG8A#}h@X>fx6|umSn%_5TPv{G@q%yJb@w<*l5=V7%k4EZ|`$w#^qzR^{a%-(8+P z@EEIVQ*5l`loMcY2UHY{Zj(AqX5oypRH`()LeQeMmdj}HH4@zE3R=Yk90^qp7bw-qegymp_>+c(= zo0WsH(mbq)o=05k2?yeo!aH@!{l~eiq?C%?Pyp|up&$E;Hui8{$W@BGS_uA8-Wuj) zk0P!#LYkN8bPR1r3OhkPd}KM>CQqoBf+-Oo2Ae~preyeH%BD`>#i~2VrNIKHW4sd1 zj3g)*Is?2S7i9>bSF8T^TS#9nc~@&Cs}y`t7hxNrBlCNLj($!F(Okeas}mv4kg`JHFqb#qoGZU9UzHGHpGBbYx4j`-S!_#Zk2sNbOgPSh0F!E>ya+O!mC)d^Q%y z1)merNS5weWYn>uR%5kq+4VIVqRidUo8Og&l@c z0IuCIIfr+NoiIOPF|2k2pJ`wm|4Lz$>_OZSMJz{7C1Xx2%jX0fT2oB_gt3UPy0&zn z{nKNBKcyHo_PbT-o3aAt)1qOVRt>ZPgG1l2Is|Gn?o`BL(R#B(a=Zj}?C&*Rug3Ix z_#Yo?PLEI%`@%J5sZ?`kKc$c9j6c;BK2B@f+JBtT)h#H{Y4WLlMO-H9^wNwCR zy$|42;R}1mvA+Z`!Lb|FB(WNJP~N!xaU7j%x5R2Q z;MH&v`@BHX4hKQMaWla;rWeFDw2~O@9zGJdgrvYWV;c8jJtkCA?2+1<1IH_*Ydzr) z^=(fdPY^BZCLB&Q&=0Qt#MgBS^}R@s6ugpN(Llwk|4Jm*@>Qiai;S#}GteheIRi3i zbY~45U0(-x2biQSf76@_Y(ty14hLS{mpJ#po!zIUOSoD$NI9TESbS?~I%GHX^fj{` zoLyWU%l_Ft>*YMa>az*N7>7}<@Qo5P$n$BSDeoslIMB;~0}0SW;OcT}M2oCApyu_d zDg%)LC5drjtJ@?uam2%wb0zY@`Z1d_xfHm-5%My7+dK2pmg)y|^n{&Km?`7UL>c-y zt<_+F_mpLrd>^&hd*-0%9sIEcNF;+mR78%02CaR{oD6z(#Fi6hlU@IM*w4LwbKUBM z(jdrr1!==ao5vJ>R8m$qP7jPo)^(k18mUWnP&6JwR>Y4zHFXV}K7*<=>I= zdHnvGb#7f(?49&+_(d0`^nKBf>odO>5q-3iIi3NAW(T+$E6k_A6q}*w{h_*}0(i3|hafV$z$G#>Eai5-NL2hf@4l~=a#b7W@VDxO%R{8 zV~Wg2t$` z=ugfdgPQHzm_5uLXMjh6%HD9;TMU=W#F>19j+loc?+AKuvA2yx+#rI~VxAW5|xCly9udZTIq5a;^*=;h9^BK?Op z9$Sjyu`+RE?leNoU4OcX7(k2=ugN1bq*pw?vIX46W@pjukm?)>E@Rb)u|%=-c(QB4 zt2SDgKLA&3%JKJG?g-koR8>)&-&VX9>+QE(w}YYfoFj&ErftgnXt0md(}qv3`BggF zEelOif8L3A*W#Qto^oAps|`8&C2ajYmdU_KCH)HkCFX_2^c(>C>I8d(LLp;VE)6!2olMI!*en7Aqmucn ztprV1dI>2jyVt?70cGXn!$|tt9q6hxqPgkH!dwp$BtcG)zK5HZ&n7TzAd}_(Z>wZf zi?KqWb;Ukbp*f|QdjQwfi+UxIdtl}Rso_S7R%R3QrwJS4`a zakRL*X+_emBe_HCjFfaJm+=d+9V7W=6kqh`k_pg2k_xXT4`K}{hMF)a%=NHd2J*}y zr_C%z?-2m(TQpP1(7ayNGJ3c!^*D-~4i|jqY^Q%w0ng0SNurV@_B&g@xg?|YvY z0|2@$0eC;0feY&#k#xq{AZ?d?#vgY))W9||-vRQUZ?&o{Z{A4!X_Npdv7c|EIUSCc zbhxtG@y$*Y_lLG0b@@-KlA$rTOXO)g|8urYobx`^P-S8LvMC#s&Z8jRWUhvYgIV?kNu0>)s`nab?&3yCu3}t$4<$ z$G}%adjTw-^=4H!2Uu0Ajyr$W}vwNaw)>l5V(;93hyzorsq-3O@%< zbo#cRuioFO=4^ruE}c>lKLh`cqgl*}rK}TSUyBTjs+9Y(m>#R+q9riZJrBfw(XxNr z8=>)$U;z`$wB3}Tn1}pdr&zQ68jJOecr-O9-KFg7t?79^ceVp(#IED-<)k9dk6y5` zbX3SvEgm%o?X&8fpQ+omwePh}B43?D*;QXq#e!{@ZtOf87SI1lr6BL9c`n1MkXbWp zn!oPlI_*E5(|C;IBaP9~?K0FWl`bDTs$~UwgGX3uYU7%lp(NWG0OL{ky)!?Z0Oum2 z0<40*V4BVWsAC+h0QzC-lDP3STJ-`z`NdEUl9Q2XPNep<$5W6jO*u*?2@fLUOg z94(IS0z_Ov*3Ce&(Xj-yb5yLAbKpo8x1(iBO(oX6f_-X%lTG+JwO8DFtZGwGn)(6p zL@~gy@BGjSiSDtd*g_x)ENVcY%nS27UT`ly}h3+;iQt!W!Mi} zux$WXqIh|>UyW(~Q@bch8pTgzXDK%UN}oF#mHQei0ZF-fYNc6=z<8wC_WjlBjh)O6 zSgq-t8KuOADi0oQ{Wig#b)k}W>-TwGLjB1Rls`Xf=NMead*!57$I5U}0m8nR*}CFx zqcu4Z<07fqR|?NzLKBcIZ5mm5d#sJM$xDe9vfJNOknkbnDrro?Q+0@Jn6_^mpl`kw zqJEz-2|l0nT&1K*9g8T_fHC0HG^y#oYpq5>98WBJR>+FS#DV&I^&E&k;h5=?=Y(in z^ly(yBK`3ccfG22WJ%Nz)0ed1sG-bsK27Ql(GQD`QH*mfnx(*fLpI46NTC$ZIdFCm z0)%?-zE(P%&poXxrn_u{ZX#?%SYferX6c-3Rs`tWXkq`%Yz6dxJUc_`t=Oya_NWS_ z%Aef=W{Kymz4iYgu8!%oVQ7dsr~(R%l6x!;WV^(JW3KH0TW+=LS&{IcQ*xO6Nzjkp zMLrh}cGd@c80DwQkScxz`E+k8P#Q8~W;sg%6*>j71< zZ$|))2h;-^(n;_-=}$nPJmdy3mKq-3sAq)G{_{3ag&yaw08BBs-To*$_4+zEb9#T} z<|%X~q`TZmw!V>BBXEnKk)To%}oYf~) z28i!?Xp+*gD_W=Cy*O5MzL#02yUBR+8Am%Ip0*rC$@&Gdv$&W{t((io>kM!JsdxYY z!Uo0ofetqrNkoEyx@ZV0Jyh|$NZ8ROd{}(<0O%lj_oKd> zYo6vT$38qr<}RML+yf{`tc7ufY)M9aAQp?lmfD|h0u<>H-F_A6WUF!E(Sm!`zNJGs z9~qHcfr~^<-<#5?oV_X2U8fihNpNN_-p~HK*9Q8JQIB((!_s7&tlc*!E=T1Au~9Wjy&TzixSnWjU!gajJCddnqXZvwUUUz9oF2H%zj&bRoN?oELn zgL)(TUlxwV$dutFMxsVfRnUE2e_NsaIBJjnrjW#x6Us)!oW#T<36mO%F2F`-q`V^q zqI0;C5(Fuv*-(Ur+?Pv&Yq!Hs&J(zTwaU@gJa_o}j^eET)U>qk3jgg9a_1loK)~Zj zu{K!(hIlF($v?b$ul7;^y1}DIKg%^O)XpB4_-cHfm6dr-y|o%2uMVfs=trWEI6~;eZq8UZM~v(?D@oZPk~_f{LnprxY)H=HN%iPReQHmV^kr zF4$d(i>bbaBEXtyADQFOcDH!LCFBB$l+&Wz3`~L8cHWR_>-HAaWbqIeRS0*LAHvDf z|H-P^UzWd7C+QwK?3^TW54Ec+NMxa#cx=!O9ozD{VY;=>xt2ZPHnYm z=V`3edxpqa)WZs(!D&@k+M^r%9fd9URBzyG{N#g*{*KJ>Yjt8^r~t;K9xTd4)`!mU z*Yd(aCt04DT&t}DXcwqvrC4g(0EUg1KkC|rN#^m!ohXSYN;p97&RQVhxnh=Llr>!b z27DeZK7w$}qwcr=0?Bna0~-0v%LSM2q6DE-beF7Zu$~!Gy79ZvL^OQnrXJr<{;J+% z)+5zmX5IvEW%8MrYaiK#cKE-jb{986WBhwb_HTUqu?HOQt7g*yg%5OptDa!Nz*v~q zO%pjryj&^;KKSG?G6wSUr3SeiD_3lG-@xhLCL^Ucj6?hB0UmCVon=Yrdp& z{5-%ne%VXT0bQ}1F+BCx(m0{5K5_8I@3k}o?E&KJNe>}v)r%7JyJU8f6xSabL6=FK zC}WudhauMF2$~l9wJt4Rl@rwcoiinEA52B_47=Q26g%K~i-d(z8mj_i)%Irv`Wq4e zDq>c^Li6U^!3Tfa4)24E+i~NQ3H{`dJSa{ynk4 zIwsP-RpGs+#xw1Fgaj&om)EgFH7XS~zSdc3FiAR29&zGn__VIjto27@RsZwe=p+89 zM$(_{rBeJ~ibN*}kh;W>e>0E~GiGtABu?o#Z296Z`J6H@! zl`v%Y<(BSugX_Y`)&dGDOiE8Q;5|Zq5et|Lj|+fY_Ts>la_e|fPJ16JQjQTL%@K)| zD)09-jN~7ubIvq>aa3_g?ca`zE}o3P$wVFQFZoAC3}^tLGAw=o_^to^Rt6F8-hs=P z*`q|<(-D#yL0*%pSB%3KhEtElxYjGfFKb0yKU}SIA8y~Z`|COW^K0~pG-EQGcLIYEvaZ|A@ByYD zRlFe0e^Bx+0l`RmnkTq)EebEi&GsNOF`=B`jOL8 zC=jN@vu}U*IhAT)eTYEABQtn~q#5Ct_@&}Qyk74utcRxgH@yZaJk&%)-tM0|PGE+i zM7UjbMp7P?j_rzI7v;(`XsPPh;>>=^c*K!nN5_j3F56q$uj|mbp>@foISIOyQMl_S zul#oF20TD-EGHd@KIOw&03qa*-0`>s$YIgvdpUGfjlJ+CFc%YuCnc^N_Pdj!{$_qY|c|KHkWl`sH6D$})Fk&7_2 z8TZg_?GAzI+BFFX3?5HsMIV$`xNdxG%6zyzmtL`H)|Kx%B{xj6J(k}7^}y&bbP zojUj^A$dEi^*0TYD;C_X*Uaeh@R1;&kM`iqSM&ej0whYC3kU-F%0|6{F$YZl*S_O> z0v{;9>)Tz|_eO%aEX$NcoZjkBvax?_=l;8Mza*YAw!`Jj{$yo<4Y~OF8$KoVZIHT0e5!WCvi#F^sdN0iWh923dVf0o^*>t_<7nC+AH^ z*UEr@OG;|z6*nGy8Yy{0f~*{?gHDxX1$0)Hn~8<~TNT3S2I)f#Iv|4z=MvBbw~j=> z^um*jjeaSB-111BXcshpOqWTegw;GGal9LP(=lpZa?b*MIIURq6qPEOqk*Vsp?EF~ zAGKQafC(!IZb_D@vlY%^iV46&mY0mr%1sJk%zBh%@>}3G@|IIYY&jsmO2j4p57n9| zCn~kzVM{JJ+h=s@xQC8{rywiOO1b!>gr|D14NhL2Iz1cwVI6g4Bs8Hz&fF zTty~_Znb7dVotnN5Os>Z%DwYAm|pqqRP%0ymnRvQ?hM0hcuB02-u#a^^BCi~ma%O> z;%}P!w$Ok49Po#c7im&r#yCQ<6$-9Dc;syINAV_7l)QdxLGYl1tq41_xWC^wM`_o5=!fk;V<4+ZAE9xVG4Di4&lTM9nE9b-R*oh+5 za+{x+E>nD|uX0MfMt9arvYS``*ZV`Fta(6;NT*Jh+Ltq3zKtui%yRo zk~O}+dgk`*9jWGaZc7{>0~AIh;_01%ef9muwxG{(4Q)6B*yNc=c;^uKx+IXa+BCB` zSSD5-BpC7Vk>b#>+~X<@>p-bjG?}rvA5ObmpV57Z5pb@T{L5Uv@=W=^4<#m2T$u|k z!{AQZxIn!bKv8pp5RUCv-gA9XfW_E16NDsO=Tutvf7-7OKmATXpDg2?N6d^d!)w_7 zohM@*1slE~(Uts5UTTeeq68h6njW^haRAZqlOo!jQ^4$maczTUrRZlPFi>FT^8=R;`L9T;bgcjr`ZOL}KT^NXLK@#yeFC82o>$Wc zYd+x5U8fusCUz|HiQMGmQm5dgyfxx~7L=>4GsK4~ihX(ye zxAk9<%+40+*<~;HW=@FOaOK^-lrXcC3`X~kb?{HVm>DBc*F-zpEJ@hCRR(u=@9dl| zta!{qf#`PV-EI*kJT&vVd8pxNu5Eoab}2;oyZDNF|2n2($W+j<)G=sli%YWx&5Z5B zlQElU4IgWYsbkH9<~#m9JLKOITS}sgA8>jgft6%QyANoOogWcDPv7No!G(1ys;t^3 zbt{}+e>hVg4cK^r-P?Y;HdK33q3HX*R?q+;cq3!s=1w;DRy~htqPF_T@ii3qzb4T*0vBI2_Bo+2Qq!tWA zJOSBIFt_l(#x?wJK$#i&T_}?Y3HrVKLpuB~w1NFzr^{Kj?)A-0)6I;- zn~>FyLK2S*GHJt)EP{4A<>CGxaV%JnI@ViqR{6#=Bv&p)4fD30_s0e$G8q>eu*Qq4PB%A_(G9R(svFPeJuG_U-=Cq*0S1) z?$kHDd8P(j{o64Rb~_hkAb!l<+t971HW3Tf;J5k)I&$sIsQ6(vear02+yr^p8H&^)8BSzDmdzDC#EEQ zxe5K*@6?4?ML;}ww6D>7aS^g>Qh?O3)84%sS=vV#l6Z-#DZ!$~N9Aa9j5aO`0@=`| zb18Mn`=6`)|BFSoQ%+&}>LicM;=8k}b%Te!Zb&-srk1`&8%(T6Oy~;2RcOP%*pm1* zfAxRPcGt2vE5L*R(JT8ep`_I|)0btKqLV)49WJmT%|mwECnVsx7!r*=5Kx5)Aqd9~lI6O}N+1v^DbfFY^q`dJ zU}a2_c?-7K6YH)&GnLMb7y^BTpm*3{UG+NT! zW^;QY3_Og(E0d(J9waw0GbLBm7ZLE~B5~E5dTm56mhD8$@;tS$>>3&a@GdJM-y=@} zB<+Ia$0`28N=aI4w?yxEd!N7El5dMV)zWba34xX0{hu}c{}uMIMCA$9$>7m-Ns<+! z9ucoiZC^q?v_4b{>rGFiXs>D}uOT)!I$|RjhQzD-B7Tm&p?JH8u;Ee)LN7JPVRlEk z7DGhEyP1*KuF06?V!F|9Oa?P1T*@$#6;f7{*^Nh49kyYw3>JP(3x;W5qM9r^TUM?+ z2Slq7a!GaasQ$A@{{8lfco*jk$t$bt5O3LZ9bfG+UQN_PCM6~USb>(|GoG1gk|=JU zp+QZdJ%lv_XDqF+x)wHAq%v7|Kbc@;W8;b-#717r_11B|rzrJV-u^f+ zbDLu_r`B1%ro~12LPmG$X8K1;*vgNrtP8ULyrsWSBu|l8!&u|IkUzPUzqu}Tyc4;V z52NZ$)tfeH=ue_;d2LVZ<%D6+ zjmjH>Qa{o~$Xv3Go>>5!H=9rgOSD~)>JLgX9-OIJExgDw9$Y4JF_YW8{Ag$FXzx)q zCM_rg(;aLS+hY3YO7MY3M@U+7$@pZA|w_Oh&3j8#z5ci;HKVBP0QL<** zNBA`D5j;Z!JFZ;%-lL~}XPK(lf@?^FvnES5$bOeiWx+dm6{{-~1q7)J1nlWf5f!i) zm=3U|L_E3*9(|y3tL{ehU|-+*TDJ;;^i4osUTpuS?x7C2sidM!>Wh{Zc+yB)_5bc2 zDN<=;4U4yyBVje7F6eUN%(_&BC-`Kj^6rLsf42o6KR+{-sPj~>Vc%WKf(V;<*2}zj zOoz@T?fM#&t`GyOuI@?N;+V~Qz%8FuuA}&(W_$8JZZUr?bQ>xB>Z>sD>I?|(8r>f^ zb(2uz7|Eo925sbo!43}CcI-jzGo`*&Pd!o|O1i>6GEcnx)9`NBR)OeVJX4u{j*$+@ z|5C z*4bs5*u?$Wu2}ZevHH;W(MTJcv?)9fd)FVbk>lS5?N_nzl%Sx2^|!iwW5!j#oXhBP zscK=?i2#$poV7h(@*qXj&>Dl3Fs4RdNPFV6F@bHEt;`pl-m*)qDW-#sf2rzH^iTIi z$4J!4**r1KrUmZ&*3@*8v6s?dYBw<&W~S}^(``I`$^DaJo3ayVUHbu@7=PB%N+ucG zj41W{l*;^hr@4u4@3FyC%{`LazZKs4qVReFK@81nU*3M44;iY1K7SO^t48>?mQ#YS zRY`}Nm)UMSueI3Z`f6u4u6(Bu^T>!oEIHcN9q>_<~LCa8dsE5(#E|(%4&4$ zA%Hvgy0~vhaKB_R9{l;*OG*4i23&(1JT^ol41PwI*P_oK1}pg?7W01=7(i;14rga5 zD~D}tf^DytnIR|6kk+!v*#zDDTUi8Qh2+g>J#Zj_HnQ*f5>EmZj zR+f+IdQ!%TCmVUv;CP6Xu+9tNQB7WS2TI_hv@kaVoo09W|Mb7!~d~v zBROJrSXq_x@ugOuWjKB!W9m{Qi48D#s<@A$&LA*PR?f)Q>*bf8wTkwrC-kdJ)}F1u z8Kv+e*aT$YuYOY(Rx5t%MM(?+L6KxtcXZ5Y=F- z5r^%mn+(rpz^$>~7lww&Wd$q!h-sdAOC}2c z&te_adU#-EpWfZ%M{3Qvo8?HqjIZcE3sDKJ#q`TIG+Dwnif52ZJwF+lF>{PJT(z(f zmW6SK2IQ}E(DbSjnQ-mZxInpc#<6SVF=p8#8o=sAk_)jWE<8@2z_yoeuD~?#A(^T8 z@aRv!=_?)s=Fk4rye!-wAMLLRcFrLx|Mf}f1h6W-cBM7m|B5prAs^O3650LD!pK_W zi>AF<^BDV!P95VF!P0O_V6Qu;19s|%m==CKN)(dUca?W~;2l%6b1K*tk)?jK^zy!8V?bLlsX*Pa)) z9@l@7rz2l>;6>)fTnJYp*k4@gVhhtKQZ>dQ}r0T z=I}<*QVaZRTl|%;qtD@W7jumJ>6d=M#^bj~r$$0+cr^^~z05m}kFT5oW>g4dX?q|K z7(Wg47_;14Xy>|5dDpH21EhxF_vJji@*mcsWTLF31>UZcz9#xZjAiL5#lD|>>&Wx5 zAH2vr3W!K<-x1LvI=Xnnl;by<{vSwM4O*Br}BSq zDT%TESM>Wgu8QU)`Wx0Ly;+@}4S7X+cP=eXQ-1B;jn7YkRl%Uo2k$-~9jJZ~w}5?7 z9K0(8Q+1MT$I)^;*mgo5ieg$2Yjf9cMq9%GmvBq>)8gFbhOX!GBk>_2yxU|b<+o+0t@_E@v*>~sNvOWz-vR-90j8znpKU1V>5iv0ld9%yzW?in4!HQ& zRr|;HO~Qt6rah(m2sp~sYMrnDJk0gkftyyezeo~xIDf-?7GOdD%LNnj%`B`R49om~ zG@XTClux+!l@vq}5T%i30qJfF!35rMtVkyWZz_&U^lX{p>t5 zcU;%^o`GnEnF@;ky`H*wKwqCdeEtqIR!iJCzKY;dhz;+iUEKu!t6oDanu$=hDjkLDJgg9P}uO#pH zY;*)-KI!lFRa7p=OT|PR8-{#+C8ec=w+5?fZP;Yw-TWt`YF`TSOulkc zDtQ^!Stj{L6D=g;)AExOXlOJ+tqWzX$LSen)}7|(-So9Y4GsA;8!XJBuMccwRdJb_ zLH^xjR|oTdf2nad-8b5;Bk{P{gvb&tlF`ymT-8NY8Gyk!BYKU|IU9=C`QYA4@6fO? zXSb4jM3JJ>(x0A#1!@=93)dc@k!WJt+Vl$)eI<*zPnGu}sWRE4N9laAp|~7*w(_gr zc9Rn_BG!c;?|)@x`80hP7}&RnEc_xTHhPl5M;v3^3uEW~oun7KGrV!u?N~EjoxjYf z9piDk5+oL_)A@(obh>b+kviD$q8F1kYet2T&+{|2oX$k0Cf5hxk_l(mf&Cga`?E2; zF=d;HKula#i`bHK%Qo+m?hk<>L56F-x(q7x`C#x|+b);Qs>}}&H$+`eZ-#{iIVSd< zk>!57gCU%sVq!URr#9+LF4e_{_?F~Y5hUKNZ&Ngy-eF+$99Hl}1v;y_^b6Jb^>ByB z%+%wU^6o^@09oY=+gZyup+{H!adG|opR@9W?dVVa_+P28l9x#CUObOeOX1dD%Mi;c z-md@Ye7!|us!uw6!B={(mWP(W1U0V5mP;wfgA6c06)B4wbiRq|N<6n3r5}@;<_(oa zI!M0?qoVQ^?S1<9d|>@wbtQ>+Up~+tReO=+tDIv|l!w-Vq$EK;odkCuU9>vacST9* zP&_y`TRKo7@+~)&S7GEGNU6igGEQxGXUAyprl-+^5k(mJwyT!9pGzh9Oy2XL*7?n? zNnl8b(Z=2S-egP3qz#FnY=7|ZBMykweM?9>g$-+bTwx_WxUM4Rr5;m4!u()$RFIdT zE#u<{6QsiMts2G#QpSom!)g8NC4;-j`3`Giza6>k_9Dr^RFMS1)YLI7PPj`RYoDTt zc`LGAZT6L9XU}>Eq~>Z~^A3CtAmib8%mm6>u~YMPyIf>sWK7mDGc=-!{_XEB*9$t0 z_J@8ChD(2h3HV-z=<@}N=o}m_&Knr(zj8LbF);X}-s~!x@u+wjfqXupcq#Yh{=EP# z50(KE;@@dYmnyGW%$iCrtJz{B-k~gBlqxC+y$SM!c*-@BqDh#PV(?*|m+5fZSsTCG zhIp-nRlc1Q^$iJMP~H}r3q!HXqAov=(NS_2@%1GQ2#4g=I=;DHXK}{$If1g^vB~~Y zK(%Z+e*v4dy^sRI@8PSw0*dFM@Y<11S&~{I+$wWbnRsidV7|`f=HE_MIWwO^|D7ZP zKN(Y3^|vd@=&j5$j~+@Wj(L%yLtHEm)~I=C)6B>=32Pw))pmk|4g131a)r+yO|dFn zL(3E!iVGR5O0PFB$Xb)^QTpF2!u{ym%R>1O4_Wt1GXeT$wyn_{16y-4Je>#s}<*ul$2mes?}T%YA3TD zgKh!WyB*S{MNB+QKkgbT{j=;9*%krk4Kj3Mfq;t(RHvfD*}|4oQ_t30C33j$FeY$8 zZST{cm2LdMHz;MB3DsTF2&^C_Wo7>|Ui1Kugf1^h#o#RkonmHXP}y=NGN?G^-TU`F zf%d}F>`yJZU)_XR3`X0rzYa{4St8SGun|=;gc9CduNko1oN&Ib0I^dMfkpzApFy`h zEGi8nS%aa_y4l&hB9wyFk%KpuIu9)@tY)_yq$o{YqRAH1Q~Bqa$$d(wxAA+CcasIO z&9a-BbF;3w*z}qw299FCoNo6?TmLj)Uo@US-XwjY1~zN1H(V0Q+tt@k|NbFs_QBb9AYC2Ga~f_Zbmr*6@4KZcnk?U1D&(borS_FHy-ah1W*llk#y;1ql=Y| zUOE4$mLp6CXqU9payGCC1sr7aaeniyKe!w&V7}j#vp+EEaaPWX9V2BPYt^7nWK0VQ zMCdQ({QEb5uF{;uX4Nb3tddDOjYqV&dMM9cr^5}SWcGxk4P#&F>L@M+RwIf*4(eeZ zrj>Nfdhh@NW%>&CY7Iq+^C@rG&=8?hT5I7*#-h>9(7CvDC})tGFgaMY?9Y$G_U48! znP~x;{6qPI7mnw-a-3w`fb!X`>t;^6P+LrTEbT`bh42<0jsoMw`Q6i|`!DO6Mi z%np(4GrStC5F%Q1eeF`r7TS5XYEmq-xBK*eEI=Tq3-Ih`vkNU9GCuXEwz3kp*j&SGv7SAZo4IehiGk6mBp%GNlhY4W=}V6tY!WRW#OhG@P@az#M@mj5K&?ttyXw^+guI}wYxf6!BbEe zY2)PL2;+tpNJ>ghGc5^9eU=ffF^MLbROA_{ZJ<-LExEbM)nM}p7rs<3I2(Tr*&Jg9 z&pX!06sF=y;L+L>g1+w+3X9-RRsmWHJn~KV&FP=IR z89k$~>2kL0RBMCxu^7doy*$z?DsO1Ez4{{&?~K>O=5B90e4+hOFCsf)0Zb-igNNw! zVtNr(EVxh-FO|UOVxEfWLv-NY1=w*sCx{!Pc&b+VOm`l6@;FnAWpclrqmFsW>}PfS zzMs4N^v~Cl8HUyX!Vl*qt6s*GD8tfzS&LV;8y>;Eo=GFepVk*z-Abk6t$m`wtx2o4 zh!^aPt{ozmW@{w7&76e0cQwA80W>*aFy2#ecYK}s5kpTAn5<)P8hfj=p491GvO-r5mM(zVL(F8oDW z=Qfk?7x%nz(E1f!p@lglDJS)s9-MnCX+bjLZ$~~80x@vPw-uZV2?2MB{6M4x33ntj zNnKNtg8k1j)-ph#d^8CxshhZ5U7Z4YJVutpsruKZmvQR6NSDtQpxX;BZk>D^K2HcV z^Wbca&GCWj%3-}YE=w;o!y|fgrwsXE;PoHo^LUGzS{kjeG$pskI*+iXK$psV_3?N}v zGl9RRw7(hsk!QbTWo=HB1O_4vl<+^w`aedG*GVA{rE(KnXB46CVO;Kq55uT~8|ihK zaNr+qE1N#V$zH`t$d1T+SezV%+2BbMNZ=9En#z`V{Q!NVQ)}m!J~o%kL-X5dR;c^6 zc7`XS&QzrB{ya^|@N8=(o|5!=p(ujzSR@L<9hBQ&hrM}MMFAFVp|EDuYl^x~yD7Hh zqXh4v)R-T>6>0wfTvzItnfeAR+GGRGEB=O9?Nl#%l;8SBll7U`QWytsc=-Ol0vY8J zZ?X@11#%fU(Rp_e=1r8^_z4hyLUX*5*vr=!%MeoqzjvrLk|v zqueE7XI-Q7IcQI&7oaWW2itE$onP}J@gR9XBT!ku=q8L~P(zSXb$8nEl96zzdnQ)E`6t5F{)XX`Hq1F(GvLhwk`=qdGOZqX9V6TsPk@ic56d zlXB08@SiXAjVpfGyS(sSRj4<~5V;f3frO+Ci=lO16&oqn5r}=q zL3q|wZ!?E&DTJf3Ax(2iuN$qhsp~YmHY=Uti9HiYq^z_x(2J8_g4)g&aS`4$XZ@ozj{&*#hiNgx218yV(e65$lDJU)5OH@bCP+~Wz_&=klz z%OnDYP7j3q*=umLJ-44>Z7=LStxUwv*j!2br3yAq&d;25bc||}A_XBAnhzi5PZeAQ zF^1|p9B+S<hZ|Bhf;pZ5BE$#JMzV!lmM)O= z4203_w{6PX6fPZmyqZCirsdFZ0Z-b&Lg*-cN?7O_lV`Kxd*Uf2rwxl~bKF7UB<7Ly z79`ag79=Ifa@{s~EGqg4UNe10C!y(pJNJ@aPNn9ThjSzmZ*Fq1>zf=}YQc_wCYk2@ z8u||ixiV=pW)+c{b&R~y2AhBO9)=(5LURc?PuEA5DW+|<&fd~`4J$0Qyv|unEjGw; z0ynLprSiuQF_ollc*PzqRz1=rTXcQmI^i_^ZdI<+k~>kLjyQ0X|Kh!)i_6!FYC~LWc6R7)!6yk>fIlhz;HutSJ2^NMk zol`?mamf-AgPrm5q8b>keq`W1%C0F!7k^_cFX~oI6QEM5e|cKhG**YmoAiO}(luE7 zc&!d%;^szn{s~ir<@C;+a}--rBm-)Z0wMHrJoeGPfrZQ{s5Zv0T8oY9g^bs;WaelGENx|FI$9Ll6o=t67KVW8k?RAmf z1eJwD>%5fEobeQ~eD7`$V>apXmMfA<=|#fENpH$;Ey?N?M(s;pub z8B*9EGikruUJz;bIRPg@+&w)w1Vc&QoEtaZvxsgvL^AA8z+{Ei;-KEv`KWYTbpSWt*02E(a6&ZHl|N!s01~=>>S{Ty7G@sp3jX2Ef&r zdVl9HXDdBUQS3;XQN0-)D-J^pPMof@)_*{w3k0||@$h&ff`7usaPOv4N(#ILU9-hy zW!1L#!esix45~O*Um%cCjI^TjOXQKeA)LGi6l&&#Rt$d|xco9RnMxd=3 zkd87LB)(!n3rBSoW|OZW%(P(5daIMEt=60zIJ}f5R7a0|G@qN1$C6T4g>NQ_m1Mug z1u24oF4L=1wPLaCopdUg_4s7vnPPjsH{0Q;WmS7el~&Iy6w6D;O-?$c#pAV#BW4bl z-pf6hOe|`Bw2E(~^KD~nJJag($HuI;V-Y(s6>x26V+#A1lZWfRpM&c!NNKJ`YJ?@vu!?)6z5k+Lk?W z3SuGB3f_#bsP8%(`OVRhyR37t)hg*}3P!qFzKRmdY`LtmJw*p8Y3hVwu$CKIk60`7 zNFbJ-dbZlP#j>mjDLkAZyai03kl&H^SGPR>@F#~wK$`5=&LtBldHV#VHZ<7n6(gu=BEtf>KQOghQf$~QwO;lPGk15 z`AVxX+&v?SHu+pS7xU00&=Maxu&)s2Yqzs6)KC)-q_i4HkOr8Ml;pS=<;atz41wxS zEd1+pW{Tq7{g=g0=Z12y%8T)69Wj+jj<7Q2X||d?w34hcoenXb!CU&tyCI;CWK=s< zo^HWq`$Y}vxvCaye+(j9$Gu9x1j!ImKq<~c;%^IzCCDj>f9OLfpHe~Xn$8A4zttC@Kz63dr9=`Z}J{lhW|)_=P$^Y z7D_2hq^9}HL+It3HikTDU*9By zKLpPgE~y*e_<6CWzM5Y_svcWTK)K!_;f0Y$0(#{76kv7I9s{RXi=v4J&xL^=#6@n_ zt8X+ks>rK-LNKoGmD2GF&Y59)(54x^8f8_+@abJx1eX!FXAN9po4a^Nbn!c}=nS>{ z^vynW6%`#%98tw!+A!U=W>>aPB?dYj_G(`Kk7*DCZm_Akrkr$QOHT21n@7y_I=i}f z3Zv?&eEx()Xxj@6tHDbm^8HM*L`rMxj|73AaQ<1puLA#cmCtAE%{G7VP`M-xcu1zY zm=pNMPXH*kBbx20D+bMf80f?m?EkH0YTg`KB^}UsjjWJKitBsT8%98@`;*xW5UAt` z&5fuIN2`X)C9)UC>2~_{-cZ}ZqYV4$wZB6)8liHw*Kx6j&*Ij=Z z)N?Bf1bGIq5(U_%KyA&VgvI{C?{!d8Oe}B>nRVklM#-`yk>9HWbaA0g`ZAg-{VAyh ze7V0LTTsC&1*`0yh#?{B8lKRe^g@RI0o?Z=x_xyDusu81fOLC=GQT`bMbVqgQB0;d z7QUi|q|ZADG{u6RSLuqnV^fK8Tto#7D#9x7bDHvFS+4b(g<@IgpS3g#5|Se$qEuDD zgoq_l3IkoC(a{d(SJHZ6hYcsQDgHm>jaBcfD;kX{z{w}wJ?Yf;2Up;ul|mKc3r^td zdb-I}#FI2-Y!{V3vd6Jt_kD0FF35%3>WlJ#;uGeo#few}P5~ zQs53rCGmFY=BLC{04MAGv6#!dqW4sQ{!=pp!8}@r`W))F9Ltr*71ykBrLg=~pL+Ji z(_59by7_EnwM-|1DJPFGN9Z~^3CnbWy?FQ%ory( zNSSOa%eB{E#do;gr}{AHGRc6dBFAyX@lp*YO$VgM8j4%fPk*m{1>bo;uWeqht=P`z zq(Ik%J88sQNaolI7hl5;dGG zaE&syrG}AOJ82obg(j#*9Z3>AfGwITiFox{p?hjn#nRbNbO~+5_TW<-3;TkRPxSWw z%k{34m@S;(6B-TeWN5PO5JFtFZ%K?_OEJDe&)0PpTdp(Vi2GBmL%(mkwX`zdjQoB{ zVKPbRIkdXVgh4CM=ma!EcXXp5#|wTo^)k}{AR{#WdqyA&mj1TzZyZ71V7XB>5KJ> z*q@bXjllI#cD|--PLME*$?l2Kzd^=dJaV*@1#%wU z1-RogV$554CnH5Y6paA}89sAtsf+8O#Bvqh65`wa|tes%d)q1e?fU zY1prmDOHf=QGhYxWUrb3@a;^Elu3?KfBlTf7sl1zzG394j$(QO+X*yoKw;DVazlb9 ziPx?s_-s|fbJk!zi9e|RGGC6?#OqO56~_V?TZ)H$d$WZEJEIw;%El+Xf2BC9>?7(; zmq@`3+O2-aEzz{AxcE=r;Cbz|xC?0z&@IqM6AM;IDmi93bU3UwquOFpa&zC`-POp@ z(9kGmi9Dt2|8M=Mc1wg-@!F5C-(x-tTu^&)x$ArG<>#g5=c9#E8F-WDE!6OHt%h8a z$6>-U8R^^@wAI$m3^&yTJ<%+|}i_QIT8Gx8((in*?+$ zcA)ut;jb=_rE(r>dD3o9I06H$!Hm_mNWg3hCOp6q)sSy3JbYcNd{Fe_DLvGDPQe_& zJBOU(z@lnaJD!|~6envZ3ZrvWJRRwM3^Lsp%0hla*1IzH$#1@cUdD}f?e7nW5(<6{ zG?C}ZB}}%sQ&&5t7c!=R)}<5vS~4<<9?sOOXt;7c8E!l0nHrZAmRwn6qphj{2RR)= z`rGB|4pHr6^YsIu+cP;dmibXN#^pDy##ihg75k2CAkHhI zLLhLYt))k<9_KUIf}OK~Wj`JRfM6C6=k^{Sp9Zb}{rgwnBxl2+`jHH80|5J}ghnQk z?t;=+kWw`2qK4Ed122Dx!tA^UKzOi*U~4?=K8*f6lpd90Thnz$#bC!m>i4^&Y|O-o zFm>lSipmGm$d$|$20B$6z#jlNvW-I6N(gqvSNpUiJ`XhgrbTC z8rt+ZIhOGl(t|WKQxtW>X@5!MQe9ith>b*OgUJ>9=JPaC-L@BW4))yucF*LE?NHuO zj~Gb3#s&j5A{>w`zo=mT(?JZy?CFz)$@_`>*T@*QPA?^8DdFHGn5`^n2mN;3tpJQu zVbpTWo(F>ytJyp>K`FsU!}k}L5mUP(O00bby_E}ni^}6nf5Rl{kxHt+=^Uj_-5@D+ zH+fy{BbEG!3!J_j<;#bt^_`8V2i@&WMltlWT(+bCO7q8BTb+Fa&ujkrTRALdnwGZh zyj|5EM1^&?=u)dVtAW`0^g6LMBdCE!kBj12DMt=&RnT#fH(krMMa0KBjagL|PbpK2 z0N9ZU1%++B9Dn1Dh}^VwWL8Zwp4J_L-_I_@n=pD#U!84?QNHRT-q2`bRc}4UTA`p$ky&?ErH>hLaqH9_k;e;w6zn z-G_#hrL5QH{NmqbZxDIt&(HSioRKaNgZ-$2+v$ZwG&du??0GIbh9Q$x|V9y*iQVZKdo7jp~p_sd9HWN)u3gW&r+-Q0s9W{2K4Lv9xSgO<@* zt)a^vaz)O{-`mfg2r1@@(XM4>Guuli#PFoCDaWM(j+=7?exjT=dhKG$X0^eo3Qh*x z_IVkz-EUh0H4|m!_a*(m3Tv}zY!^Y4`UcicE1@xUbpUFSVaAd{4dNm>L0 zhI?NRA0LsRn*_)b3v1&Xz(cGjsw3ksaX`YS|B(WHQE9gjH%bh>s;Y5S+u!iWa+_o0 zj=J-X*Q8*cS~=yA+oMuGNJ3J{z2|X$P@Q-R5QL2y;d6IccgqbI(T5@W`x|)Z5-HEf zawVubk$nY_KmNP>L3KEY%0$+S-ncF&l!$>4jXLKfcfA(i)@OYlyh*J6PBt~$!f2!=*R7MNrKfbDcw)pKwpcDnlCN=GPA1ebgz%}e_kAL;~=HCaVgv1oQ5 z1dfGcp|h-%kJ4Y!xcIqR%QWBJ{hG5ceVGO%o0GmSh7B*^x zHR6OgyCrv8R*V1SK=gUUX98p(Lb>|dUh`u(jrk^wG@1E2jHjOoi!uP|rn|Ds>%dA+ zQL}s}J}o{5Qj2D6yt9Do*~aA8TnoGv)iKZ=N3V7vB90vII#-eM^M{T_zbJ z-gP}lSI`uAw!J8}X4CdCW-9vioXjs#$g^a0P^8OKFMfJ)@Xa!?G1kx>^U&FV!=goF@bl1boqqGWbBZeV{hZY`-#`HwIqQq% zp;feboHBD*&&PNMR2|<{30oEmM{cHbIpMY3m`Q$yE}F;^Xzj9@We-Co(c%Od+qg({ zcp6GBQvvp2v$XD)^ZV9T&+i$*9ilnC^iUs$H zfN`QN{?D_?J>(*3-OqUEs%mW#{75SdoUI}%;7E&V^1Keh@yo{%7t%SZ@vFZi2A3-1 zoeN^Iro->5Xy@FQx?*{z4#R(;vuGj%7g4M&?KNHA+2hB>P2&8?MSf;@xH^Fx7SG8glW&X}-?)>r+yi7W+6|4?h=s z@J8YBizgVE;K!Hf<9t0)aq%~gn&;MRGA%Hms^!=%%ZnM$6{C*CWB<1u3vfd|hYrv}%WGJZmi zi@RAVDwcRDIo-4p4JUlRlG}eh4B@C0BzHZJ0}zjrmfyY)25|w+Mn(C76q^`_p&`^U z!f#Z%pJBy_nXyRxs51v=M z>QoJ~V{DuK4-JBEWS7U4Sx#HgBP;0=T?OGAQ{aXOwOOr6!P<-lMpWQNTkkgNFC7aR z@I4jsv)KrhB1)uS$r8Hr-7#!%CyUgq=< z;Z5Xq`SsP}U0x)))qYs_wZV2uG|}QlLegi=G(4%-iDYMiL3myobDh~#w*bf=vaPjs z*6RiQE_tlQ`46!af1m-qW4-4+%wVir^){Q?^V9hQ3lZhL{KXWwpVi&dZ&%|}re^nM z$CIz@=bJY_mg{sBhNb``>4xL}#pp`FtEd7I@QM7aZh&c$$u$9@qOfc17k`QkHMzIS zt%$05q#khEIa0AivBnB!6cFqOF{_bW>bT5y0(pG5|FnCRh&Tp$+Q$WPmGer)W%d$g$==%LGB(v~@#Y zANQCP2P5F#HzMc02W`GJa|l!WI0noYDU)NDe_UvEQqik6HKRXHD2&|pD5C+lR(r~{ zV7rLp*^+Jl*T^u?GJIDy&Qr?y2YdjzSHXL$_llD&Dq&jq1P!)XMN>>I03smwFTfA- z$M)|-l!po>bf!!*+i~{>rnI4;2vrltqL}!Gc7z#|lf%^OOe_x-nxjXQVVMfXWWPI$Q8|zp3-ucug{{AiBz!d}HA4h(yY6 zA6$f`Ew2;ryhx{u;M7T}6x`X&`?^yW9;`jp#m&_$yF263K55v}D74f6R`EB)sO0Jz zC06&K7EmR=gtMNL#K`%YbbR;*U~gu0Gp;*_%Am~%t=f;=aqV00?b7tKfU?2M-9p-o$le?UAl12}sQbjRlqXID%kLF;mJJu8l4zJiKHXMx zbZ4qOwuOU$2m;*hp8k=NDco`$X{%aVCy%{<+?CSo^46&k`vOSL4@tFUdHW48c@R4{ee;ZZ8TJ9t%d6c5by=WOQsulEPyhO+?(0x z!m_cmpy{_~73X~&+oyc#%>}WyO$07L$WrziAY$UD1QSMKTIEHu67m56dRJ|E{mWM{ zIuW-eX@&*NYlDjyTcbP4&OK$q0d!1RoUYQ-ULZqM!t8 zuvHSxjP5^I@$>t-%AFupfN^TxC)q%yLeNhF#&azQ+|%}x%mtJixuv`=L>}Vobr;p| z_nw>*`li}-{3Qv1N!@ym`Km|Ux2t*% zis>T)zo&J5OnF!S-x{`vU7T-z(C9*TCt|e#)^O!X>`v!^`;&@Wi1zI+84y0?YQgm6 za6Ky%#PUUULcLQkMF&XzR;cUvBU|3O)I;16e+AjsJT!o{;g-Ww1xrd>saU?|7n*8d z*s{@BPeZ|F8~|!9E;~+p;2ICieoaAVa05uWXzlxeuX19V294&sNKv5tNXd2^8;8xskOy3d}D4XmoK zDXf-;Wz`4ng6&jbvyGuzawx2b9)GMOBno3D@i@f(eRu_Pfb zysMVHfTW4wYSaCeu>|s+E7vy5MzYOF&mNZbGYrtPzElX+y=EN)PmtGE&mM31orGzk zDvUaJ#xe+v)~Aj})>OK~l;PVJ;rY>M@i*D83Jp>}Bo-WxQ+?moqo#T2976JtNgaC^ufOq}M!GRBOj}fo)@^4|YDqFS=bAN3L$MrMxr@KJltt)v&mK}L{N8Pi8Bv-?)WLeq;C=xw@qpa2K{r!4SrZA zMu$cV(LmN-s8IIWA~OLisAg?hnXst@v*H6~Dk`Xk`Ih(v;*1HN27qN3TLIZoG4*#J z@jpYAa}PQyKjw$4_+V_WnlC_~(|itIRXc+3Q*U0SANyupMjYBq->E0Cm`o%{qbZc2 z#shR}N9N-XaXf4@$#@>jGfGfTz~@(`;y0v1nwpYJhX04J_`ii!Ssq4qh)5s(E?WsdTJ^f8pi ziq{h|Lj@j5zqFM&Dk^%H0IjwhwZFdd9)F@PqwA3r1eU$Gj5h`%xzhv?T&5UWj)tsx zXc&DBHvB?K498t89XH^qsOcni*%T1jP1miexp@;U3elG@0j5bqKMSK5R(O2Yk(`eN zpr0_6zw)=4rP88UQQ^aZgc))fLhXw8;hr;x7;Z`05oT7B{MJz1{eAv@BQ-LtOhe>VS|B>pU!}#B`t)1o;;J~ zgRv=_ula=p|D=m+_WJrh9pgw1Xx;NatAE8&dpWEnlZ8zyKZU+yC_ZRpWJJtB0W(?m z$EJn=|E|(6)-J^b5}$fJJiK|ykyn`77r&i&6aQIYhTz>%0J7OgNJ#m`g``vRm=83awPXo*k|Q!NGNsJ`82Tj~FG`}!l~_89%2PmFi07x5h)+-_M0?$~_y>BPMRnDxEBbV5h%jwNBazoRM z)l1ew`;_$dSko+@F9>4arVj+E{ns7xylqZ;N>L+naH>d<;i$`Et_y)y%6!3+hpQHZ zrF=D;O7k56*5rv!{LE)$K9az(UDbOxJ^Xna0u+!@Hj{^p)SPBz5#Bb;jyKVlI^KF^aX*p~vH! zUp_UBtYSVL6n%Vo)V!NC_EL?J}TUdY5ZS6`&f9B)b zwYeq^a1OM|7XZY-S7_RR?N_P4iL$IT=+d%ME72B8u9w_X%?bLxG~Y`;#o=j-Qbi@G zOIsFduf8+AlGHg*Hg*W!PR;l?R4P;S>tO10#14Ph-QDN9)-Okoi|z4w(KofTxD<+7 zwPwM*_0EUfqUE(@lD39^{O|!)? z!>3Q5=a)VYME>qUE~@TCJLw|tAK6?pNW2f0F)yubKFTOp+^8 zun$@ar+Wu)$5|#&;mdwg@(xg)xaGiagh|NLr4;$ zwD!2t$Zk9Pc(VM`gx3SLLip`i@j`&IUobg0ngFGW(-?tqr2QRKX%YI(;yL;|(&5QX zJV&0quvG+>muI{N=r-T;RU$syyYBzJ=O`{ns#sEe^mjeuXL1>#5Mi6;OkTPF3niLC zwUp+5ey|)>SCV`F4%xe1i>boL2ld<+?7+oT1K2vd546J+F5h|j7jGR>I|rURpJoXR zfLL@>;99x5Z2HwH)>05VBYehm4_A;}Pe1hYMs&Owk^2>i8sE|7NqY&3w0d|Mk%A4$ zew?-Bqqy3*YG+`4Rx@7irB0cZU+_iq0aD*dX41+KdA0{Exug516gkRfb`uR)TAxP7 zg1nQZFs*?|Ipl}8+v%8qg4>hg^vOj#HatH84}zY|n%tOHsS` zD5PY>|DUC7U*+-&A{2B}kcmJ*R%#&pZBD@>F3;qCdk}teY(-abwo7qYw4!fU!KHY( zpdXI-@cBpYX{dz_Wr9d|4gF z#9>8jjX_G7MojbI1C+^aU`8(Adt`Qg1UEB|CDWAF7}olZzv(hr!l8EZAaB59xhkzDo*UO zSxq@NC;{Lcu_(eKS{hgUDtl(L&!&eWz3q{r9as1{&@qKAV7PR0CLmns90}C(?6CJw z<63v?arQU$tXP(favo2BWK~iUqdd~&%DeV2W)tPeI9x`e7^<&V$O<_zhcQ)9s4q$R zo48uj&)=~re!Mtp4F9?a_lv=Rqqc$P4oYPyDEdTGF*Z~Y_1)iCQBZ%yF54D4TZKN` zBmNMuV-2+;YU)(ZNZj?$s!AxFk93D`MiYjD&f)SgZ~Eb64S-{Pmn$#BfRmNLL!M4PpdC{# zIf(oIZIcFg2$AJlqmIh;8%8}}=Y)&zc&P^c=aDo+$2IzjqFzAMv40#PKaAHUhPqY) zb9V{N!NxMbq(A)-uBHC#9>%TsED6em624VYnLc>aB^>`yQ!PnU&W(hD$M>t|*!L~J zC6RBD=bB&ov0J4&mkX*pzNE_KZfSduFzMrX07&h4krL{5!IRo58W=(v7>-+@ezsrF zQ>p=5*2w%-gN5Azq5X^T+Rv?~S{%Tb^-0NmvO&%z$dB1I*%%-BG;NmkI0)fwg`@I8 z@^dD)%ZD%Y$p0R!gg0Qd4ACk{ioqr&6q|EY6l_29wJHOGUQU%1uO9bzd24l92m zBYij+j3CnOyA8>_DO5w-ObZX(dI>PKyG*3wE|d(JE_5YXK^+b-Z>wXwJglIvl88T_ z;c^#TbRkm7lVm~+lPoBk52+|&+}{3@wM&M>Gh9`^qHG)8Vs*4%o~Z%vcPnghrzn^3kW z?)^*_zJuc3CX=ku`FuK!aR>PziIN>l=7+i~#{Yrfbz7ta^7U$LI3>SNxgA1)FZW#Jl9{y)CXGOEs|S<|=^ zTsE%3Z4)fGdvJHzxCVDiAQ0Rgg1fuBOMqa(3GTt2dERf%Su^ihYvw~0 zS0l<~+HJTE=pyLwlxFif@NQ?NRv+C-3zNrFGtX3o8N#I57ME+^6A32bv!(8RP#iq* zj+gl8_K0#zDo`l%fze-EHX?#tS~MUwsoW!Y-cdawi*_=)i|pFo1!S&msuh|g_HG}w#e4g34&72Il z-|GP`3dx2U(49F|nv2sx5InvOw6oEeityikerCnD+}qO1A-j!#yu$!}Z@^v5lO9QM)Nn75|V1y2Fjxi9Vm?EBUqZVc3cB50K8#>*9B zSijr(Z~4Br_R*M`G!j1s5>_~!3bFr#%R9AJo-sFBlVJp7Pxq(YC}*| z9hbUkSSn9xmdQ4^t!*$`QdieaPUcO(mbur^7tMdCRJVV@%y2Yl z`{%uWcc?_fYwVB)N{T=FoLuSlXZ&XpQ(C5~*5;1(V0f3buqPzDcBqC(=r$UtS``s} z8j-l%WyBDYnFEHaMur~L8|K8J;xP3?iFS{5*SEbFPXL?f54SR)jGmSl9);E$+HD(y zWk9v&opV$}!YDJO$55=I3bDk8!0-fc1Dd5At8r~9IN&D9`dOtqLuHbX)k!@_R%>MG z8e&af5P2frj77oW@;o4!bSbg{?GZft7#wVxn3!Cq+6#d|7zd@(4#20ys!s_S8uHMe zXWO@ksWAu)_!ouL$@raB7>s2I+0jR`Hh;t)(yITy5M~VVyw_wh!{ zS@?|c0pzak6~XX6qlu(JQ;o_RXCr<-^ReU?wh_Yl{#HM3A_qD%jRfhh%sA`{ z&Y1PDjf?`MNR!VlsEvNM;i)Au4YoPC9fp}8y>|ZON57uyUL1m?J7i=~^1VC0zFrq% z3GQq_%7Hy~Uw>RGVYTYigyza;%P!w)-^T}wnoH0fr(fKvA4VHzc0;9Tpu~MIwWW%_ zdYNj{eYQpp!(W!4t!8@Hrz`0C0mz~~dPu(RaQ7po1lNspTuI-*u)qM@XEEBUq(H&W zoZi2^fGe9EYo8+*GM{u$e?_EexgiB;*tYS=JWh5||BL%&4F_PXE;L+329_|nP8t_5 zPW&w#FKv0*%Ho#*)}6O~!4Faxfs?=Ag z5W2i(ewS;ED7=Mga0=Rh$BFgbQUQ<*voIf6ojyaCK3E za8SOADVsJ@gV`a}#pnN#iA;U`7u`RKx|Lt`yecJlN=QSPs_zN43auwbZE0&yw?0d) zYyS>cEwVmgYyCH}GYE=;qCf#kq}psGRAwyl6hA7aJN+B?q<*SE+Lw==d2nyn2Ndz+ z4Ph3&_`tNTM1074_}}?Br0>*qgHT$Pj0(xOZC!>c6_ncybFS{GtEK5@Xe{3`PP$?cZtrujlU2E zUttgd7CBrrY;6WTBz-|Bp&jpE$fFBtV5#r1>~O@nXjF^Dzq3EzaU!QKPs=KLXK{Jv4dv&1o%p|ot^d~V82%g{-K9anXT=a{9lO{ym}amFQPq6nXU z?IIuVj)J$BVE6-A&DVd=1;r*7FuW&R#xyHX{zN0MVIw5@F3ch?VJGnt>1P0~qiPTy z;O~mG_`P1EaNQUQXqq;`OWz~uu(&Q~GCBE1WHv}^W^G5wngc@mZ!G{Mea}Ck{ogF8 z3)p`q2HHG9ye49%W-9J}E7DWpoY>w)?S)?NgzKS=;}hYWuGx9{2K=qEJA?^EGA~jN;C+cDEQFN^g?M)H`nJMjaXhE7_uz9K(q7m|~;;$J2z- zeMd+Hz)B!9tT)7hi;@kA9-yF$3nD{si`weaZ8Qw17{rB!?rY7gXbK`R@YULI|7A0n zaNh!f?uiw|ACw|b_*?gje1ARNwMqIEyz66g`JCF}-s%{L7gfi50uXHh(&3Z$9*IpYXoi621L;t1K@6!fq+~Bpgm5)pL9(|JeCa z#&Xsu{<@H29TUv;FRKm;jrr#%>-4{#QvKc1!qy;)RU8Yzm`y;5XoJ{AGcAk>F4-xUZ&}nW1>*jbEI9dhDqEMwP6#YzO~- zarrM&Gn3b8l#X4Sex#O=B5Ik90^kJ9Ajf9_bM!y6y`*mRnVUh2LB3;3biS}nKl^JU zaxy8!)&GrF7QwV~MFND8-L!=%6Xz*SL$fB%LZEAZP58a;jNswcUNs9{0Ab49s8|eq zI@up%P_ONwyp-wC%p_0QP$XZK&cbN{B!(&tRfur1`q`z9i7~M*@giU{q6ZC z!qr}Wgzj52K-Rq#H9c2*ZgEk-4y3uBUT6U`;dqyfr5_J=D_}Y-m231hJ5l?={HDnq zStty6tpAslILfv+z5~2}gYT^0(%A7q;|13;DG0W$h0V%})J??3=YSGkF z0}osiwaK;Z{5hhmkvRxT^nIJY2{xNIYLzbSp5MyL*-@60DfULNGQxT!6<*Zdi~RE z3eoUuT>HPR97*h-W7tNQ|Hp#GzAlKg#&?UuRc1=E`X%X0Ew#DKuY4$>jxO&gICOst5L8z8QvPDy%V74Uq8ROr3M>PCDfgyS10+X419_$h1Vs$#+K11l+6;j65;?w? zHsJh^NV_Tt5J5e#t_*#!InCOnwodo4X9_h^^+=2Nw6=?h>uYapup&Yxq=!7I0sC&O zAmak`<K;g| zj+8Say1}8%{OgnHJ$EiX7WnU_2@W*+=l@kZwUaP^6o7kct>H2RtxOc1R$c?3z71U5 zL~cy(A@I|X)R;u*7ZdrMudItRIp}}^)BO%29S1R(T?f?0Ge=8s;p0V8887|JjjpAG z08HK*Tb6uO7(>zAwl*TlXp}XdLXQo%KCklW5(Hk4jUU_o(;6DTQ-*#jPfwt(k*ic; z!UdMu;a%fyUJ?5iZ^**HQpERcG#Y245i&NeVLib09wr z!sd1_Rme+3o_e9EM-hVql);ohy>ha`ER5RysJetdC9TMGV}jt*c#6NQZ~ZKsTG%(``7RK#f*N zTDve^I&gXGcovg<9c;D>wU{&&B%Jl?urmNiE4`NB0{86qaW`Lneuz7sV_ zW*or4L8&38_b;@|a7C>Hj;zYf0gE)^AFR%Igq2srT!3+$)>Ew!Q-bf=y>i{7G{6q@ z$OYT*`F;eY03_*|s6%;t*~t8BTBc&alr7?t+!aZK?D?ZNXOr|$LUlNY%?>t&G-W*R zeV%zq0dk4eT3g{X#u(5urQK>lhl2VYiJaws zFa)RyP*e3y(-r1Qjyw+lwSsSch@Tk5q9sZ(3;Gkq7A#W~S zks@ixw~L+=y|M`a3i$mG9b1_m(DZ=>v|w+!#D6m)d}oB{-wyAY2_Ja|-|-;ubJi() zbOiC$4Bct3%DpDQ1;pOe3>pYh!hp^pfsxVoePW1`sEv7h0y*(0J{^W_z@@KXiQS%V z{DwN|D47I`FR;{Y85!T3b@7s6z6YqytvsH?I;*T7t?|FubwfQnpvLL}+zWt#^zkR< zI=`PhTN4lwarF7~H0{OTp8*Jub*gDxUCNoyX zObs?_Tk!=_vjp5gJ{Xzmf80)I$$`^h&|`k1zZgV1ZhZ5OOi^!DqkPN#?b zS?3+_=6g$^Jz9}?U~KG{*jR)&BN-$bO2Ho?z1K(UKE0hDdS{(u$t)}JEDvv9ob4Vy z<(=)Fb6Ku+`xzK<6&YDsFHFfVuUaYVMp{4}ka|I21%R@<8`o~gUtq%8`;fN%uZ?0EezVJC}79J-snKSu)?F$8LYUzaG)+S)i`V_IYFrlq-xRH5^6sep&Y-l{bXL z7DG#<6hAz~2<*4qSkeiZA6By=~E1VlU zi&0YYf+c-FVh3PkSu*+k?c_4V~Ewq@jw`lUPDiZo~eVTE9hm@f2-QXAPk zO-bX+IgyG)Si&v=ZW((kxH4p9U z=_s8T2YWF?JsRO|sJTXG&SFKP`Q8z%PFN1EWIrdImzXzS?1ooCHxeA2C=+q-T+vP< zQNFj|H!HQqGek2Ur@9&(?h0?YflzzBPbgywudYSL*NHSpPKty)OU0}wfnYdZfObqH zLQrP{&|Ra(Q?7DtxoT;gCPuo9m-9f0loYpH!*k9zL|8V96vkIe{rRzRXK9~Bq^6=W zc>LN}Nn_VK++uj6dz_x!ySk@i4-+!&s#iJgh%WB=d*WPr)<}bjAKQaj9(ZWQE!H)2 z6zLJbiw2v^BW}Hj~}l$Z7cSgOqb4vzU_%Gl)vDQXf6>ZHij!$i`9WaX^O9 zYexgdcE_G*R=9d-ksOwnCzH0?Ub{4VyJWrV#{}|hGyd6!%M;0j*{Unk`5`W;Fp%Jc zMdg!ue6^ve9u`8dz=Q#Eg6Y_jY?;lUk)Fhx9`dd$K}vK+*f(Dh8!R}OL~AW+)k=9z zfgo^4ulp%q;IfNW@TT}Akp{bsgyX=V*VfXLGc*CKexG!XlXz;(QmPdi`2x<(k@{Ue z-P=1pzgw8kY>#1OS<|C~d9=2J;X0bL%^uP;Powk^;ZagIHc6|71E*+XJ3Bku^=$h{ zQDjG%tDJ4Zj9OzCj$(eiV_M34^WFZ+rpoU>engoT%}$1&4IJ*T5{XgawR&O-om z&IAoE7N>PId2(0xGE55k$_l6Nk zUyxHa*wkF;#g8g>*Af}0JK(b)%~x*gxkX&~f=(C+O#D!w+iaN)?%qqyXAbo8OQ^96 zlhtW&x<8{;;WFP*>nj;FzvuP*$=X00?@h}hbL@^RgYu1?1NLxQ=Npp4y6bv7zsK2dZ~w5Qk$WmQ zK`1*KhweihZcbIzPE@)2=z#d0Pc!lE(+3cv^fdG|8r&IA(!EP*Jm13ZBYUS6oe-n z^RKV>;`?!L-k9I6>U~R1v6bhe%$FjgdTi$?Nvg*_=1~Xjhr;Bqq}<4eoj;=_B3JTx zwWv`UlIwJI@ct47q2RtbYZIN>?gw}Y$fpW@>?YpWI~k7Bqcy8TFw!+wp5tMNtIb51y~Hp3U)lyxy6*kc_m%CNO<*1FiPFA0P-I zDdF#`LCjcGhllj{`Hnh3+*T#d^3x>VFiGEn}t0rP#4f%J65YD|jiwO5liMvSBhg>y5pYxlOx5K+29KO1Z z#dE}OD%}@+B3VRc7cTpuq30@z3l;V+N1Y;^=xQ`F*U6gkSC`txPV&_ZwRR#RdtGn$ z9(EKlL>ut;56Z`6c=R|U3W(Kg@MCan&9B$bQ=NDmMUcOW0rVl@+Bm$6D#9Skt^ff-{)VCX`QohOh5Z+YE1C&JlyA z&{uOTFN-<9NJ-F3uKk{8Kg$kc6*n!NJATU~k?a35&l?5%AsCE%)cAWOc?ceh@OXCg z#bJCTQ6)F>4up(A|L3Km4!(Ed;kzcPC7prg*Sxl077tV%3iP##$uRCo3U2L%FTYlDjXQQ2!=mG z$0&&mm3W6Q0?sOUHCK!Caky&Few>M-pooW0ZQWGZ`F=j#9w~7hdBpdlGrPR0j$%EX z#q3rreN5^-;)jatLY3K=s~CmKxeD}?QclC$c!?aSFGu||^2x5jk?282DcJ8J;iRkK zoohb(DVG}oh|Is=70^KibYfUJsI9nexf{>Cqo5@_SVlV792C0QY7VrQHkT@X(Qor@ z`Ci?v7nnfDB_9r@2-8U7uo~;8H8T_UE#ew|a9`~WtKYjVGBkHW`1Pu^66-UpC9Wc5 zS+4dYhn}F9gL<*MMvOO(lyZ^nzUIMlr#;jZ(LJjeC~-N(PvYCeBe6aza}bqrPc9di zd`!#oEsvG`X_VV8liJXVwsxDx_6|tKLND6tlO?N7o9off)s?O2MK7aSbXkmG0$2L{ z4D9oSPo%oJrM*8QXjPaUe~qUcBx?T7jXeDhfW7VS3Qy*GV(6eP6*iXXT;cr%zMZ_^ zRGJIa$-WmDOJzQ!Uno z0U4qdEH3_|)|dZRHR+ud8L@!nr-0#V5l{f9)@$??$`~QrDAWM&s~!IRF6!9_3p9Sd z!9<1tTiOCCg@}iGa%dkVnEAON41WqyeEz?0UC{Sm9$Cpp{C(Qkg!K5GOB9~M4Euw6OxZ~xCtO4f zQUayL!_3(>2(`otefeK5c-c|p5~D@Ix*`$Kapa?F*UoWf>PpJ(p1yDZg(yf@+2yoe zKk^I`8G)xZQ?IA@t5T12%jDLh2KUd)eSKQf+~Y_HwIp)hyD{b1cB7n6GV*TgIm}85 za&k2d1Mh#jY>Ba=ILP!GAduFU@Ijh=M{kYM(dB*CAN-&4WqX?PtMWUGsW0XzF9lPX zWk23qfkpBtp|6_BVHv%CTGMRyc41_}m!ydW=^V|rptk2ugogB>=0Nkk|6#23;Ep(U z&nf-L(S`CdyB6VfF|VQ=1g1?ZoaNUH0vD#(Dp^LLR0mFzk4aQNE{s4*g25Q>GCdp8 zh-4+kptfugO(G6PIveC-Pc%yOk5aL|b9!$Cit^3WVDNItc}{md02 z;RPIx6Jy}9%kl-B5Ihgi1C_?xKE%G0cPC#^x@W7o`_fUTloOW@cNT248TKaGrCW`C z@em^?Ozn!U+o>t^crx2c>+R;KWfRg8?}29&&<;iSDI2d4#rJZfQ;)b8hW->d+Pe+m z(VGR(#?wl;Pt2GV=b{=cmg|wiKDmjis&-6A=EMW%BEp%`33{isHVtv$S@-}B7OI<0beIo2p`_xrWyg0&7H>@*t5U(Y>vy>HW^78m4)blg zAB4PesTgT>7Vp1O(ThJFFDq$^WgK z*fb%Wxg z{bCU^@U{ZU5{~DA{d{`mJ5gg4q`9eNVz83QuX1`>o$n7MufgD7KaFK)mR$&xIj9wp zC|8gf+MUPuqrB-;*p^!z99`PYm%W_~*tO5ZUy?+oIG+kJ8=Xm2T0HhLck^5s!C-9I zM>nwqDL4I4IpsbS<{bgUZhz7hk28Y1IEP~eDY*=8#hCv>vieFcC-_Ex>JZ;Ob95!jdtl$8{j`cKI>Z=({OpHR*qK#R&=hZ zo*UUI0AG*S8)bB()Enddo^n;O(2+hE9K|HLRUXEvLd(Z%s&afewW(CR5K@s=7a7V? z+K008Ms>0oZ5RaZophwXIZFca>^fljyN`i{e+N}R;^+zT%=Hrf0irx|p@#Ci;mgg8 zp6L9#WZxr~Y%aLSl;(3>r}OSzBO)#M_rj+S+rqkM4cq<|JQwEOvq}q(==>axTa3=z zdy_|I_n5ZdAxB-ALN1~Le`8|mA6n-6cP~coi;X4_?7KjI-c8cQ(JTV*DR_7=h`C3H zdr8E@Zi}*Hk!SbW=;myS+C7o?s?H+nk(~Ha7 z9&IdzH0`uy-YyCJSBoq@SLN~PYL);WMMq;<9V4T;;~H?7FKb!s?=l90JBd$nIB zhB_@Q@Ql8AkA;}7<9jz)Q$LRx?E-2!C;d8?9Q+rY-T}Ezv1YtTVz1HY4YKi z!+xkTPcJwMXOKrmMNSj3uYgXjGDX{*GcpneNg)(>tnI4bHuX>S;en+Am3lVGqf z``>B4sbkU^g!>2fCx`+kH*~-Pb1kw0*0;LZM3b~7I;O%~RK=Op9N{RB-`|cGJr9X4 z-ntM*VrSh-kiF5ZSkt88@*|teU?3-zs_{;LCV_SV}6%(C*s8h%tqFgUwv z7Nv&6cH%&RC~D-m$5s7d*1pz%Y=`Qe)^WAFKpr70_TZa24?Wt$_F^4Z&ccg(!9Mi^ zZd`-Q5cv>Hh@E!k=Ra*88zv;YP7`M}`o9Yc=}3PQiLH7CY3yRd zU5Ca(nxuXBFUeyq2geNX?iM1^QUjCarxCeYVu9(qa&A;Xe1tSTfHza;7xn06J{rwM zDE5+yL8k;;x#@?z&KZK}?nWXO==8VFZ7Ens@N?04UK)DW^OLF~ z?zqGsRAoid42FZq1L%blu+0JqhM_t$S}Z)a-=LbPooaVHn!x8)60xT1+?z^jgGQ=w=M;02lq2i~hWENwc28Ma__A=iNUvA55LArHD>u40d+9Kf6 ztKBkfFT$$+)jy|+na>6cD$+I~usd2o+*f^*OrOy5kEw}}zppvy)9QujH>RGsWtJZ( z+10;@{+hfBJ0V@fMz|FNVb7A+^|4v4i-z8yx#5zUX9ARu-sJE0k#k5NWpEKs?Y--Q zNGmb&AnAr7eb{8NO9Po3fyH4$zyyMjA*G%Vlg~Dc|F_6Yvv?TpL)qNYsCYHbjGjff zxfzRJ--L3J=tH0|46+CtZ8UqoIES#b)6|FL<*%BnDO`8`6^~6kcxqO!Lk7Tup}S1n zTNWmirlxu97UsfR4S!h1U=mHNQ5zknvc^R#(=`S?qktA|N#EC9k{!b-@f#Z*LczLf zmiIG02}PUNAf0^?_xQB0TdV{Y%As~3{$BLXv(J(uLj-GNNBK@`4=7_3nVtH)@Ja3h zo^MX-m8O*peGfF^$J>&0^!*rEV6N+DOp*_%m)wr)P%lrexKu4+@3Np8Q(cY2PKc7R z(N8u8PrU?p1Mj+3?gkB3E@8%EX(bj?i#NU75;MZ!QMF7Qn;LScpQ5TPD|NZAy+$XD zT66<5xBcsMx^}K)S4n!%1=f;BzO105NUr!IAdtlcL1dl>rb&|6QLk7JK6Q~v+)PJ1W0h8J#YIB15p){FQGQE98`y=kf+qtjtxCye@p(wv=o!1fM z(*Ig8%wro1xOcATIO=c_xnxg?HMF0wF*;wfsWw7 zPW&;K(2VqfUc3o~r!1MyIll#z&0^Wn=VfNUhn*{(+@B1h-x1%V;V_daIn$mK zy0*B6!S3dzq{~PC;4vWR?knPOOeGA3oWz*}6HXg@i*kGk* zSbFim!;xCGmLExN?7|&GjmI9Fze-(9Nt>+a3AxI&KBx8V>`18GHd5R$TO=3>>B!?7W~WEg0%+`I!gA*L{@R)%kax{;6sKp}ES7DKsK86>ZPV zf9Y;>pvk;&M#d58eHHHB*DH6DDu>#W`JpZa=mrxr)0rZx$_6)2P5p_V;S4CBo63Bt zKS%U|LT6f84Bg{W{S#)qcw`r-x%d1!8vp)i@+a3!$+=p5?Z(tFqjJ%SMYFCP+htPsX5}zA-PBH3@XObV^vH=& z7>JyUM&fC!oPO89Rt9ch6dI_@E>t_|Np*S3t5t|U=d2Tqm+O?PYwwb&IK}tP4M*QI`ni_3bxJX|{zZ!1iy68(QnZk9?XBZ6t3^YK=%;IsjmZ!zLj2H)+>!xV~wiDy~Yany#&n2eZf3D^ww zF{zq3nDrDrmEyhjSb)@F2}6Hf`M{TLe1Ts`zuWwBFyFtISu8PO`4Wa_X>hviA#-qg zPj!79&LHjt*)3yPYV)h6A2d_;P0gFaWoW{V{_{Y=D%p0P)W{3(;CM>gZnHF8Srxn7xU&Lzcb$jLi(Uej~ndzR(+ zdiG&61O&HIvtJGQB1>@~4Y`(}3hsauQ_=qgUGJ+k3{$ZtL9sq*>P+nTiMk#zs+fcprs5RiflwYaq@g zFSD(=_`pIU_*g;mY1cp6ob|yWoS}PVzNN0k54XI;UtfUMO3c)mkau!Yr?RXcBUmrx ze}EEyd_CeMm$BiJ^nc^VDmm!=7H0I@=vi)|Vs1G^3Fq`zMSCz9?`OUqakXjn>Mvg& zH>?s=GX%(pHsxkt?z`bDVZRb>Yg8UbP74+sdsVggi(fc*_X3BDRlBGj$tSSVgSD&L z&eV(*j`mXQqG_P|6#fqk+G0OY58|=@PQUrThhj)(eYrnG9?V`K9+vD(YL~vd^OUUL ztHM0N39XLS+Qmz3wbf?(V6VDpW++E>{nRV1CVCNvrJx+TnNj6s)ips+SUx@coE!$NRJTb=dWZWBFmxpNa z2_M7T$0vBLaVwi#W%<2dlDY0h=D`$L_w zMkt>gnNlna&E>Df@iw{5P|8F1zL3G?sp5xfJGMW^>kLgGt%CQp<2y8t0}WMQr&-m& z#Lt}c;waaSU9l9XIdw0du?4kyQt-xG?tzb71&SWFNY6FhwhXw9&=cugCrm$c(Hx5c zo}bKy5&n)2pGg4^N!N*^r?GXX?PKm1N;;=};>Ha}C-~H>1x9PKTZ2uGVK3n`DK_s< z?KTbuZ+tR9a$p8Ez|(01_ZLpK+#F@$$|@816g|Hrh%W*{v@qikf23R>l8nw^NNBI*-q z`u7cFipeZC(a2DA8xx?!ZMbo~8U$`_)dF5Gp_Gu6%9H)`F_qJi*4^56*{>MRd8c!P z!)LC+q;#tvBT~dW-OYNv(RMM;^qp6hj zb@_Xb_P-pxZq~Qmmmm2a43)T%#xqyp?K`_Sn4pvJx%3C!ywGCEAKI=C7^Y<@4H1G8 zN{ItK2xLz)P3!~d9$SQ#*mF`agtQqUgR!Q1VDncYy^rrTS}}V`JkogHlQ*skqU}!*o<;TiE#ggK+|RaIpq3#D@&~<) zyXriV6Vv8+wms#Q2DEniDkksiH0E66#yb44#IaHiHA{OwR3H(2KmT6mlX`X4oMY0i zqLE*_h@Auu_VyP{C#g0^a^COB6*%4>r0B?umeEM`*nuL&jp}}|2|h~UyD3YfDXc*4 z&X4mPw`b6U3-8@NTg6NoN7JX<;n68&4{B{#KSaj#zu<&YvCPl=FVFP>2I=N5hniUX zk)NeN_{A3=kXU@VzQ&F0w#@uR>&<5U*3%5|*`IKIzXyhxX^}JpoYY<7e zFn;`$1xh?zXl#U1AHm#ukqt$GrnJGw+ad5gIUgvk*RFAjf-)mssQy}Ipi4Q6gV7}h zUqC~LYgXb({6R<3ybUvQ>qXot3=Nd5jj z_9$>D>X>3E&vkT#Fc^4K+P>%aiz;CXo~vdq8uXjSs!}&%Hi#mP$9xy_ zo_s?mVix?rD_t=32?6vVE=^Gty@(k{-UEN6$M+dV9Tj5;$Q>jpo^{{KtUqmr_8<=r zg%JoO>sli}lUzFut`U!7)A%Fk4u+Ee;)2omN|nX+lf88Hh`vipCd6klewQmEe`h;LX~eSyP`AC) z_?Y*}wXQP$c-DaLY`RD!O*t)mGp3)3-V8=R0{P`A9!w_m>js;ipf0Lz;N9!a`X@_c z2CN$c!spK;Y!+xhd9ypRt6dvxbnio9I)y3{D*2$sE|SJ~)jd3p=@4 z=4vDL`p%fdIRm6BtIdk$o7V3H^Plp&dT-NCkb=2=y>k*11Ch-TTWi935zNB1nprC) zb<#9y?83!rCls@O&-c`k8J#2mIdQ>15ah8~Xt2jCql&3GddjOGf5av2dU=9y7NtaP zt08$duUH^ATE1r7vct++`kr8m=b`tO;gE4FWf0MWPpWZT?5G7D{qyr$gCxv-t`m>E ze}~TO%HiVb5R%nVHI_^~vB7I%H}P8UwY&MNdUf{Ku1S+4IbU#q)72(mMBz8H|d{}0G z@mgMlb%a_jrb*a29S&r4a8)kJ>5E^+tNRS5F*Qcr>WKCiB_(3>$@&azaKLS!Gi z7NCZJ7)jy{ZqCHuNPJS|Go**`UDvnvObf?R1wVgQ7`vfMuWU3>4pl#`UW6I{z^@We z9Y(9}J3Eqk$7H)-4Crg%%#kM8e>XWWb6Z8qr&N6_et@HHDJA)kTkcurNLNzZJNf6R zafL*ecs0=Z8I6bEs1MGhixz(ss_5WJ_@_#3)%ZmxLRY<75VaL&KZ{EU=e#*Q~ilpBhRi`(uut>K^d z>FGr4a?+80^vXlt_~R&vKh8!!*wCH|GoHm!!nTKFQz4{r=J@dux3+ra?SvYWFIz;O z^49~&NY%gmUmc!q4iDV@KEGrMrcjIYpYqp{{^omx#^Y3#M8*|WYp*Dug@Lpf>V!&& zgdgj_(y=V}_w`|sX+qN}<={+EzPwrz!&I?k@L+DzixS$*np=|h4o$YJv|Hdc*sgq_ zr-)Z_WW|qK3j#||@t>xQYX7KVUQ1^zmN7A8xZW&JuK^+l`aqR9DvvIjQ@1b#dK3b>_l_(2%& z)g_K?xjAplmC)%MvVSF0#8 zifI;_*hP)gAwLz&9bcM`JKfWK9Jpu+1^=}t^_@t{W6!iu@+pwr(DyZ8yco5V4Q?v? zg<(AL*4TLA2)LO1VI{LmI?e&F)~!~LRpY<>I^c0lJ6sVIH=_6J{AkY3>-MZm*%Q!U zq?RAJFAG(ntE=O@0k84*9`r%r)r(FZYm}*+Zu+6ye*}6u9Fq`6w zo@guX=HDkdcseR|Kh#0QKiwko%)?d4nTGqdBfX^WTR%;`?`1r) zb|C6D+tA2;cRlvdwVlqUvv+9ou#P&zpD07+OQ~^L6g4O34PKSkays=6`i{rrrU!KW zM~B|nqU=+_kapZ@GY)v&;+mgNWH*a7*sqo}881oLY!7G-V@VYF;6vjXi8uT2J4@xp z=gyCv^K5Ny;k3Blw9y;LDMS)bt#rK4XCfwT?Rs^f{FE76LA@8*qd?DL;pulK0y3ML zGDPs_1}(XfSZSi)Z^}N=f?e-?c31){QbbvT3>5=Yx|2kZ<j z`?IUoWjj{q1EsaqhscPMKxuy3ZOhIC`5jfZq` zk)^BQym+zB3Xx_mH%49v3K@oX;(Dy=Vznc_6>WkYFW|+HmHpdtmn|Co8Nc2308k)# zKD{`eaAR2U!;iHTC46KxKTuW+J&A6YzHvF=!0OPeu|fyLO|(6n5z+|{KM-}yQ3>Rs zjg$9l2BrvSh5QkaCV0=Rk9^f*Y2~p15ba8FzHt*sJn^?57ot905SmSoLMA&J0|TuO zk<1TUnC}_f=e>I@?aqSTA_u>etBbtqA7QM*BO370DQkFr&g3wmq9SQrs!`LqtN!53 zF~{=N9*w`FcM(AJd?wwTpfwgj-Ar=6m3EV564h;$PG)ec!tibW6ioH2p|w5arR$`D zMtql!9GX8GCW{D)4Gr-OjQlcdZ*wEW(Dn5ABBC1zdIlOeym4|l)ve(hKd<}g+boqh z#B|Vgs1F=){lc;PB__uzoD3v;ADNFW8#*+TDtyRNN(1c3r~;pUOu;< z{&D)P4`N+=FQ|}Ac>J~?A3dn#PJcaIfRuI~^S{`7%b>WrU~LqaKyU(s2PgPo0fGhy z?(R0Y21{_)fdq%(4#C~sHMqOG2ba6wQ}z8gIk(oYsi~S-wfBk#Fgv-@=D>U`x9%pGS&bbN9Y@+q-dv92!!Wy*{R8!p>3b}zrk z?az%r*X4yd$BIALwTwzrv>m}i@YTJ{!T!Bw*Cma=U?0VPmmE0bRL53vht{(eroE63 zoM}J@&?d+8FvHWwbSk8uBCpt9(nSP?4urm5QwzS>B&0bbwnV}~QW!J|np>)~VmQt;RYtQx?W1CkOwI z=RmA*J0HLJia3NNM%f@{80)_YI6rjk3~L}>{nnmgnl92)^VJ%Z3e!gTc~2#8C3(mlxZEawj;gkqCqAMifXjXqyIETh1&hA_r2iI>buvc(IZXw9fY>A z!M^qt|+OSmu8>g){=Ho57BO8pw+RT^viA7Y>)cF>d@`~1znbx!brT@akUdaMk z9cb}fS&sBhc!P(t5Ot5t38slBzYDhO885wHVPDkgk0zwV4|O@-V=<7J`%j<$9~a$<}@Q(h_O;jcDp&Un$|Z-QFIZ zRJ|L>)@t@{-nYLVXtS8kRIfZ(YO-aO&lnZi3a%BCBB@nND4nO6P3F%>U$8@XMe$ek zk?^EYFQn-49F)AEL7^w*_m;LvFVy+0!H_`k9nHT*qkM-73?@PNRB!v|T@$cOrLZ@%m z?zTVDtk#>@yglZ&&J|AXkheIwmV9zCCE}ZfN~Fpuc8#G7q0x8S%b-peb;TbH+J#Yg z(7spHsYw;GiR#`>}ZRw*v$3Mp04k|I1aI9m}cRzUh1Q-mtn1?;S zq8$su_K3kU>VI9MS|H*jc)K>>^^uo{Jsvz2A)vJ@5w(Li-M79QnIdOLul1Y5_#10a z@1oC#4ng(Og%1d__nbOE6cHh=$IGnO0w}_Yn$CAW(?d6?le!AwC+p;Jffcoohe+yT zHlokM4UHt4?HU(Z>6Q3p#Kdpx?Q=c-P3Pg$E<51@w}g_Jy-df)cDa=4-gQ{LRzBrQ z1voW?5)@qqMI__M6211%^PjHBHlA+ImZVUGj@%h+K1Wg}bVoDabOdIx$eWBXx>(fN zEHUPvv|R)!RR`aGxi^!sDZZou3Sk0g9!iuwj}70e-Qil;R)3_=qRRkH-gQ6p1Qjh! zwptSd?8UBxd~_GrfdnUl>E%W(O==h-AJGCOw8vwe`aoPFKa*;VI3cgZYeN3akuSq} z>nzTkS(OkT;P63zHAz~2ai%FG9$O0u9M znm9sI+WGgam{Q`}p6diw-(evm3q@&Uehfb#S?<5BrH(d-`_F%H=={|9Mzw!SU2Eb_ zqlUjD&5rNsQGtEkiMWmc{Mul`!~%yqZ|nzyHysFZ#stjzQ$707Jx)H>WZfj_UkeuD z5oS4#zF;nHg}fwi-p9fEr6K?Ui80<$k@4ADWfA@|I$*xN=4-N-x5B_&DZ>$HHZ&c? zf+2}Oi^2rNVZ+v1erc7#ALu{#b!F2W_0Z~Q6Y(QzMb3#+9FMxS;TSL#wO(zT+%{|n z<edl{6Pl7L`SfHYv0EoQ_!%n}-IgkVarSOQNTlC@H>;3b#BACgdKcEoAJ_SPI4PBC{lI+u4K=~-^1CCdG_as zw5Ox9cZO$e-Nw(KF4rZMDEI%vbTp%QAP>e$+&wOm_2pw}+TZZ5cL+7zxvaW2O|1w|3(dZQM5#8m(LtKt*`AD=QbrP1Zd{O&dg zEm5qIA^@UD6>^J{@D~Dd6;3u6f-6M*Y_|IY`5pO5Kck-t0S)2RY>qGlE#l~a*za{J zH*YiB&)(;Q5RWtwLSVvioN=2oZAk(PbMcbQXZHF`bOZjc7g4ZUjGB=#?)RR4M}22_<>KWMs8oZXR8hGi66>P-MM6p>fG( zj$B6|U-T`Uh?w_}AG+IE2{=m?LI;*YNlkQx0RBS^VABSzPL=Wlx2=XjmfCuDWJuc3 zN+kq^Hy@KGY{N#KTO>F&WRt7X?k+uD0kuUSVdhoDi@`-ijvuz|&c*W!eW}oa;l-%J z)7jKiGy++JWwu#(^xLk2$5>hgTp~jEiXO=R`e_0L6R(9v#utL;N`)r^+BLbT`m0&( zn$iG0)zit*N#stTz-u>b`@71sZuXO0_Jx&GEv<{8e)3I=nr#~EN@npw8DL7Ss7idPLJgzk#MFZHEr4r4X z41u_?A*r%8j)1pA6`w4{q-~)xr9WyyEf`EaQUKK0ZYr#{fyq8omR*l9Cknbs4ogTH zI^lho@p{?;LL6G=wPsq^IAo-cC4@(RjCk$7TfjQ#=oDYwp;?!BKVC%(aJ*k`8SH=R zY)WzQ@H&fa?#3vzVUi03wX_s}JI+!P{iKTdX2JX7@280Q#_sL>JLI+ci4w1}_g6u_@X` zDpSm<-WG-AHiQxOPBy!*v9Vr0*$Vs@f7*UUE-!zA4Hfw07)ZZTfm;vU$6Ru6sh`8% z&fPaU@g_YLO%>dReL+poIyPOQ9zq$yVxq{QX8MHA?|SU!8~65b2Cs?TqZ$*<&mjDx z+sX1|XQ1&M-fJ4K2MB|V?|omt%XGb4h%wv($yGDCC!LrFgYUDioCXyTp+0{NLYvOl zgQMPPaCf$*(oI2e-|uYWO-GE-*cymd*?bOgXLWmf60}%byr^YdxA@ah%y-x#augo0 zy#v&G>L`k_zBDU~*ONkRW4!fM$NB4LJSy+PAERNuTA{9F+2{p^NB|2et=|v%g^r&P zP`mZA&5aFwAbe$A?*L`G(w=98n1W*2=?x!`LpnfVB13I_uz%jV_|vuNBDaU`=p(l2 zzHMpNw5tEvdu3t2t`ysuMyDttw0CH;&SN0?Xp2P7_h|t$Gpg7w=V18m$r3oYeX4dJ z*=Z0VcY-Q~VK1u;qU}x9lV_afd6NxvLyYuOrFQ768H(7T{FpLBpzaf(9tG`(2SrZs zXMO0BG5PA*egfwnhyeLOq3a<`Ddru4`h2+&YCMF%c>x(u*14sL-KhJU zNlHon4`Kl)9WU*~wE=1r_+={c50ChGjhoxa#SiTVz@-Tr@~x?Xkm2RRPQnoD0Da8=P4GY z$vFUvY<(n3aV$PQvk^dBqw6E96S3u@W`N1rgLV&q92;0O3>q@F1ZN|Dj z94GSKC@~5%QR{MVqE^1**$A(4b?^?6>GC-9u>3L$fKjj{ARXkfE^j-@TU3v%OS~+Q z%b)YH+6;RHZ&m|Mw>l;vM?sH-0lu&X9KjfXY|^>ocU=5N_Ma~A-LY4)=36p67{(yS zGosmH#JlN7s*gMeTL*yY9{x$+3WwrH&hKbGz@Zx|TTx3~hvu7*DG3l>CQ6+cRe#65 z|5|VRg?rY1{=F{^QvXze1~R9OCfWu!jE23*-VuV=03YyA7>7ilZe05APo>(;_*}&r z5`Y+2uO^9_-c1PwOXom%0i;2(^bH>J!cTr@7?ykUvg4hZD0RgDisZ27>$qD29gim8br-`+d8`c7%@MC2srk)&e)d0@39kW4;9>jC&ib!^>PqJMJ zKU8s*$M5$#f{c+Kt!@|cIv-Da%< zS80~uXFuW$o_y#M$H6h-1>(ZOkZx6OyKzF1Ql{+s?s?SFAb<%TYy}9UG8kG;Fse|C zH@owlzhJ_B2JHbG>Mo0Cr?JlkDV;|^gi8T|XBPo^ER~maNK2E*Y3Gn@xkZT{CW)BG z4h5@~$jG76A5qgb0G{Z$39MOeF4s1c3X@Lc(}Uhmu*3s%XmxHvJOWHU06Sb&Hd zo;gx!Qow#+ovh5p$%Tq3PvWNuACQ^L12e2CRwke3QmkRTM}nu2a8;uMjh7Aa_TmFv zCmQvDDAEazNOw(LBVduEcnbiBB6g?v04o?Z=j_m0=6b@y{hxJUuNp*lj9E(25Y%TM@JL# z6%qq5_Q}U-Qu@zk({5Am!oW;zZZx!gSz56VT?@>ev=j%no_?Myz?zH6ELerdNRKbU zZlbwx>LJ97^x1#AKJYzL&UU@lLr=)0js&Sts{67a?qjAcsbR0(LAaR5iNPApaMUrv z#qHUwl{=4-BM7h%9R6$GlQsFAhd+&HLX{dO(qj8=(iY~cZ`sCD8!4QbM-;9iw;;SqKs(Uv z>}&+Xu2J&8Ur+}2F_;jH?wma*CS5ia+YTmI6aDi&v&ZC?{zK!w=AkF5o)2D!WXKYv z@HcTplJgJDQlg40n%&=~RCxAEuzTCJeTm#RInqAn=5sjz*mmb$27jH*<{iqc9@yvu z&TP9gOHcBs5<|K^fvPhTFOo_mqdbo#-wHICf$*Sa-U2}jr)hPYfFptvgUkD3pnwX= zHkHDJLyuO%wpgx+q8GUA5zTI3;ZiTNP8iy~IA6{DtQ9YfA2iQ;22yy&HcW1J-~x2O zv`v(mJQY6XoR-H!2<++o7M-gNN~8eEOD+!0JtD>z?7n7NKMGXRD-K6Qkp9D#*fV|h zd|}8CR0pO_igGYCmF5%I>4wQ7Axc2h*ERob-ewVs9!jO#(zFyii!jt@BJfN1xEB-8ry`i=)o_#g+${L|fM z)ODv=aAmWn#rf1AOefKhM=K{0;qs(Y^7vokn6Rr^(e=mH7{~4x`ol*bH~7)w=0AaY ziV|lVBQ)!Y8L-V!@Oap}-}$ED(@!y{N8hBQQ~;Xr%3rOwS;C+*Udmw;i>Z%KMiw6? z1J+Bny%2=IBS1EDy3Zd5IH9(Bsp3TRfGnO#S5xVwu9V8@G#*ro9%oJE~AF+M0)CHn*pGCrf+15o6$4U;6SFz_)ou; z9tkx}zVwmgdgZ6sUm(&Yo_a3KETo~IAdw^E1U0rosSPQFnOX5)L|*r!pDyAuL<*?+ zXzy{E^s-|y`epTq-V7|x#BSU_L56hOzT&qa*@YL0fB}SXx?HDwmL~P1W1rE=*jGk- zK0csUShtbX;QiO|yPU2kdNyS%JTV^p%W=el|N9(dQV&gup4Tey6oSKG+Z1o6;RT>X;U8bj9ic3;%HQfySKTYgfJ)!pQYm(} ze=)VWD(Iq}!%D~!ekDTz^>1`0xZ)YW;P>3723m&sc`bYq3nL83bDdtWocbLN;~BY8 z;^{M;BX>b(^Z``#jb{%)OimH zfDfOGwkEwVHEo`!Ul)sF($Q|vBb&&BJwN=mFjtpzNtn*h414EevVF8maaXnVk6x>5FJL&)8g{>{%?C(0rQiGgW|bJ`k5Ri++!z zo-ps``xJ%grfb1ntJY>(BUjac-dR%ljd3cOT|IQjOUVt(^3F{PB^y9&nxL&-Bwnj0ga_8oqvwns2}vv79Vq34VKUI=(nA zE`5*mJdL~cGj&@JGr)v9036S#fxxBbEP!Q?76{R<=3)!&=n2gd5U@*)e2#`Sa{ZaL zg$9efvU-eUEV2jOo;&y#O)sA&1#04_aZ04rh{4s7Fgc>Ue;@8~C3rVByR`EoRE z&U(5U5iE0n7YJvVQ>?TmNGg6GU9jFlD(I;^Us!Du0TYHj4kjOFS5g4#@v=3RD`GIJ zmk~*O>k<)1PE!dh1A-2!%Tsuuxg4{|582C6b`Z}qa0pM9LEWC0uv?+mLP(`uw|v%M z_xfD}cM5kYU6L}1k5&-BqS>hT`uz{TV#GtP$sDqXS}Bev(KCwLiP* z={}T1q45ei&d7(UUb_MQZb|mLfHBa#HhHkaOV7`vxgkA1qjp4%Jwq-9ci1uNC8he} zn84TJYG6}7ar^o|=cbn%kgd+qm?X!%WM@T3iEfd&w zWrHAZhVXrcJH$8xNe0&e)*vy$`=F#t=BLTVudL@6Us12wwC7^@;5;`i@lA`)!`RYd zJu7p}43>YUe{y*Tut$3qsxJ=&0}@)Pg8$+`5ZxVOIjwKrgb1^Vb2mHNF{DE1wTIVn z52L$1meS!l=mDH13J}MeOzp1JJ)YMa0m=!{M+r=@eA~TU7EC_j-=i6tJZs zWE6q-O9dKRM?n}Z!$JJ3jtLB-a0DVRV3QIE4TLr}1Y zWOf3*PfgXt7{H-}<84Y}kwNVLK}w&bpx$Xxc$K{*x~Jb3&U>Y?d3V8)ZC_R9Y?kPt z)BIg!e`{RncsluNQ(wUIE^y29ffq#>TQV;nEiDQ~_;l3?>-cq7jt)NTWH8AnjIxs! zd`6!?ycM~QFLQ*FaOv5^5~*1njSaUA3B&$d1U;1+!S2M}|m*yK7>@#(A$Zq{u0Pa^G%FTodHKjJzM zd(`tAQPks~UQ=x>fRb6*r2sW!F76&}XrEL?VXxM*YB^j!0D)hhU?H9Er*FDNkdsQ4iELlnFrbhB2PfM5xB$r{0V8-sSU8IgeAv}j|3Fj^VeWa{vJljubV{L5~A3t2zl zPH{hsQk==lVkryqZo8@;+V9GJ)nSJW9ofJG&qt4{Z^w#BH_6!yD#H+q(}K#U9+K8eM#v!NVLmm8>PZs+T0GM4MK!%ypO zAPtb1;xBXL3t6d_+jt~pAq-WR9$c00zN!Bp*x2r&D%6=ePNfPk`jNdJdTrRvmpfb! zrf~$C>ub}TTC;c*%~pa*MTvV=oDY`Y2sG7I_NJbH_x)v!Jba~z(^D}ScTun=O!}F2 zAaQNXjg6CDbE(Brz}aGL1aX{t{k)Ig0QJ2=@R$YIN*KE$vrPI({q$r`Yq!SfRs`1U zyggN>v4OfK*LQxN5K6Kt(}2yc$s%^kX;p#62Ch=QX2(*^k&r+6rPkv${FPB)K$G8L zpRlU>$L4u7EZ`?XDpsa|-+IO2hVLCcoh86XSD#^m zI|#2je5R~YDaX*^ z&^15*lX#_co06F9~mq%EzE+GON%0AQ%Q%t9V`zF=- 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�U_X{)2@v`F-pu%+aT=ngWoLZhov?vry8f8tA;ZD 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