├── .github ├── FUNDING.yml ├── dependabot.yml └── workflows │ ├── azure.yml │ ├── ci.yml │ ├── codeql-analysis.yml │ ├── pr-build-container-images-comment-boot.yml │ ├── pr-build-container-images.yml │ ├── release.yml │ ├── snapshots.yml │ └── sonar.yml ├── .gitignore ├── .mvn └── wrapper │ ├── MavenWrapperDownloader.java │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── CODE_OF_CONDUCT.md ├── LICENSE ├── README.md ├── application ├── .dockerignore ├── LICENSE ├── README.md ├── docker-compose.yml ├── pom.xml └── src │ ├── main │ ├── assembly │ │ ├── assembly.xml │ │ └── native-assembly.xml │ ├── distribution │ │ ├── README │ │ ├── bin │ │ │ ├── standalone.bat │ │ │ └── standalone.sh │ │ └── config │ │ │ └── application.properties │ ├── docker │ │ ├── Dockerfile.jvm │ │ ├── Dockerfile.legacy-jar │ │ ├── Dockerfile.native │ │ └── Dockerfile.native-distroless │ ├── helm │ │ ├── .helmignore │ │ ├── Chart.yaml │ │ ├── README.md │ │ ├── templates │ │ │ ├── NOTES.txt │ │ │ ├── _helpers.tpl │ │ │ ├── db-secret.yaml │ │ │ ├── db.yaml │ │ │ ├── deployment.yaml │ │ │ ├── hpa.yaml │ │ │ ├── ingress.yaml │ │ │ ├── route.yaml │ │ │ ├── service.yaml │ │ │ └── tests │ │ │ │ └── test-connection.yaml │ │ └── values.yaml │ ├── java │ │ └── io │ │ │ └── github │ │ │ └── project │ │ │ └── openubl │ │ │ └── searchpe │ │ │ ├── dto │ │ │ ├── BasicUserDto.java │ │ │ ├── BasicUserPasswordChangeDto.java │ │ │ ├── ContribuyenteDto.java │ │ │ ├── ErrorDto.java │ │ │ ├── SearchResultDto.java │ │ │ └── VersionDto.java │ │ │ ├── events │ │ │ └── VersionEventManager.java │ │ │ ├── jobs │ │ │ ├── clean │ │ │ │ ├── DeleteVersionsCronJob.java │ │ │ │ ├── DeleteVersionsProgrammaticallyJob.java │ │ │ │ └── DeleteVersionsScheduler.java │ │ │ └── ingest │ │ │ │ ├── IngestDataCronJob.java │ │ │ │ ├── IngestDataProgrammaticallyJob.java │ │ │ │ └── IngestDataScheduler.java │ │ │ ├── mapper │ │ │ ├── BasicUserMapper.java │ │ │ ├── ContribuyenteMapper.java │ │ │ ├── SearchResultMapper.java │ │ │ └── VersionMapper.java │ │ │ ├── models │ │ │ ├── FilterBean.java │ │ │ ├── PageBean.java │ │ │ ├── SearchResultBean.java │ │ │ ├── SortBean.java │ │ │ ├── TipoPersona.java │ │ │ ├── VersionEvent.java │ │ │ └── jpa │ │ │ │ ├── ContribuyenteRepository.java │ │ │ │ ├── VersionRepository.java │ │ │ │ └── entity │ │ │ │ ├── BasicUserEntity.java │ │ │ │ ├── ContribuyenteEntity.java │ │ │ │ ├── ContribuyenteId.java │ │ │ │ ├── EstadoContribuyente.java │ │ │ │ ├── Status.java │ │ │ │ └── VersionEntity.java │ │ │ ├── resources │ │ │ ├── BasicUserResource.java │ │ │ ├── ContribuyenteResource.java │ │ │ ├── CurrentUserResource.java │ │ │ ├── FrontendResource.java │ │ │ ├── VersionResource.java │ │ │ ├── WhoAmIResource.java │ │ │ └── interceptors │ │ │ │ ├── AllowAdvancedSearch.java │ │ │ │ ├── AllowAdvancedSearchInterceptor.java │ │ │ │ ├── HTTPBasicAuthEnabled.java │ │ │ │ └── HTTPBasicAuthEnabledInterceptor.java │ │ │ ├── security │ │ │ ├── AuthSwitchServlet.java │ │ │ ├── DisabledAuthController.java │ │ │ ├── Permission.java │ │ │ ├── SignupServlet.java │ │ │ └── validators │ │ │ │ ├── ValidPermission.java │ │ │ │ └── ValidPermissionValidator.java │ │ │ ├── services │ │ │ ├── BasicUserService.java │ │ │ ├── FileService.java │ │ │ └── VersionService.java │ │ │ └── utils │ │ │ ├── DataHelper.java │ │ │ └── FileHelper.java │ ├── kubernetes │ │ ├── kubernetes.yml │ │ ├── minikube-pvc.yml │ │ └── minikube.yml │ ├── resources │ │ ├── META-INF │ │ │ ├── branding │ │ │ │ └── logo.png │ │ │ └── resources │ │ │ │ ├── .gitignore │ │ │ │ ├── assets │ │ │ │ ├── images │ │ │ │ │ ├── favicon.ico │ │ │ │ │ ├── img_avatar.svg │ │ │ │ │ ├── logo-2-lines.svg │ │ │ │ │ └── logo-navbar.svg │ │ │ │ └── patternfly │ │ │ │ │ ├── assets │ │ │ │ │ ├── fonts │ │ │ │ │ │ ├── RedHatDisplay │ │ │ │ │ │ │ ├── RedHatDisplay-Black.eot │ │ │ │ │ │ │ ├── RedHatDisplay-Black.woff │ │ │ │ │ │ │ ├── RedHatDisplay-Black.woff2 │ │ │ │ │ │ │ ├── RedHatDisplay-BlackItalic.eot │ │ │ │ │ │ │ ├── RedHatDisplay-BlackItalic.woff │ │ │ │ │ │ │ ├── RedHatDisplay-BlackItalic.woff2 │ │ │ │ │ │ │ ├── RedHatDisplay-Bold.eot │ │ │ │ │ │ │ ├── RedHatDisplay-Bold.woff │ │ │ │ │ │ │ ├── RedHatDisplay-Bold.woff2 │ │ │ │ │ │ │ ├── RedHatDisplay-BoldItalic.eot │ │ │ │ │ │ │ ├── RedHatDisplay-BoldItalic.woff │ │ │ │ │ │ │ ├── RedHatDisplay-BoldItalic.woff2 │ │ │ │ │ │ │ ├── RedHatDisplay-Italic.eot │ │ │ │ │ │ │ ├── RedHatDisplay-Italic.woff │ │ │ │ │ │ │ ├── RedHatDisplay-Italic.woff2 │ │ │ │ │ │ │ ├── RedHatDisplay-Medium.eot │ │ │ │ │ │ │ ├── RedHatDisplay-Medium.woff │ │ │ │ │ │ │ ├── RedHatDisplay-Medium.woff2 │ │ │ │ │ │ │ ├── RedHatDisplay-MediumItalic.eot │ │ │ │ │ │ │ ├── RedHatDisplay-MediumItalic.woff │ │ │ │ │ │ │ ├── RedHatDisplay-MediumItalic.woff2 │ │ │ │ │ │ │ ├── RedHatDisplay-Regular.eot │ │ │ │ │ │ │ ├── RedHatDisplay-Regular.woff │ │ │ │ │ │ │ └── RedHatDisplay-Regular.woff2 │ │ │ │ │ │ ├── RedHatText │ │ │ │ │ │ │ ├── RedHatText-Bold.eot │ │ │ │ │ │ │ ├── RedHatText-Bold.woff │ │ │ │ │ │ │ ├── RedHatText-Bold.woff2 │ │ │ │ │ │ │ ├── RedHatText-BoldItalic.eot │ │ │ │ │ │ │ ├── RedHatText-BoldItalic.woff │ │ │ │ │ │ │ ├── RedHatText-BoldItalic.woff2 │ │ │ │ │ │ │ ├── RedHatText-Italic.eot │ │ │ │ │ │ │ ├── RedHatText-Italic.woff │ │ │ │ │ │ │ ├── RedHatText-Italic.woff2 │ │ │ │ │ │ │ ├── RedHatText-Medium.eot │ │ │ │ │ │ │ ├── RedHatText-Medium.woff │ │ │ │ │ │ │ ├── RedHatText-Medium.woff2 │ │ │ │ │ │ │ ├── RedHatText-MediumItalic.eot │ │ │ │ │ │ │ ├── RedHatText-MediumItalic.woff │ │ │ │ │ │ │ ├── RedHatText-MediumItalic.woff2 │ │ │ │ │ │ │ ├── RedHatText-Regular.eot │ │ │ │ │ │ │ ├── RedHatText-Regular.woff │ │ │ │ │ │ │ └── RedHatText-Regular.woff2 │ │ │ │ │ │ ├── overpass-mono-webfont │ │ │ │ │ │ │ ├── example.html │ │ │ │ │ │ │ ├── overpass-mono-bold.eot │ │ │ │ │ │ │ ├── overpass-mono-bold.ttf │ │ │ │ │ │ │ ├── overpass-mono-bold.woff │ │ │ │ │ │ │ ├── overpass-mono-bold.woff2 │ │ │ │ │ │ │ ├── overpass-mono-light.eot │ │ │ │ │ │ │ ├── overpass-mono-light.ttf │ │ │ │ │ │ │ ├── overpass-mono-light.woff │ │ │ │ │ │ │ ├── overpass-mono-light.woff2 │ │ │ │ │ │ │ ├── overpass-mono-regular.eot │ │ │ │ │ │ │ ├── overpass-mono-regular.ttf │ │ │ │ │ │ │ ├── overpass-mono-regular.woff │ │ │ │ │ │ │ ├── overpass-mono-regular.woff2 │ │ │ │ │ │ │ ├── overpass-mono-semibold.eot │ │ │ │ │ │ │ ├── overpass-mono-semibold.ttf │ │ │ │ │ │ │ ├── overpass-mono-semibold.woff │ │ │ │ │ │ │ ├── overpass-mono-semibold.woff2 │ │ │ │ │ │ │ └── overpass-mono.css │ │ │ │ │ │ ├── overpass-webfont │ │ │ │ │ │ │ ├── example.html │ │ │ │ │ │ │ ├── overpass-bold-italic.eot │ │ │ │ │ │ │ ├── overpass-bold-italic.ttf │ │ │ │ │ │ │ ├── overpass-bold-italic.woff │ │ │ │ │ │ │ ├── overpass-bold-italic.woff2 │ │ │ │ │ │ │ ├── overpass-bold.eot │ │ │ │ │ │ │ ├── overpass-bold.ttf │ │ │ │ │ │ │ ├── overpass-bold.woff │ │ │ │ │ │ │ ├── overpass-bold.woff2 │ │ │ │ │ │ │ ├── overpass-extrabold-italic.eot │ │ │ │ │ │ │ ├── overpass-extrabold-italic.ttf │ │ │ │ │ │ │ ├── overpass-extrabold-italic.woff │ │ │ │ │ │ │ ├── overpass-extrabold-italic.woff2 │ │ │ │ │ │ │ ├── overpass-extrabold.eot │ │ │ │ │ │ │ ├── overpass-extrabold.ttf │ │ │ │ │ │ │ ├── overpass-extrabold.woff │ │ │ │ │ │ │ ├── overpass-extrabold.woff2 │ │ │ │ │ │ │ ├── overpass-extralight-italic.eot │ │ │ │ │ │ │ ├── overpass-extralight-italic.ttf │ │ │ │ │ │ │ ├── overpass-extralight-italic.woff │ │ │ │ │ │ │ ├── overpass-extralight-italic.woff2 │ │ │ │ │ │ │ ├── overpass-extralight.eot │ │ │ │ │ │ │ ├── overpass-extralight.ttf │ │ │ │ │ │ │ ├── overpass-extralight.woff │ │ │ │ │ │ │ ├── overpass-extralight.woff2 │ │ │ │ │ │ │ ├── overpass-heavy-italic.eot │ │ │ │ │ │ │ ├── overpass-heavy-italic.ttf │ │ │ │ │ │ │ ├── overpass-heavy-italic.woff │ │ │ │ │ │ │ ├── overpass-heavy-italic.woff2 │ │ │ │ │ │ │ ├── overpass-heavy.eot │ │ │ │ │ │ │ ├── overpass-heavy.ttf │ │ │ │ │ │ │ ├── overpass-heavy.woff │ │ │ │ │ │ │ ├── overpass-heavy.woff2 │ │ │ │ │ │ │ ├── overpass-italic.eot │ │ │ │ │ │ │ ├── overpass-italic.ttf │ │ │ │ │ │ │ ├── overpass-italic.woff │ │ │ │ │ │ │ ├── overpass-italic.woff2 │ │ │ │ │ │ │ ├── overpass-light-italic.eot │ │ │ │ │ │ │ ├── overpass-light-italic.ttf │ │ │ │ │ │ │ ├── overpass-light-italic.woff │ │ │ │ │ │ │ ├── overpass-light-italic.woff2 │ │ │ │ │ │ │ ├── overpass-light.eot │ │ │ │ │ │ │ ├── overpass-light.ttf │ │ │ │ │ │ │ ├── overpass-light.woff │ │ │ │ │ │ │ ├── overpass-light.woff2 │ │ │ │ │ │ │ ├── overpass-regular.eot │ │ │ │ │ │ │ ├── overpass-regular.ttf │ │ │ │ │ │ │ ├── overpass-regular.woff │ │ │ │ │ │ │ ├── overpass-regular.woff2 │ │ │ │ │ │ │ ├── overpass-semibold-italic.eot │ │ │ │ │ │ │ ├── overpass-semibold-italic.ttf │ │ │ │ │ │ │ ├── overpass-semibold-italic.woff │ │ │ │ │ │ │ ├── overpass-semibold-italic.woff2 │ │ │ │ │ │ │ ├── overpass-semibold.eot │ │ │ │ │ │ │ ├── overpass-semibold.ttf │ │ │ │ │ │ │ ├── overpass-semibold.woff │ │ │ │ │ │ │ ├── overpass-semibold.woff2 │ │ │ │ │ │ │ ├── overpass-thin-italic.eot │ │ │ │ │ │ │ ├── overpass-thin-italic.ttf │ │ │ │ │ │ │ ├── overpass-thin-italic.woff │ │ │ │ │ │ │ ├── overpass-thin-italic.woff2 │ │ │ │ │ │ │ ├── overpass-thin.eot │ │ │ │ │ │ │ ├── overpass-thin.ttf │ │ │ │ │ │ │ ├── overpass-thin.woff │ │ │ │ │ │ │ ├── overpass-thin.woff2 │ │ │ │ │ │ │ └── overpass.css │ │ │ │ │ │ └── webfonts │ │ │ │ │ │ │ ├── fa-solid-900.eot │ │ │ │ │ │ │ ├── fa-solid-900.svg │ │ │ │ │ │ │ ├── fa-solid-900.ttf │ │ │ │ │ │ │ ├── fa-solid-900.woff │ │ │ │ │ │ │ └── fa-solid-900.woff2 │ │ │ │ │ ├── icons │ │ │ │ │ │ └── fontawesome.css │ │ │ │ │ ├── images │ │ │ │ │ │ ├── FuseConnector_Icons_AzureServices.png │ │ │ │ │ │ ├── FuseConnector_Icons_REST.png │ │ │ │ │ │ ├── PF-Masthead-Logo.svg │ │ │ │ │ │ ├── activemq-core_200x150.png │ │ │ │ │ │ ├── background-filter.svg │ │ │ │ │ │ ├── camel-avro_200x150.png │ │ │ │ │ │ ├── camel-dropbox_200x150.png │ │ │ │ │ │ ├── camel-infinispan_200x150.png │ │ │ │ │ │ ├── camel-saxon_200x150.png │ │ │ │ │ │ ├── camel-spark_200x150.png │ │ │ │ │ │ ├── camel-swagger-java_200x150.png │ │ │ │ │ │ ├── g_sizing.png │ │ │ │ │ │ ├── img_avatar.svg │ │ │ │ │ │ ├── l_pf-reverse-164x11.png │ │ │ │ │ │ ├── l_pf-reverse.svg │ │ │ │ │ │ ├── logo-dropbox-old.svg │ │ │ │ │ │ ├── logo-dropbox.svg │ │ │ │ │ │ ├── logo-facebook.svg │ │ │ │ │ │ ├── logo-github.svg │ │ │ │ │ │ ├── logo-gitlab.svg │ │ │ │ │ │ ├── logo-google.svg │ │ │ │ │ │ ├── logo-google2.svg │ │ │ │ │ │ ├── pf-logo-small.svg │ │ │ │ │ │ ├── pf_logo.svg │ │ │ │ │ │ ├── pf_logo_color.svg │ │ │ │ │ │ ├── pf_mini_logo_white.svg │ │ │ │ │ │ ├── pfbg_1200.jpg │ │ │ │ │ │ ├── pfbg_2000.jpg │ │ │ │ │ │ ├── pfbg_576.jpg │ │ │ │ │ │ ├── pfbg_576@2x.jpg │ │ │ │ │ │ ├── pfbg_768.jpg │ │ │ │ │ │ ├── pfbg_768@2x.jpg │ │ │ │ │ │ ├── pfbg_992.jpg │ │ │ │ │ │ └── pfbg_992@2x.jpg │ │ │ │ │ └── pficon │ │ │ │ │ │ ├── pficon.eot │ │ │ │ │ │ ├── pficon.scss │ │ │ │ │ │ ├── pficon.svg │ │ │ │ │ │ ├── pficon.ttf │ │ │ │ │ │ ├── pficon.woff │ │ │ │ │ │ └── pficon.woff2 │ │ │ │ │ ├── icons │ │ │ │ │ └── pf-icons.json │ │ │ │ │ ├── patternfly-addons.css │ │ │ │ │ ├── patternfly-base-no-reset.css │ │ │ │ │ ├── patternfly-base.css │ │ │ │ │ ├── patternfly-charts.css │ │ │ │ │ ├── patternfly-date-picker.css │ │ │ │ │ ├── patternfly-no-reset.css │ │ │ │ │ ├── patternfly.css │ │ │ │ │ ├── patternfly.min.css │ │ │ │ │ └── patternfly.min.css.map │ │ │ │ ├── login-error.html │ │ │ │ ├── login.html │ │ │ │ ├── signup-error.html │ │ │ │ └── signup.html │ │ ├── application.properties │ │ ├── db │ │ │ └── migration │ │ │ │ ├── V2.0.0__QuarkusQuartzTasks.sql │ │ │ │ ├── V2.0.1__TablesDefinition.sql │ │ │ │ ├── V2.1.0__Upgrade.sql │ │ │ │ ├── V4.0.0__Upgrade.sql │ │ │ │ └── V4.2.0__Upgrade.sql │ │ ├── openubl-realm.json │ │ └── templates │ │ │ └── settings.js │ └── webapp │ │ ├── .gitignore │ │ ├── cypress.config.ts │ │ ├── cypress │ │ ├── e2e │ │ │ ├── models │ │ │ │ ├── consulta.ts │ │ │ │ └── version.ts │ │ │ └── tests │ │ │ │ └── scenarios │ │ │ │ └── consult-person.cy.ts │ │ ├── fixtures │ │ │ └── example.json │ │ ├── support │ │ │ ├── commands.ts │ │ │ ├── e2e.ts │ │ │ └── pf4.ts │ │ └── tsconfig.json │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ │ ├── src │ │ ├── App.scss │ │ ├── App.tsx │ │ ├── Constants.ts │ │ ├── EnabledRoute.tsx │ │ ├── Paths.ts │ │ ├── RoleRoute.tsx │ │ ├── Routes.tsx │ │ ├── api-client │ │ │ ├── client.ts │ │ │ ├── client_factory.ts │ │ │ ├── index.ts │ │ │ ├── resources │ │ │ │ ├── common.ts │ │ │ │ └── core.ts │ │ │ └── types.ts │ │ ├── api │ │ │ └── models.tsx │ │ ├── frontend-components-notifications.d.ts │ │ ├── images │ │ │ ├── avatar.svg │ │ │ ├── logo-navbar.svg │ │ │ └── logo.svg │ │ ├── index.scss │ │ ├── index.tsx │ │ ├── pages │ │ │ ├── consulta-ruc │ │ │ │ ├── consulta-ruc.tsx │ │ │ │ └── index.ts │ │ │ ├── contribuyentes │ │ │ │ ├── components │ │ │ │ │ └── details-modal │ │ │ │ │ │ ├── details-modal.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ ├── contribuyentes.tsx │ │ │ │ └── index.ts │ │ │ ├── profile │ │ │ │ ├── index.ts │ │ │ │ ├── overview.tsx │ │ │ │ ├── password-and-authentication.tsx │ │ │ │ └── profile.tsx │ │ │ ├── users │ │ │ │ ├── components │ │ │ │ │ └── user-form │ │ │ │ │ │ ├── index.ts │ │ │ │ │ │ └── user-form.tsx │ │ │ │ ├── index.ts │ │ │ │ └── users.tsx │ │ │ └── versions │ │ │ │ ├── index.ts │ │ │ │ └── versions.tsx │ │ ├── queries │ │ │ ├── contribuyentes.ts │ │ │ ├── currentUser.ts │ │ │ ├── fetchHelpers.ts │ │ │ ├── users.ts │ │ │ ├── versions.ts │ │ │ └── whoami.ts │ │ ├── react-app-env.d.ts │ │ ├── reportWebVitals.ts │ │ ├── setupProxy.js │ │ ├── setupTests.ts │ │ ├── shared │ │ │ ├── components │ │ │ │ ├── contribuyente-details │ │ │ │ │ ├── contribuyente-details.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── controller-select │ │ │ │ │ ├── controller-select-multiple.tsx │ │ │ │ │ └── index.ts │ │ │ │ ├── index.ts │ │ │ │ ├── layout │ │ │ │ │ ├── AppAboutModal │ │ │ │ │ │ ├── AppAboutModal.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── AppAboutModalState │ │ │ │ │ │ ├── AppAboutModalState.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── DefaultLayout │ │ │ │ │ │ ├── DefaultLayout.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── HeaderApp │ │ │ │ │ │ ├── HeaderApp.tsx │ │ │ │ │ │ ├── MobileDropdown.tsx │ │ │ │ │ │ ├── UserDropdown.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ ├── LayoutUtils.ts │ │ │ │ │ ├── SidebarApp │ │ │ │ │ │ ├── SidebarApp.tsx │ │ │ │ │ │ └── index.ts │ │ │ │ │ └── index.ts │ │ │ │ ├── search-input │ │ │ │ │ ├── index.ts │ │ │ │ │ └── search-input.tsx │ │ │ │ ├── simple-page-section │ │ │ │ │ ├── index.ts │ │ │ │ │ └── simple-page-section.tsx │ │ │ │ ├── version-status │ │ │ │ │ ├── index.ts │ │ │ │ │ └── version-status.tsx │ │ │ │ └── welcome │ │ │ │ │ ├── index.ts │ │ │ │ │ └── welcome.tsx │ │ │ ├── containers │ │ │ │ ├── index.ts │ │ │ │ └── visibility-by-permission │ │ │ │ │ ├── index.ts │ │ │ │ │ └── visibility-by-permission.tsx │ │ │ └── hooks │ │ │ │ ├── index.ts │ │ │ │ ├── useClientInstance │ │ │ │ ├── index.ts │ │ │ │ └── useClientInstance.ts │ │ │ │ └── usePermission │ │ │ │ ├── index.ts │ │ │ │ └── usePermission.ts │ │ ├── store │ │ │ ├── alert │ │ │ │ ├── actions.test.ts │ │ │ │ ├── actions.tsx │ │ │ │ └── index.tsx │ │ │ ├── common.ts │ │ │ ├── index.tsx │ │ │ ├── reducerUtils.tsx │ │ │ └── rootReducer.tsx │ │ └── utils │ │ │ ├── dateUtils.ts │ │ │ ├── modelUtils.test.ts │ │ │ └── modelUtils.ts │ │ └── tsconfig.json │ └── test │ ├── java │ └── io │ │ └── github │ │ └── project │ │ └── openubl │ │ └── searchpe │ │ ├── AbstractBaseTest.java │ │ ├── AdvancedSearchEnabledManager.java │ │ ├── BasicProfileManager.java │ │ ├── DefaultProfileManager.java │ │ ├── ProfileManager.java │ │ ├── resources │ │ ├── ContribuyenteResourceTest.java │ │ ├── ContribuyenteSearchResourceTest.java │ │ ├── CurrentUserResourceTest.java │ │ ├── UserResourceTest.java │ │ ├── VersionResourceTest.java │ │ ├── WhoAmIResourceTest.java │ │ └── config │ │ │ ├── ElasticsearchServer.java │ │ │ ├── KeycloakServer.java │ │ │ └── SunatServer.java │ │ ├── security │ │ └── validators │ │ │ └── ValidPermissionValidatorTest.java │ │ └── utils │ │ ├── DataHelperTest.java │ │ └── FileHelperTest.java │ └── resources │ ├── db │ ├── basic-authentication │ │ └── V9000.0.1__basic-authentication.sql │ └── io │ │ └── github │ │ └── project │ │ └── openubl │ │ └── searchpe │ │ └── resources │ │ ├── ContribuyenteResourceTest │ │ └── V9999.0.1__test.sql │ │ └── VersionResourceTest │ │ └── V9999.0.1__test.sql │ └── padron_reducido_ruc.zip ├── jreleaser.yml ├── mvnw ├── mvnw.cmd ├── operator ├── .dockerignore ├── README.md ├── pom.xml └── src │ └── main │ ├── docker │ ├── Dockerfile.jvm │ ├── Dockerfile.legacy-jar │ ├── Dockerfile.native │ └── Dockerfile.native-micro │ ├── java │ └── io │ │ └── github │ │ └── project │ │ └── openubl │ │ └── operator │ │ ├── Config.java │ │ ├── Constants.java │ │ ├── SearchpeOperatorCSVMetadata.java │ │ ├── ValueOrSecret.java │ │ ├── cdrs │ │ └── v2alpha1 │ │ │ ├── Searchpe.java │ │ │ ├── SearchpeDeployment.java │ │ │ ├── SearchpeIngress.java │ │ │ ├── SearchpeSecretBasicAuth.java │ │ │ ├── SearchpeService.java │ │ │ ├── SearchpeSpec.java │ │ │ ├── SearchpeStatus.java │ │ │ └── SearchpeStatusCondition.java │ │ ├── controllers │ │ ├── SearchpeDistConfigurator.java │ │ └── SearchpeReconciler.java │ │ └── utils │ │ └── CRDUtils.java │ ├── kubernetes │ └── icon.png │ └── resources │ ├── META-INF │ └── resources │ │ └── index.html │ ├── application.properties │ └── searchpe.yml ├── pom.xml ├── scripts ├── enrichCSV.groovy ├── postgresql.yaml ├── searchpe-operator.yaml └── searchpe.yaml ├── src └── jreleaser │ └── templates │ └── article │ └── release.md └── tools └── copyright.txt /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [carlosthe19916] 2 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Maintain dependencies for GitHub Actions 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "daily" 8 | commit-message: 9 | prefix: "GitHub Actions" 10 | include: "scope" 11 | # Maintain dependencies for pom.xml 12 | - package-ecosystem: "maven" 13 | directory: "/" 14 | schedule: 15 | interval: "daily" 16 | commit-message: 17 | prefix: "Maven pom.xml" 18 | include: "scope" 19 | # Maintain dependencies from package.json 20 | - package-ecosystem: "npm" 21 | directory: "/application/src/main/webapp" 22 | schedule: 23 | interval: "daily" 24 | allow: 25 | - dependency-name: "@patternfly/*" 26 | dependency-type: "direct" 27 | - dependency-name: "@cypress/*" 28 | dependency-type: "direct" 29 | - dependency-name: "cypress*" 30 | dependency-type: "direct" 31 | -------------------------------------------------------------------------------- /.github/workflows/pr-build-container-images.yml: -------------------------------------------------------------------------------- 1 | name: PR build container images 2 | 3 | on: [ push ] 4 | 5 | jobs: 6 | container-images: 7 | if: ${{ github.event_name != 'pull_request' && github.repository_owner != 'project-openubl' }} 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v3 11 | - uses: actions/setup-java@v3 12 | with: 13 | java-version: 17 14 | distribution: temurin 15 | cache: maven 16 | 17 | - name: Extract branch name 18 | shell: bash 19 | run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" 20 | id: extract_branch 21 | 22 | - name: Build container image 23 | run: | 24 | mvn -U -B package --file pom.xml -DskipTests \ 25 | -Dquarkus.container-image.build=true \ 26 | -Dquarkus.container-image.push=true \ 27 | -Dquarkus.container-image.build=true \ 28 | -Dquarkus.container-image.registry=ghcr.io \ 29 | -Dquarkus.container-image.group=${{ github.repository_owner }} \ 30 | -Dquarkus.container-image.name=${{ github.event.repository.name }}/searchpe \ 31 | -Dquarkus.container-image.tag=${{ steps.extract_branch.outputs.branch }} \ 32 | -Dquarkus.container-image.username=${{ github.actor }} \ 33 | -Dquarkus.container-image.password=${{ secrets.GITHUB_TOKEN }} \ 34 | -P native,ui,${{ matrix.flavor }} \ 35 | -f application 36 | -------------------------------------------------------------------------------- /.github/workflows/sonar.yml: -------------------------------------------------------------------------------- 1 | name: Sonar 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | env: 9 | CI: true 10 | 11 | jobs: 12 | code-scan: 13 | name: Code Scan 14 | if: ${{ github.event_name != 'pull_request' && github.repository_owner == 'project-openubl' }} 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v3 18 | - uses: actions/setup-java@v3 19 | with: 20 | distribution: "temurin" 21 | java-version: 17 22 | cache: maven 23 | - name: Build with Maven and Coverage/Sonar 24 | run: mvn verify -P coverage,sonar 25 | env: 26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 27 | SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #Maven 2 | target/ 3 | pom.xml.tag 4 | pom.xml.releaseBackup 5 | pom.xml.versionsBackup 6 | release.properties 7 | 8 | # Eclipse 9 | .project 10 | .classpath 11 | .settings/ 12 | bin/ 13 | 14 | # IntelliJ 15 | .idea 16 | *.ipr 17 | *.iml 18 | *.iws 19 | 20 | # NetBeans 21 | nb-configuration.xml 22 | 23 | # Visual Studio Code 24 | .vscode 25 | .factorypath 26 | 27 | # OSX 28 | .DS_Store 29 | 30 | # Vim 31 | *.swp 32 | *.swo 33 | 34 | # patch 35 | *.orig 36 | *.rej 37 | 38 | # Local environment 39 | .env 40 | 41 | # Distribution 42 | !application/src/main/distribution/* 43 | 44 | application/workspace/* 45 | src/jreleaser/templates/article/openapi.* 46 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.1/apache-maven-3.8.1-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![CI](https://github.com/project-openubl/searchpe/workflows/CI/badge.svg) 2 | [![License](https://img.shields.io/badge/Apache-2.0-green.svg)](https://www.apache.org/licenses/LICENSE-2.0) 3 | 4 | [![Project Chat](https://img.shields.io/badge/zulip-join_chat-brightgreen.svg?style=for-the-badge&logo=zulip)](https://projectopenubl.zulipchat.com/) 5 | 6 | # Searchpe 7 | 8 | Microservicio que expone los datos provenientes del `padrón reducido` de la SUNAT. 9 | 10 | - [Application](./application) 11 | - [Operator](./operator) 12 | 13 | ## Links 14 | 15 | - [Documentación](https://project-openubl.github.io) 16 | - [Discusiones](https://github.com/project-openubl/searchpe/discussions) 17 | 18 | ## License 19 | 20 | - [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) 21 | -------------------------------------------------------------------------------- /application/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !target/*-runner 3 | !target/*-runner.jar 4 | !target/lib/* 5 | !target/quarkus-app/* -------------------------------------------------------------------------------- /application/README.md: -------------------------------------------------------------------------------- 1 | # Searchpe 2 | 3 | Microservicio que expone los datos provenientes del `padrón reducido` de la SUNAT. 4 | 5 | ## Ejecutar en modo desarrollo 6 | 7 | ### Iniciar servidor 8 | 9 | Puedes ejecutar la aplicación en modo desarrollo con: 10 | 11 | ```shell script 12 | mvn compile quarkus:dev 13 | ``` 14 | 15 | ### Iniciar UI 16 | 17 | Instala las dependencias npm: 18 | 19 | ```shell 20 | npm install --prefix src/main/webapp 21 | ``` 22 | 23 | Inicia la UI en modo desarrollo: 24 | 25 | ```shell 26 | npm run start --prefix src/main/webapp 27 | ``` 28 | 29 | ## Desplegar en Minikube 30 | 31 | - Instala e inicia una instancia de Minikube 32 | - Create un namespace `openubl` 33 | - Create un PVC para la base de datos 34 | - Despliega Searchpe 35 | 36 | ```shell 37 | minikube start 38 | kubectl create ns openubl 39 | kubectl create -f src/main/kubernetes/minikube-pvc.yml -n openubl 40 | eval $(minikube -p minikube docker-env) 41 | mvn clean package -Dquarkus.kubernetes.deploy=true -Dquarkus.kubernetes.namespace=openubl -DskipTests 42 | ``` 43 | 44 | Expone Searchpe usando: 45 | 46 | ```shell 47 | minikube service searchpe -n openubl 48 | ``` 49 | 50 | ## Links 51 | 52 | - [Documentación](https://project-openubl.github.io) 53 | - [Discusiones](https://github.com/project-openubl/searchpe/discussions) 54 | 55 | ## License 56 | 57 | - [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) 58 | -------------------------------------------------------------------------------- /application/src/main/distribution/README: -------------------------------------------------------------------------------- 1 | ## PostgreSQL 2 | Searchpe requiere de una base de datos para poder funcionar. Puedes iniciar PostgreSQL con el método de tu preferencia. 3 | Usa el siguiente comand Docker para un inicio rápido: 4 | 5 | docker run -p 5432:5432 -e POSTGRES_DB=searchpe_db -e POSTGRES_USER=db_username -e POSTGRES_PASSWORD=db_password postgres:13.6 6 | 7 | ## Configuración 8 | Searchpe está hecho en Quarkus. Todas las opciones de configuración descritas en https://quarkus.io/guides/config-reference 9 | son válidas. 10 | 11 | Por defecto se usa la configuración ubicada en la carpeta ./config/application.properties donde puedes manipular la 12 | configuración de Searchpe. 13 | 14 | ## Arrancar Searchpe 15 | Si estas usando Searchpe en JVM Mode entonces ejecuta ./bin/standalone.sh o ./bin/standalone.bat dependiendo de tu Sistema Operativo. 16 | -------------------------------------------------------------------------------- /application/src/main/distribution/config/application.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | # and other contributors as indicated by the @author tags. 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | # 17 | 18 | # Quarkus settings 19 | quarkus.http.port=8180 20 | 21 | # PostgreSQL settings 22 | quarkus.datasource.username=db_username 23 | quarkus.datasource.password=db_password 24 | quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/searchpe_db 25 | 26 | # SUNAT settings 27 | searchpe.sunat.padronReducidoUrl=http://www2.sunat.gob.pe/padron_reducido_ruc.zip 28 | searchpe.sunat.filter=ACTIVO 29 | searchpe.workspace.directory=workspace 30 | searchpe.scheduled.cron=0 0 0 * * ? 31 | searchpe.scheduled.cron-clean=0 0 6 * * ? 32 | 33 | # Oidc Auth 34 | #quarkus.oidc.enabled=true 35 | #quarkus.oidc.client-id=searchpe 36 | #quarkus.oidc.credentials.secret=secret 37 | #quarkus.oidc.auth-server-url=http://localhost:8080/auth/realms/openubl 38 | -------------------------------------------------------------------------------- /application/src/main/docker/Dockerfile.native: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 15 | # 16 | ### 17 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4 18 | WORKDIR /work/ 19 | RUN chown 1001 /work \ 20 | && chmod "g+rwX" /work \ 21 | && chown 1001:root /work 22 | COPY --chown=1001:root target/*-runner /work/application 23 | 24 | EXPOSE 8080 25 | USER 1001 26 | 27 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] 28 | -------------------------------------------------------------------------------- /application/src/main/docker/Dockerfile.native-distroless: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a distroless container that runs the Quarkus application in native (no JVM) mode 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native-distroless -t quarkus/code-with-quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 15 | # 16 | ### 17 | FROM quay.io/quarkus/quarkus-distroless-image:1.0 18 | COPY target/*-runner /application 19 | 20 | EXPOSE 8080 21 | USER nonroot 22 | 23 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] 24 | -------------------------------------------------------------------------------- /application/src/main/helm/.helmignore: -------------------------------------------------------------------------------- 1 | # Patterns to ignore when building packages. 2 | # This supports shell glob matching, relative path matching, and 3 | # negation (prefixed with !). Only one pattern per line. 4 | .DS_Store 5 | # Common VCS dirs 6 | .git/ 7 | .gitignore 8 | .bzr/ 9 | .bzrignore 10 | .hg/ 11 | .hgignore 12 | .svn/ 13 | # Common backup files 14 | *.swp 15 | *.bak 16 | *.tmp 17 | *.orig 18 | *~ 19 | # Various IDEs 20 | .project 21 | .idea/ 22 | *.tmproj 23 | .vscode/ 24 | -------------------------------------------------------------------------------- /application/src/main/helm/Chart.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v2 3 | type: application 4 | name: searchpe 5 | description: ${project.description} 6 | version: ${project.version} 7 | appVersion: ${project.version} 8 | home: ${project.url} 9 | icon: https://raw.githubusercontent.com/project-openubl/searchpe/master/src/main/resources/META-INF/branding/logo.png 10 | sources: 11 | - ${project.scm.url} 12 | keywords: 13 | - searchpe 14 | - openubl 15 | - sunat 16 | 17 | -------------------------------------------------------------------------------- /application/src/main/helm/templates/NOTES.txt: -------------------------------------------------------------------------------- 1 | 1. Get the application URL by running these commands: 2 | {{- if .Values.ingress.enabled }} 3 | {{- range $host := .Values.ingress.hosts }} 4 | {{- range .paths }} 5 | http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} 6 | {{- end }} 7 | {{- end }} 8 | {{- else if contains "NodePort" .Values.service.type }} 9 | export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "searchpe.fullname" . }}) 10 | export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") 11 | echo http://$NODE_IP:$NODE_PORT 12 | {{- else if contains "LoadBalancer" .Values.service.type }} 13 | NOTE: It may take a few minutes for the LoadBalancer IP to be available. 14 | You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "searchpe.fullname" . }}' 15 | export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "searchpe.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") 16 | echo http://$SERVICE_IP:{{ .Values.service.port }} 17 | {{- else if contains "ClusterIP" .Values.service.type }} 18 | export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "searchpe.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") 19 | echo "Visit http://127.0.0.1:8080 to use your application" 20 | kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:8080 21 | {{- end }} 22 | -------------------------------------------------------------------------------- /application/src/main/helm/templates/db-secret.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | apiVersion: v1 3 | kind: Secret 4 | metadata: 5 | name: {{ include "searchpe.fullname" . }}-db 6 | labels: 7 | {{- include "searchpe.labels" . | nindent 4 }} 8 | type: Opaque 9 | stringData: 10 | username: {{ .Values.database.username | quote }} 11 | password: {{ .Values.database.password | quote }} 12 | database: {{ .Values.database.database | quote }} 13 | -------------------------------------------------------------------------------- /application/src/main/helm/templates/hpa.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.autoscaling.enabled }} 2 | apiVersion: autoscaling/v2beta1 3 | kind: HorizontalPodAutoscaler 4 | metadata: 5 | name: {{ include "searchpe.fullname" . }} 6 | labels: 7 | {{- include "searchpe.labels" . | nindent 4 }} 8 | spec: 9 | scaleTargetRef: 10 | apiVersion: apps/v1 11 | kind: Deployment 12 | name: {{ include "searchpe.fullname" . }} 13 | minReplicas: {{ .Values.autoscaling.minReplicas }} 14 | maxReplicas: {{ .Values.autoscaling.maxReplicas }} 15 | metrics: 16 | {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} 17 | - type: Resource 18 | resource: 19 | name: cpu 20 | targetAverageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} 21 | {{- end }} 22 | {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} 23 | - type: Resource 24 | resource: 25 | name: memory 26 | targetAverageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} 27 | {{- end }} 28 | {{- end }} 29 | -------------------------------------------------------------------------------- /application/src/main/helm/templates/ingress.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.ingress.enabled -}} 2 | {{- $fullName := include "searchpe.fullname" . -}} 3 | {{- $svcPort := .Values.service.port -}} 4 | {{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} 5 | apiVersion: networking.k8s.io/v1beta1 6 | {{- else -}} 7 | apiVersion: extensions/v1beta1 8 | {{- end }} 9 | kind: Ingress 10 | metadata: 11 | name: {{ $fullName }} 12 | labels: 13 | {{- include "searchpe.labels" . | nindent 4 }} 14 | {{- with .Values.ingress.annotations }} 15 | annotations: 16 | {{- toYaml . | nindent 4 }} 17 | {{- end }} 18 | spec: 19 | {{- if .Values.ingress.tls }} 20 | tls: 21 | {{- range .Values.ingress.tls }} 22 | - hosts: 23 | {{- range .hosts }} 24 | - {{ . | quote }} 25 | {{- end }} 26 | secretName: {{ .secretName }} 27 | {{- end }} 28 | {{- end }} 29 | rules: 30 | {{- range .Values.ingress.hosts }} 31 | - host: {{ .host | quote }} 32 | http: 33 | paths: 34 | {{- range .paths }} 35 | - path: {{ . }} 36 | backend: 37 | serviceName: {{ $fullName }} 38 | servicePort: {{ $svcPort }} 39 | {{- end }} 40 | {{- end }} 41 | {{- end }} 42 | -------------------------------------------------------------------------------- /application/src/main/helm/templates/route.yaml: -------------------------------------------------------------------------------- 1 | {{- if .Values.openshift.enabled }} 2 | apiVersion: route.openshift.io/v1 3 | kind: Route 4 | metadata: 5 | name: {{ include "searchpe.fullname" . }} 6 | labels: 7 | {{- include "searchpe.labels" . | nindent 4 }} 8 | spec: 9 | port: 10 | targetPort: 8080 11 | to: 12 | kind: Service 13 | name: {{ include "searchpe.fullname" . }} 14 | {{- end}} -------------------------------------------------------------------------------- /application/src/main/helm/templates/service.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Service 3 | metadata: 4 | name: {{ include "searchpe.fullname" . }} 5 | labels: 6 | {{- include "searchpe.labels" . | nindent 4 }} 7 | spec: 8 | type: {{ .Values.service.type }} 9 | ports: 10 | - port: {{ .Values.service.port }} 11 | targetPort: http 12 | protocol: TCP 13 | name: http 14 | selector: 15 | {{- include "searchpe.selectorLabels" . | nindent 4 }} 16 | -------------------------------------------------------------------------------- /application/src/main/helm/templates/tests/test-connection.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: v1 2 | kind: Pod 3 | metadata: 4 | name: "{{ include "searchpe.fullname" . }}-test-connection" 5 | labels: 6 | {{- include "searchpe.labels" . | nindent 4 }} 7 | annotations: 8 | "helm.sh/hook": test-success 9 | spec: 10 | containers: 11 | - name: wget 12 | image: busybox 13 | command: ['wget'] 14 | args: ['{{ include "searchpe.fullname" . }}:{{ .Values.service.port }}'] 15 | restartPolicy: Never 16 | -------------------------------------------------------------------------------- /application/src/main/helm/values.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | replicaCount: 1 3 | 4 | image: 5 | repository: quay.io/projectopenubl/searchpe 6 | pullPolicy: IfNotPresent 7 | tag: "${helm.image.tag}" 8 | 9 | nameOverride: "" 10 | fullnameOverride: "" 11 | 12 | podAnnotations: { } 13 | 14 | service: 15 | type: ClusterIP 16 | port: 8080 17 | 18 | ingress: 19 | enabled: false 20 | annotations: { } 21 | hosts: 22 | - host: chart-example.local 23 | paths: [ ] 24 | tls: [ ] 25 | 26 | resources: 27 | limits: 28 | cpu: 500m 29 | memory: 512Mi 30 | requests: 31 | cpu: 250m 32 | memory: 64Mi 33 | 34 | autoscaling: 35 | enabled: false 36 | minReplicas: 1 37 | maxReplicas: 100 38 | targetCPUUtilizationPercentage: 80 39 | targetMemoryUtilizationPercentage: 80 40 | 41 | nodeSelector: { } 42 | 43 | tolerations: [ ] 44 | 45 | affinity: { } 46 | 47 | database: 48 | hostname: 49 | port: 5432 50 | database: searchpe_db 51 | username: db_username 52 | password: db_password 53 | 54 | # Additional environment variables for Searchpe mapped from Secret or ConfigMap 55 | extraEnvFrom: "" 56 | 57 | openshift: 58 | enabled: false -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/dto/BasicUserDto.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.dto; 18 | 19 | import io.github.project.openubl.searchpe.security.validators.ValidPermission; 20 | import io.quarkus.runtime.annotations.RegisterForReflection; 21 | import lombok.Data; 22 | 23 | import jakarta.validation.Valid; 24 | import jakarta.validation.constraints.NotEmpty; 25 | import jakarta.validation.constraints.NotNull; 26 | import jakarta.validation.constraints.Pattern; 27 | import jakarta.validation.constraints.Size; 28 | import java.util.Set; 29 | 30 | @Data 31 | @RegisterForReflection 32 | public class BasicUserDto { 33 | 34 | private Long id; 35 | private String fullName; 36 | 37 | @Pattern(regexp = "^[a-zA-Z0-9._-]{3,}$") 38 | @NotNull 39 | @Size(min = 3, max = 250) 40 | private String username; 41 | 42 | @NotNull 43 | @Size(min = 3, max = 250) 44 | private String password; 45 | 46 | @ValidPermission 47 | @Valid 48 | @NotEmpty 49 | private Set permissions; 50 | 51 | } 52 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/dto/BasicUserPasswordChangeDto.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.dto; 18 | 19 | import io.quarkus.runtime.annotations.RegisterForReflection; 20 | import lombok.Data; 21 | 22 | @Data 23 | @RegisterForReflection 24 | public class BasicUserPasswordChangeDto { 25 | private String newPassword; 26 | } 27 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/dto/ContribuyenteDto.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.dto; 18 | 19 | import io.quarkus.runtime.annotations.RegisterForReflection; 20 | import lombok.Data; 21 | 22 | @Data 23 | @RegisterForReflection 24 | public class ContribuyenteDto { 25 | private Long versionId; 26 | private String ruc; 27 | private String dni; 28 | private String nombre; 29 | private String estado; 30 | private String condicionDomicilio; 31 | private String ubigeo; 32 | public String tipoVia; 33 | public String nombreVia; 34 | public String codigoZona; 35 | public String tipoZona; 36 | public String numero; 37 | public String interior; 38 | public String lote; 39 | public String departamento; 40 | public String manzana; 41 | public String kilometro; 42 | } 43 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/dto/ErrorDto.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.dto; 18 | 19 | import io.quarkus.runtime.annotations.RegisterForReflection; 20 | import lombok.Builder; 21 | import lombok.Data; 22 | 23 | @Data 24 | @Builder 25 | @RegisterForReflection 26 | public class ErrorDto { 27 | private String message; 28 | } 29 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/dto/VersionDto.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.dto; 18 | 19 | import io.github.project.openubl.searchpe.models.jpa.entity.Status; 20 | import io.quarkus.runtime.annotations.RegisterForReflection; 21 | import lombok.Data; 22 | 23 | import jakarta.json.bind.annotation.JsonbDateFormat; 24 | import java.util.Date; 25 | 26 | @Data 27 | @RegisterForReflection 28 | public class VersionDto { 29 | 30 | private Long id; 31 | 32 | @JsonbDateFormat(value = "yyyy-MM-dd'T'HH:mm:ss'Z'") 33 | private Date createdAt; 34 | 35 | @JsonbDateFormat(value = "yyyy-MM-dd'T'HH:mm:ss'Z'") 36 | private Date updatedAt; 37 | 38 | private Status status; 39 | private int records; 40 | private boolean isActive; 41 | 42 | } 43 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/mapper/BasicUserMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.mapper; 18 | 19 | import io.github.project.openubl.searchpe.dto.BasicUserDto; 20 | import io.github.project.openubl.searchpe.models.jpa.entity.BasicUserEntity; 21 | import org.mapstruct.Mapper; 22 | import org.mapstruct.Mapping; 23 | 24 | import java.util.Arrays; 25 | import java.util.LinkedHashSet; 26 | import java.util.Set; 27 | import java.util.stream.Collectors; 28 | 29 | @Mapper(componentModel = "cdi") 30 | public interface BasicUserMapper { 31 | 32 | @Mapping(source = "permissions", target = "permissions") 33 | @Mapping(source = "password", target = "password", ignore = true) 34 | BasicUserDto toDto(BasicUserEntity entity); 35 | 36 | default Set permissions(String permissions) { 37 | return Arrays.stream(permissions.split(",")) 38 | .sorted() 39 | .collect(Collectors.toCollection(LinkedHashSet::new)); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/mapper/ContribuyenteMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.mapper; 18 | 19 | import io.github.project.openubl.searchpe.dto.ContribuyenteDto; 20 | import io.github.project.openubl.searchpe.models.jpa.entity.ContribuyenteEntity; 21 | import org.mapstruct.Mapper; 22 | 23 | @Mapper(componentModel = "cdi") 24 | public interface ContribuyenteMapper { 25 | 26 | ContribuyenteDto toDto(ContribuyenteEntity entity); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/mapper/VersionMapper.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.mapper; 18 | 19 | import io.github.project.openubl.searchpe.dto.VersionDto; 20 | import io.github.project.openubl.searchpe.models.jpa.VersionRepository; 21 | import io.github.project.openubl.searchpe.models.jpa.entity.VersionEntity; 22 | import org.mapstruct.AfterMapping; 23 | import org.mapstruct.Mapper; 24 | import org.mapstruct.Mapping; 25 | import org.mapstruct.MappingTarget; 26 | 27 | import jakarta.inject.Inject; 28 | import java.util.Optional; 29 | 30 | @Mapper(componentModel = "cdi") 31 | public abstract class VersionMapper { 32 | 33 | @Inject 34 | VersionRepository versionRepository; 35 | 36 | @Mapping(source = "id", target = "id") 37 | public abstract VersionDto toDto(VersionEntity entity); 38 | 39 | @AfterMapping 40 | public void setId(VersionEntity entity, @MappingTarget VersionDto dto) { 41 | Optional activeVersion = versionRepository.findActive(); 42 | 43 | dto.setId(entity.id); 44 | dto.setActive(activeVersion.isPresent() && activeVersion.get().id.equals(entity.id)); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/FilterBean.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models; 18 | 19 | import io.quarkus.runtime.annotations.RegisterForReflection; 20 | import lombok.Builder; 21 | import lombok.Data; 22 | 23 | @Data 24 | @Builder 25 | @RegisterForReflection 26 | public class FilterBean { 27 | private String filterText; 28 | private TipoPersona tipoPersona; 29 | } 30 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/PageBean.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models; 18 | 19 | import io.quarkus.runtime.annotations.RegisterForReflection; 20 | import lombok.Builder; 21 | import lombok.Data; 22 | 23 | @Data 24 | @Builder 25 | @RegisterForReflection 26 | public class PageBean { 27 | private final int offset; 28 | private final int limit; 29 | 30 | public static PageBean buildWith(Integer offset, Integer limit) { 31 | if (offset == null || offset < 0) { 32 | offset = 0; 33 | } 34 | 35 | if (limit == null || limit > 1000) { 36 | limit = 1000; 37 | } 38 | if (limit < 0) { 39 | limit = 10; 40 | } 41 | 42 | return new PageBean(offset, limit); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/SearchResultBean.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models; 18 | 19 | import io.quarkus.runtime.annotations.RegisterForReflection; 20 | import lombok.Builder; 21 | import lombok.Data; 22 | 23 | import java.util.List; 24 | 25 | @Data 26 | @Builder 27 | @RegisterForReflection 28 | public class SearchResultBean { 29 | private final int offset; 30 | private final int limit; 31 | private final long totalElements; 32 | private final List pageElements; 33 | } 34 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/TipoPersona.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models; 18 | 19 | public enum TipoPersona { 20 | NATURAL, 21 | JURIDICA 22 | } 23 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/VersionEvent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models; 18 | 19 | import io.quarkus.runtime.annotations.RegisterForReflection; 20 | 21 | public interface VersionEvent { 22 | interface DownloadingEvent { 23 | Long getVersion(); 24 | } 25 | 26 | interface UnzippingFileEvent { 27 | Long getVersion(); 28 | } 29 | 30 | interface ImportingDataEvent { 31 | Long getVersion(); 32 | } 33 | 34 | interface RecordsDataEvent { 35 | Long getVersion(); 36 | 37 | int getRecords(); 38 | } 39 | 40 | @RegisterForReflection 41 | class DefaultRecordsDataEvent implements RecordsDataEvent { 42 | private final Long version; 43 | private final int records; 44 | 45 | public DefaultRecordsDataEvent(Long version, int records) { 46 | this.version = version; 47 | this.records = records; 48 | } 49 | 50 | @Override 51 | public Long getVersion() { 52 | return version; 53 | } 54 | 55 | @Override 56 | public int getRecords() { 57 | return records; 58 | } 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/jpa/VersionRepository.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models.jpa; 18 | 19 | import io.github.project.openubl.searchpe.models.jpa.entity.Status; 20 | import io.github.project.openubl.searchpe.models.jpa.entity.VersionEntity; 21 | import io.quarkus.hibernate.orm.panache.PanacheRepository; 22 | import io.quarkus.panache.common.Parameters; 23 | import io.quarkus.panache.common.Sort; 24 | 25 | import jakarta.enterprise.context.ApplicationScoped; 26 | import jakarta.transaction.Transactional; 27 | import java.util.Optional; 28 | 29 | @Transactional 30 | @ApplicationScoped 31 | public class VersionRepository implements PanacheRepository { 32 | 33 | public Optional findActive() { 34 | Sort sort = Sort.by("createdAt").descending(); 35 | return VersionEntity.find( 36 | "status = :status", 37 | sort, 38 | Parameters.with("status", Status.COMPLETED) 39 | ).firstResultOptional(); 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/jpa/entity/ContribuyenteId.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models.jpa.entity; 18 | 19 | import lombok.AllArgsConstructor; 20 | import lombok.Builder; 21 | import lombok.Data; 22 | import lombok.NoArgsConstructor; 23 | 24 | import jakarta.persistence.Column; 25 | import jakarta.persistence.Embeddable; 26 | import jakarta.validation.constraints.NotNull; 27 | import jakarta.validation.constraints.Size; 28 | import java.io.Serializable; 29 | 30 | @Data 31 | @Builder 32 | @NoArgsConstructor 33 | @AllArgsConstructor 34 | @Embeddable 35 | public class ContribuyenteId implements Serializable { 36 | 37 | @Column(name = "version_id") 38 | @NotNull 39 | public Long versionId; 40 | 41 | @Size(min = 11, max = 11) 42 | @NotNull 43 | @Column(name = "ruc") 44 | public String ruc; 45 | 46 | } 47 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/jpa/entity/EstadoContribuyente.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models.jpa.entity; 18 | 19 | import io.quarkus.runtime.annotations.RegisterForReflection; 20 | 21 | import java.util.Arrays; 22 | import java.util.Optional; 23 | 24 | @RegisterForReflection 25 | public enum EstadoContribuyente { 26 | ACTIVO, 27 | SUSPENSION_TEMPORAL, 28 | BAJA_DE_OFICIO, 29 | BAJA_DEFINITIVA; 30 | 31 | public static Optional fromString(String value) { 32 | String valueToCheck = value.toUpperCase().replaceAll(" ", "_"); 33 | return Arrays.stream(EstadoContribuyente.values()).filter(f -> f.toString().equals(valueToCheck)).findFirst(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/models/jpa/entity/Status.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.models.jpa.entity; 18 | 19 | public enum Status { 20 | SCHEDULED, 21 | DOWNLOADING, 22 | UNZIPPING, 23 | IMPORTING, 24 | INDEXING, 25 | ERROR, 26 | CANCELLED, 27 | COMPLETED, 28 | DELETING, 29 | CANCELLING 30 | } 31 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/resources/interceptors/AllowAdvancedSearch.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.resources.interceptors; 18 | 19 | import jakarta.interceptor.InterceptorBinding; 20 | import java.lang.annotation.ElementType; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | 25 | @InterceptorBinding 26 | @Target({ElementType.TYPE, ElementType.METHOD}) 27 | @Retention(RetentionPolicy.RUNTIME) 28 | public @interface AllowAdvancedSearch { 29 | } 30 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/resources/interceptors/AllowAdvancedSearchInterceptor.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.resources.interceptors; 18 | 19 | import org.eclipse.microprofile.config.inject.ConfigProperty; 20 | import org.jboss.logging.Logger; 21 | 22 | import jakarta.interceptor.AroundInvoke; 23 | import jakarta.interceptor.Interceptor; 24 | import jakarta.interceptor.InvocationContext; 25 | import jakarta.ws.rs.BadRequestException; 26 | 27 | @Interceptor 28 | @AllowAdvancedSearch 29 | public class AllowAdvancedSearchInterceptor { 30 | 31 | private static final Logger LOGGER = Logger.getLogger(AllowAdvancedSearchInterceptor.class); 32 | 33 | @ConfigProperty(name = "searchpe.allow.advancedSearch") 34 | boolean allowAdvancedSearch; 35 | 36 | @AroundInvoke 37 | public Object invoke(InvocationContext ctx) throws Exception { 38 | if (allowAdvancedSearch) { 39 | return ctx.proceed(); 40 | } else { 41 | LOGGER.warn("REST endpoint blocked: you can not perform advanced search"); 42 | throw new BadRequestException("Advanced search has been disabled, can not proceed"); 43 | } 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/resources/interceptors/HTTPBasicAuthEnabled.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.resources.interceptors; 18 | 19 | import jakarta.interceptor.InterceptorBinding; 20 | import java.lang.annotation.ElementType; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.RetentionPolicy; 23 | import java.lang.annotation.Target; 24 | 25 | @InterceptorBinding 26 | @Target({ElementType.TYPE, ElementType.METHOD}) 27 | @Retention(RetentionPolicy.RUNTIME) 28 | public @interface HTTPBasicAuthEnabled { 29 | } 30 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/security/AuthSwitchServlet.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.security; 18 | 19 | import io.github.project.openubl.searchpe.models.jpa.entity.BasicUserEntity; 20 | 21 | import jakarta.servlet.annotation.WebServlet; 22 | import jakarta.servlet.http.HttpServlet; 23 | import jakarta.servlet.http.HttpServletRequest; 24 | import jakarta.servlet.http.HttpServletResponse; 25 | import java.io.IOException; 26 | 27 | @WebServlet("/auth-switch") 28 | public class AuthSwitchServlet extends HttpServlet { 29 | 30 | @Override 31 | protected void doGet(HttpServletRequest req, HttpServletResponse resp) { 32 | try { 33 | long currentNumberOfUsers = BasicUserEntity.count(); 34 | if (currentNumberOfUsers > 0) { 35 | resp.sendRedirect("login.html"); 36 | } else { 37 | resp.sendRedirect("signup.html"); 38 | } 39 | } catch (IOException e) { 40 | throw new IllegalStateException(e); 41 | } 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/security/DisabledAuthController.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.security; 18 | 19 | import io.quarkus.security.spi.runtime.AuthorizationController; 20 | import org.eclipse.microprofile.config.inject.ConfigProperty; 21 | 22 | import jakarta.annotation.Priority; 23 | import jakarta.enterprise.context.ApplicationScoped; 24 | import jakarta.enterprise.inject.Alternative; 25 | import jakarta.interceptor.Interceptor; 26 | 27 | @Alternative 28 | @Priority(Interceptor.Priority.LIBRARY_AFTER) 29 | @ApplicationScoped 30 | public class DisabledAuthController extends AuthorizationController { 31 | 32 | @ConfigProperty(name = "searchpe.disable.authorization") 33 | boolean disableAuthorization; 34 | 35 | @Override 36 | public boolean isAuthorizationEnabled() { 37 | return !disableAuthorization; 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/security/Permission.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.security; 18 | 19 | import java.util.Arrays; 20 | import java.util.List; 21 | 22 | public interface Permission { 23 | String admin = "admin:app"; 24 | String search = "search"; 25 | String version_write = "version:write"; 26 | String user_write = "user:write"; 27 | 28 | List allPermissions = Arrays.asList(admin, search, version_write, user_write); 29 | } 30 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/security/validators/ValidPermission.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.security.validators; 18 | 19 | import jakarta.validation.Constraint; 20 | import jakarta.validation.Payload; 21 | import java.lang.annotation.Retention; 22 | import java.lang.annotation.Target; 23 | 24 | import static java.lang.annotation.ElementType.FIELD; 25 | import static java.lang.annotation.RetentionPolicy.RUNTIME; 26 | 27 | @Constraint(validatedBy = ValidPermissionValidator.class) 28 | @Target(FIELD) 29 | @Retention(RUNTIME) 30 | public @interface ValidPermission { 31 | 32 | String message() default ""; 33 | 34 | Class[] groups() default {}; 35 | 36 | Class[] payload() default {}; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /application/src/main/java/io/github/project/openubl/searchpe/security/validators/ValidPermissionValidator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe.security.validators; 18 | 19 | import io.github.project.openubl.searchpe.security.Permission; 20 | 21 | import jakarta.validation.ConstraintValidator; 22 | import jakarta.validation.ConstraintValidatorContext; 23 | import java.util.Collection; 24 | 25 | public class ValidPermissionValidator implements ConstraintValidator> { 26 | 27 | @Override 28 | public boolean isValid(Collection value, ConstraintValidatorContext context) { 29 | if (value == null) { 30 | return true; 31 | } 32 | 33 | boolean isValid = value.stream().allMatch(f -> Permission.allPermissions.stream().anyMatch(f::equals)); 34 | if (!isValid) { 35 | context.disableDefaultConstraintViolation(); 36 | context.buildConstraintViolationWithTemplate("One or more permissions are not valid") 37 | .addConstraintViolation(); 38 | } 39 | 40 | return isValid; 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /application/src/main/kubernetes/minikube-pvc.yml: -------------------------------------------------------------------------------- 1 | --- 2 | kind: PersistentVolumeClaim 3 | apiVersion: v1 4 | metadata: 5 | name: searchpe-db 6 | labels: 7 | app.kubernetes.io/name: searchpe-db 8 | app.kubernetes.io/component: database 9 | app.kubernetes.io/instance: searchpe-db 10 | app.kubernetes.io/part-of: openubl-searchpe 11 | spec: 12 | accessModes: 13 | - ReadWriteOnce 14 | resources: 15 | requests: 16 | storage: 10Gi -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/branding/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/branding/logo.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/.gitignore: -------------------------------------------------------------------------------- 1 | static/ 2 | *.json 3 | *.png 4 | *.txt 5 | index.html 6 | favicon.ico -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/images/favicon.ico -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Black.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Black.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Black.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Black.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Black.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BlackItalic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Bold.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-BoldItalic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Medium.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-MediumItalic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatDisplay/RedHatDisplay-Regular.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Bold.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Bold.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Bold.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-BoldItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-BoldItalic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-BoldItalic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-BoldItalic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Medium.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Medium.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Medium.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-MediumItalic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-MediumItalic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-MediumItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-MediumItalic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-MediumItalic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Regular.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Regular.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/RedHatText/RedHatText-Regular.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 |

Overpass Mono

10 |

Overpass Mono

11 |

Overpass Mono

12 |

Overpass Mono

13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-bold.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-bold.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-bold.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-bold.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-light.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-light.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-light.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-light.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-regular.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-regular.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-regular.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-regular.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-semibold.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-semibold.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-semibold.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono-semibold.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-mono-webfont/overpass-mono.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | @font-face { 4 | font-family: 'overpass-mono'; 5 | src: url('overpass-mono-light.eot'); 6 | src: url('overpass-mono-light.eot?#iefix') format('embedded-opentype'), 7 | url('overpass-mono-light.woff2') format('woff2'), 8 | url('overpass-mono-light.woff') format('woff'), 9 | url('overpass-mono-light.ttf') format('truetype'); 10 | font-weight: 300; 11 | font-style: normal; 12 | } 13 | 14 | 15 | 16 | @font-face { 17 | font-family: 'overpass-mono'; 18 | src: url('overpass-mono-regular.eot'); 19 | src: url('overpass-mono-regular.eot?#iefix') format('embedded-opentype'), 20 | url('overpass-mono-regular.woff2') format('woff2'), 21 | url('overpass-mono-regular.woff') format('woff'), 22 | url('overpass-mono-regular.ttf') format('truetype'); 23 | font-weight: 400; 24 | font-style: normal; 25 | } 26 | 27 | 28 | 29 | @font-face { 30 | font-family: 'overpass-mono'; 31 | src: url('overpass-mono-semibold.eot'); 32 | src: url('overpass-mono-semibold.eot?#iefix') format('embedded-opentype'), 33 | url('overpass-mono-semibold.woff2') format('woff2'), 34 | url('overpass-mono-semibold.woff') format('woff'), 35 | url('overpass-mono-semibold.ttf') format('truetype'); 36 | font-weight: 500; 37 | font-style: normal; 38 | } 39 | 40 | 41 | 42 | @font-face { 43 | font-family: 'overpass-mono'; 44 | src: url('overpass-mono-bold.eot'); 45 | src: url('overpass-mono-bold.eot?#iefix') format('embedded-opentype'), 46 | url('overpass-mono-bold.woff2') format('woff2'), 47 | url('overpass-mono-bold.woff') format('woff'), 48 | url('overpass-mono-bold.ttf') format('truetype'); 49 | font-weight: 600; 50 | font-style: normal; 51 | } 52 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 |

Overpass Overpass

10 |

Overpass Overpass

11 |

Overpass Overpass

12 |

Overpass Overpass

13 |

Overpass Overpass

14 |

Overpass Overpass

15 |

Overpass Overpass

16 |

Overpass Overpass

17 | 18 | 19 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold-italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold-italic.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold-italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold-italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-bold.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold-italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold-italic.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold-italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold-italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extrabold.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight-italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight-italic.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight-italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight-italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-extralight.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy-italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy-italic.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy-italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy-italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-heavy.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-italic.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light-italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light-italic.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light-italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light-italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-light.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-regular.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-regular.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-regular.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-regular.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold-italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold-italic.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold-italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold-italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-semibold.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin-italic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin-italic.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin-italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin-italic.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin-italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin-italic.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin-italic.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/overpass-webfont/overpass-thin.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/fonts/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/FuseConnector_Icons_AzureServices.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/FuseConnector_Icons_AzureServices.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/FuseConnector_Icons_REST.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/FuseConnector_Icons_REST.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/activemq-core_200x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/activemq-core_200x150.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/background-filter.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-avro_200x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-avro_200x150.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-dropbox_200x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-dropbox_200x150.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-infinispan_200x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-infinispan_200x150.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-saxon_200x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-saxon_200x150.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-spark_200x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-spark_200x150.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-swagger-java_200x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/camel-swagger-java_200x150.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/g_sizing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/g_sizing.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/l_pf-reverse-164x11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/l_pf-reverse-164x11.png -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/l_pf-reverse.svg: -------------------------------------------------------------------------------- 1 | Artboard 1 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/logo-dropbox-old.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/logo-dropbox.svg: -------------------------------------------------------------------------------- 1 | 2 | Dropbox logo 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/logo-facebook.svg: -------------------------------------------------------------------------------- 1 | 2 | Facebook logo 3 | 4 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/logo-github.svg: -------------------------------------------------------------------------------- 1 | 2 | GitHub logo 3 | 4 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/logo-gitlab.svg: -------------------------------------------------------------------------------- 1 | 2 | GitLab logo 3 | 4 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/logo-google.svg: -------------------------------------------------------------------------------- 1 | 2 | Google logo 3 | 4 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/logo-google2.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pf_mini_logo_white.svg: -------------------------------------------------------------------------------- 1 | Artboard 1 -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_1200.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_1200.jpg -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_2000.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_2000.jpg -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_576.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_576.jpg -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_576@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_576@2x.jpg -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_768.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_768.jpg -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_768@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_768@2x.jpg -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_992.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_992.jpg -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_992@2x.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/images/pfbg_992@2x.jpg -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/pficon/pficon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/pficon/pficon.eot -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/pficon/pficon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/pficon/pficon.ttf -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/pficon/pficon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/pficon/pficon.woff -------------------------------------------------------------------------------- /application/src/main/resources/META-INF/resources/assets/patternfly/assets/pficon/pficon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/resources/META-INF/resources/assets/patternfly/assets/pficon/pficon.woff2 -------------------------------------------------------------------------------- /application/src/main/resources/db/migration/V2.0.1__TablesDefinition.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE VERSION 2 | ( 3 | id SMALLINT NOT NULL, 4 | created_at TIMESTAMP NOT NULL, 5 | updated_at TIMESTAMP NOT NULL, 6 | status VARCHAR(50) NOT NULL, 7 | records INTEGER NOT NULL, 8 | PRIMARY KEY (id) 9 | ); 10 | 11 | CREATE TABLE CONTRIBUYENTE 12 | ( 13 | version_id SMALLINT NOT NULL, 14 | ruc VARCHAR(11) NOT NULL, 15 | razon_social VARCHAR(150) NOT NULL, 16 | estado_contribuyente VARCHAR(30), 17 | condicion_domicilio VARCHAR(30), 18 | ubigeo VARCHAR(6), 19 | tipo_via VARCHAR(30), 20 | nombre_via VARCHAR(100), 21 | codigo_zona VARCHAR(30), 22 | tipo_zona VARCHAR(30), 23 | numero VARCHAR(30), 24 | interior VARCHAR(30), 25 | lote VARCHAR(30), 26 | departamento VARCHAR(30), 27 | manzana VARCHAR(30), 28 | kilometro VARCHAR(30), 29 | PRIMARY KEY (version_id, ruc) 30 | ); 31 | 32 | ALTER TABLE CONTRIBUYENTE 33 | ADD CONSTRAINT fk_contribuyente_version FOREIGN KEY (version_id) REFERENCES VERSION; 34 | 35 | COMMIT; 36 | -------------------------------------------------------------------------------- /application/src/main/resources/db/migration/V2.1.0__Upgrade.sql: -------------------------------------------------------------------------------- 1 | -- Delete all preexisting SUNAT data 2 | delete 3 | from CONTRIBUYENTE; 4 | delete 5 | from VERSION; 6 | 7 | -- Alter tables to match new Models 8 | alter table if exists VERSION add column version int8 not null; 9 | 10 | alter table if exists CONTRIBUYENTE add column tipo_persona varchar (15) not null; 11 | alter table if exists CONTRIBUYENTE rename column ruc to numero_documento; 12 | alter table if exists CONTRIBUYENTE rename column razon_social to nombre; 13 | alter table if exists CONTRIBUYENTE rename column estado_contribuyente to estado; 14 | 15 | -- Create new table for Basic Auth support 16 | CREATE TABLE BASIC_USER 17 | ( 18 | id int8 NOT NULL, 19 | full_name VARCHAR(250), 20 | username VARCHAR(250) NOT NULL, 21 | password VARCHAR(250) NOT NULL, 22 | permissions VARCHAR(250), 23 | version int8 NOT NULL, 24 | PRIMARY KEY (id) 25 | ); 26 | 27 | alter table BASIC_USER 28 | add constraint UK4hs3cb8j320vu5apl2fb06dde unique (username); 29 | -------------------------------------------------------------------------------- /application/src/main/resources/db/migration/V4.0.0__Upgrade.sql: -------------------------------------------------------------------------------- 1 | -- Version 2 | alter table VERSION 3 | alter 4 | column id type int8; 5 | 6 | alter table VERSION 7 | alter 8 | column version type int4; 9 | 10 | alter table if exists VERSION 11 | add column trigger_key varchar(255) null; 12 | 13 | -- Basic user 14 | alter table BASIC_USER 15 | alter 16 | column version type int4; 17 | 18 | -- Contribuyente 19 | drop table if exists CONTRIBUYENTE; 20 | create table CONTRIBUYENTE 21 | ( 22 | version_id int8 not null, 23 | ruc varchar(11) not null, 24 | dni varchar(8) null, 25 | nombre varchar(150) not null, 26 | estado varchar(30), 27 | condicion_domicilio varchar(30), 28 | ubigeo varchar(6), 29 | tipo_via varchar(30), 30 | nombre_via varchar(100), 31 | codigo_zona varchar(30), 32 | tipo_zona varchar(30), 33 | numero varchar(30), 34 | interior varchar(30), 35 | lote varchar(30), 36 | departamento varchar(30), 37 | manzana varchar(30), 38 | kilometro varchar(30) 39 | ) partition by range (version_id); 40 | -------------------------------------------------------------------------------- /application/src/main/resources/db/migration/V4.2.0__Upgrade.sql: -------------------------------------------------------------------------------- 1 | create sequence basic_user_sequence start with 1 increment by 50; 2 | create sequence version_sequence start with 1 increment by 50; 3 | 4 | -- To not collide with previous IDs if we upgrade an existing DB 5 | select setval('basic_user_sequence', (select count(id) + 1 FROM basic_user)); 6 | select setval('version_sequence', (select count(id) + 1 FROM version)); 7 | -------------------------------------------------------------------------------- /application/src/main/resources/templates/settings.js: -------------------------------------------------------------------------------- 1 | window["SEARCHPE_SETTINGS"] = { 2 | defaultAuthMethod: "{defaultAuthMethod}", 3 | formCookieName: "{formCookieName}", 4 | oidcLogoutPath: "{oidcLogoutPath}", 5 | isAdvancedSearchEnabled: {isAdvancedSearchEnabled}, 6 | applicationVersion: "{applicationVersion}" 7 | }; 8 | -------------------------------------------------------------------------------- /application/src/main/webapp/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /application/src/main/webapp/cypress.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "cypress"; 2 | 3 | export default defineConfig({ 4 | e2e: { 5 | baseUrl: "http://localhost:3000", 6 | setupNodeEvents(on, config) { 7 | // implement node event listeners here 8 | }, 9 | }, 10 | }); 11 | -------------------------------------------------------------------------------- /application/src/main/webapp/cypress/e2e/models/consulta.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | export class ConsultaPage { 4 | openPage(): void { 5 | // Interceptors 6 | cy.intercept("GET", "/api/contribuyentes/*").as("getContribuyentes"); 7 | 8 | // Open page 9 | cy.visit("#/"); 10 | } 11 | 12 | consultar(numeroDocumento: string): void { 13 | this.openPage(); 14 | 15 | cy.get("input[name='filterText']") 16 | .clear() 17 | .type(numeroDocumento) 18 | .type("{enter}"); 19 | 20 | cy.wait("@getContribuyentes"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /application/src/main/webapp/cypress/e2e/models/version.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | export class VersionsPage { 4 | openPage(): void { 5 | // Interceptors 6 | cy.intercept("POST", "/api/versions").as("postVersion"); 7 | cy.intercept("GET", "/api/versions").as("getVersions"); 8 | 9 | // Open page 10 | cy.visit("#/versiones"); 11 | cy.wait("@getVersions"); 12 | } 13 | 14 | create(): void { 15 | this.openPage(); 16 | 17 | cy.get("button[aria-label='new-version']").click(); 18 | 19 | cy.wait("@postVersion"); 20 | cy.wait("@getVersions"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /application/src/main/webapp/cypress/e2e/tests/scenarios/consult-person.cy.ts: -------------------------------------------------------------------------------- 1 | /// 2 | 3 | import { VersionsPage } from "../../models/version"; 4 | import { ConsultaPage } from "../../models/consulta"; 5 | 6 | describe("Flows", () => { 7 | const versionsPage = new VersionsPage(); 8 | const consultaPage = new ConsultaPage(); 9 | 10 | it("Create version and consult a person", () => { 11 | versionsPage.create(); 12 | 13 | // Verify table 14 | cy.get(".pf-c-table") 15 | .pf4_table_rows() 16 | .eq(0) 17 | .find("td[data-label='Estado']") 18 | .contains("Completed", { timeout: 60000 }); 19 | cy.get(".pf-c-table") 20 | .pf4_table_rows() 21 | .eq(0) 22 | .find("td[data-label='Labels']") 23 | .should("contain", "Activo"); 24 | 25 | // Consultar 26 | consultaPage.consultar("20506866473"); 27 | cy.get("dd").contains("WINIADAEWOO ELECTRONICS PERU S.A.C."); 28 | }); 29 | }); 30 | -------------------------------------------------------------------------------- /application/src/main/webapp/cypress/fixtures/example.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Using fixtures to represent data", 3 | "email": "hello@cypress.io", 4 | "body": "Fixtures are a great way to mock data for responses to routes" 5 | } 6 | -------------------------------------------------------------------------------- /application/src/main/webapp/cypress/support/commands.ts: -------------------------------------------------------------------------------- 1 | /// 2 | // *********************************************** 3 | // This example commands.ts shows you how to 4 | // create various custom commands and overwrite 5 | // existing commands. 6 | // 7 | // For more comprehensive examples of custom 8 | // commands please read more here: 9 | // https://on.cypress.io/custom-commands 10 | // *********************************************** 11 | // 12 | // 13 | // -- This is a parent command -- 14 | // Cypress.Commands.add('login', (email, password) => { ... }) 15 | // 16 | // 17 | // -- This is a child command -- 18 | // Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) 19 | // 20 | // 21 | // -- This is a dual command -- 22 | // Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) 23 | // 24 | // 25 | // -- This will overwrite an existing command -- 26 | // Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) 27 | // 28 | // declare global { 29 | // namespace Cypress { 30 | // interface Chainable { 31 | // login(email: string, password: string): Chainable 32 | // drag(subject: string, options?: Partial): Chainable 33 | // dismiss(subject: string, options?: Partial): Chainable 34 | // visit(originalFn: CommandOriginalFn, url: string, options: Partial): Chainable 35 | // } 36 | // } 37 | // } 38 | 39 | import "./pf4"; 40 | -------------------------------------------------------------------------------- /application/src/main/webapp/cypress/support/e2e.ts: -------------------------------------------------------------------------------- 1 | // *********************************************************** 2 | // This example support/e2e.ts is processed and 3 | // loaded automatically before your test files. 4 | // 5 | // This is a great place to put global configuration and 6 | // behavior that modifies Cypress. 7 | // 8 | // You can change the location of this file or turn off 9 | // automatically serving support files with the 10 | // 'supportFile' configuration option. 11 | // 12 | // You can read more here: 13 | // https://on.cypress.io/configuration 14 | // *********************************************************** 15 | 16 | // Import commands.js using ES2015 syntax: 17 | import './commands' 18 | 19 | // Alternatively you can use CommonJS syntax: 20 | // require('./commands') -------------------------------------------------------------------------------- /application/src/main/webapp/cypress/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["es5", "dom"], 5 | "types": ["cypress", "node"] 6 | }, 7 | "include": ["**/*.ts"] 8 | } 9 | -------------------------------------------------------------------------------- /application/src/main/webapp/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/webapp/public/favicon.ico -------------------------------------------------------------------------------- /application/src/main/webapp/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/webapp/public/logo192.png -------------------------------------------------------------------------------- /application/src/main/webapp/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/main/webapp/public/logo512.png -------------------------------------------------------------------------------- /application/src/main/webapp/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Searchpe", 3 | "name": "Searchpe: padrón reducido (SUNAT)", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } -------------------------------------------------------------------------------- /application/src/main/webapp/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/App.scss: -------------------------------------------------------------------------------- 1 | .pf-c-select__toggle:before { 2 | border-top: var(--pf-c-select__toggle--before--BorderTopWidth) solid 3 | var(--pf-c-select__toggle--before--BorderTopColor) !important; 4 | border-right: var(--pf-c-select__toggle--before--BorderRightWidth) solid 5 | var(--pf-c-select__toggle--before--BorderRightColor) !important; 6 | border-bottom: var(--pf-c-select__toggle--before--BorderBottomWidth) solid 7 | var(--pf-c-select__toggle--before--BorderBottomColor) !important; 8 | border-left: var(--pf-c-select__toggle--before--BorderLeftWidth) solid 9 | var(--pf-c-select__toggle--before--BorderLeftColor) !important; 10 | } 11 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/Constants.ts: -------------------------------------------------------------------------------- 1 | export enum Permission { 2 | admin = "admin:app", 3 | search = "search", 4 | version_write = "version:write", 5 | user_write = "user:write", 6 | } 7 | export const ALL_PERMISSIONS: Permission[] = [ 8 | Permission.admin, 9 | Permission.search, 10 | Permission.version_write, 11 | Permission.user_write, 12 | ]; 13 | 14 | export type SEARCHPE_AUTH_METHOD = "none" | "oidc" | "basic"; 15 | 16 | interface Settings { 17 | defaultAuthMethod: SEARCHPE_AUTH_METHOD; 18 | formCookieName: string; 19 | oidcLogoutPath: string; 20 | isAdvancedSearchEnabled: boolean; 21 | applicationVersion: string; 22 | } 23 | 24 | const defaultSettings: Settings = { 25 | defaultAuthMethod: "basic", 26 | formCookieName: "searchpe-credential", 27 | oidcLogoutPath: "/logout", 28 | isAdvancedSearchEnabled: false, 29 | applicationVersion: "", 30 | }; 31 | 32 | const SEARCHPE_SETTINGS: Settings = 33 | (window as any)["SEARCHPE_SETTINGS"] || defaultSettings; 34 | 35 | export const isAuthDisabled = (): boolean => { 36 | return SEARCHPE_SETTINGS.defaultAuthMethod === "none"; 37 | }; 38 | 39 | export const isBasicDefaultAuth = (): boolean => { 40 | return SEARCHPE_SETTINGS.defaultAuthMethod === "basic"; 41 | }; 42 | 43 | export const isOidcDefaultAuth = (): boolean => { 44 | return SEARCHPE_SETTINGS.defaultAuthMethod === "oidc"; 45 | }; 46 | 47 | export const getAuthFormCookieName = (): string => { 48 | return SEARCHPE_SETTINGS.formCookieName; 49 | }; 50 | 51 | export const getOidcLogoutPath = (): string => { 52 | return SEARCHPE_SETTINGS.oidcLogoutPath; 53 | }; 54 | 55 | export const getApplicationVersion = () => { 56 | return SEARCHPE_SETTINGS.applicationVersion; 57 | }; 58 | 59 | export const isAdvancedSearchEnabled = () => { 60 | return SEARCHPE_SETTINGS.isAdvancedSearchEnabled; 61 | }; 62 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/EnabledRoute.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Navigate } from "react-router-dom"; 3 | 4 | export interface IEnabledRouteProps { 5 | isEnabled: boolean; 6 | children: any; 7 | } 8 | 9 | export const EnabledRoute: React.FC = ({ 10 | isEnabled, 11 | children, 12 | }) => { 13 | return isEnabled ? children : ; 14 | }; 15 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/Paths.ts: -------------------------------------------------------------------------------- 1 | export enum Paths { 2 | consultaRuc = "/consulta-numero-documento", 3 | contribuyentes = "/contribuyentes", 4 | versiones = "/versiones", 5 | 6 | users = "/settings/users", 7 | profile = "/profile", 8 | } 9 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/RoleRoute.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { 4 | Bullseye, 5 | EmptyState, 6 | EmptyStateBody, 7 | EmptyStateIcon, 8 | EmptyStateVariant, 9 | Title, 10 | } from "@patternfly/react-core"; 11 | import { WarningTriangleIcon } from "@patternfly/react-icons"; 12 | 13 | import { usePermission } from "shared/hooks"; 14 | import { Permission } from "Constants"; 15 | 16 | export interface IRoleRouteProps { 17 | hasAny?: Permission[]; 18 | children: React.ReactElement; 19 | } 20 | 21 | export const RoleRoute: React.FC = ({ hasAny, children }) => { 22 | const { isAllowed } = usePermission({ hasAny: hasAny || [] }); 23 | 24 | const notAuthorizedState = ( 25 | 26 | 27 | 28 | 29 | 403 Forbidden 30 | 31 | You are not allowed to access this page 32 | 33 | 34 | ); 35 | 36 | return !isAllowed && hasAny ? notAuthorizedState : children; 37 | }; 38 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/api-client/client_factory.ts: -------------------------------------------------------------------------------- 1 | import { ResponseType } from "axios"; 2 | import { ClusterClient } from "./client"; 3 | 4 | export class ClientFactoryUnknownClusterError extends Error { 5 | constructor(clusterName: string) { 6 | super(`Unknown cluster requested: ${clusterName}`); 7 | Object.setPrototypeOf(this, ClientFactoryUnknownClusterError.prototype); 8 | } 9 | } 10 | 11 | export class ClientFactoryMissingUserError extends Error { 12 | constructor() { 13 | super("Current user missing from client factory"); 14 | Object.setPrototypeOf(this, ClientFactoryMissingUserError.prototype); 15 | } 16 | } 17 | 18 | export class ClientFactoryMissingApiRoot extends Error { 19 | constructor() { 20 | super("Cluster API URL missing from client factory"); 21 | Object.setPrototypeOf(this, ClientFactoryMissingUserError.prototype); 22 | } 23 | } 24 | 25 | export const ClientFactory = { 26 | cluster: ( 27 | clusterApi: string, 28 | customResponseType: ResponseType = "json" 29 | ): ClusterClient => { 30 | if (!clusterApi) { 31 | throw new ClientFactoryMissingApiRoot(); 32 | } 33 | 34 | const result = new ClusterClient(clusterApi, customResponseType); 35 | return result; 36 | }, 37 | }; 38 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/api-client/index.ts: -------------------------------------------------------------------------------- 1 | export * from './client'; 2 | export * from './client_factory'; 3 | export * from './resources/common'; 4 | export * from './resources/core'; 5 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/api-client/resources/common.ts: -------------------------------------------------------------------------------- 1 | export type ApiResource = ClusterResource; 2 | 3 | export interface IApiResource { 4 | listPath(): string; 5 | idPath(id: string): string; 6 | } 7 | 8 | export interface IGroupVersionKindPlural { 9 | group: string; 10 | version: string; 11 | kindPlural: string; 12 | } 13 | 14 | function idPath(listPath: string, name: string) { 15 | return [listPath, name].join("/"); 16 | } 17 | 18 | export abstract class ClusterResource implements IApiResource { 19 | public abstract gvk(): IGroupVersionKindPlural; 20 | public listPath(): string { 21 | return [ 22 | "/api", 23 | this.gvk().group, 24 | this.gvk().version, 25 | this.gvk().kindPlural, 26 | ].join("/"); 27 | } 28 | public idPath(id: string): string { 29 | return idPath(this.listPath(), id); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/api-client/resources/core.ts: -------------------------------------------------------------------------------- 1 | import { ClusterResource, IGroupVersionKindPlural } from "./common"; 2 | 3 | export class CoreClusterResource extends ClusterResource { 4 | private _gvk: IGroupVersionKindPlural; 5 | 6 | constructor(kind: CoreClusterResourceKind) { 7 | super(); 8 | this._gvk = { 9 | group: "", 10 | version: "", 11 | kindPlural: kind, 12 | }; 13 | } 14 | 15 | gvk(): IGroupVersionKindPlural { 16 | return this._gvk; 17 | } 18 | 19 | public listPath(): string { 20 | return [this.gvk().kindPlural].join("/"); 21 | } 22 | } 23 | 24 | export class AdminClusterResource extends ClusterResource { 25 | private _gvk: IGroupVersionKindPlural; 26 | 27 | constructor(kind: AdminClusterResourceKind) { 28 | super(); 29 | this._gvk = { 30 | group: "", 31 | version: "", 32 | kindPlural: kind, 33 | }; 34 | } 35 | 36 | gvk(): IGroupVersionKindPlural { 37 | return this._gvk; 38 | } 39 | 40 | public listPath(): string { 41 | return ["/admin", this.gvk().kindPlural].join("/"); 42 | } 43 | } 44 | 45 | export class CurrentUserClusterResource extends ClusterResource { 46 | private _gvk: IGroupVersionKindPlural; 47 | 48 | constructor(kind: CurrentUserClusterResourceKind) { 49 | super(); 50 | this._gvk = { 51 | group: "", 52 | version: "", 53 | kindPlural: kind, 54 | }; 55 | } 56 | 57 | gvk(): IGroupVersionKindPlural { 58 | return this._gvk; 59 | } 60 | 61 | public listPath(): string { 62 | return ["/current-user", this.gvk().kindPlural].join("/"); 63 | } 64 | } 65 | 66 | export enum CoreClusterResourceKind { 67 | WhoAmI = "whoami", 68 | Version = "versions", 69 | Contribuyente = "contribuyentes", 70 | } 71 | 72 | export enum AdminClusterResourceKind { 73 | User = "users", 74 | } 75 | 76 | export enum CurrentUserClusterResourceKind { 77 | Credentials = "credentials", 78 | Profile = "profile", 79 | } 80 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/api-client/types.ts: -------------------------------------------------------------------------------- 1 | import { AxiosError } from "axios"; 2 | 3 | export type ApiClientError = AxiosError<{ message: string }>; 4 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/api/models.tsx: -------------------------------------------------------------------------------- 1 | import { Permission } from "Constants"; 2 | 3 | export interface PageQuery { 4 | page: number; 5 | perPage: number; 6 | } 7 | 8 | export interface SortByQuery { 9 | orderBy: string | undefined; 10 | orderDirection: "asc" | "desc"; 11 | } 12 | 13 | export interface SearchResult { 14 | meta: Meta; 15 | links: Links; 16 | data: T[]; 17 | } 18 | 19 | export interface Meta { 20 | offset: number; 21 | limit: number; 22 | count: number; 23 | } 24 | 25 | export interface Links { 26 | first: string; 27 | next: string; 28 | previous: string; 29 | last: string; 30 | } 31 | 32 | export type VersionStatus = 33 | | "SCHEDULED" 34 | | "DOWNLOADING" 35 | | "UNZIPPING" 36 | | "IMPORTING" 37 | | "INDEXING" 38 | | "ERROR" 39 | | "CANCELLED" 40 | | "COMPLETED" 41 | | "DELETING" 42 | | "CANCELLING"; 43 | 44 | export interface Version { 45 | id: number; 46 | createdAt: string; 47 | updatedAt: string; 48 | status: VersionStatus; 49 | records: number; 50 | active: boolean; 51 | } 52 | 53 | export interface Contribuyente { 54 | ruc: string; 55 | dni?: string; 56 | nombre: string; 57 | estado: string; 58 | ubigeo: string; 59 | condicionDomicilio: string; 60 | tipoVia: string; 61 | nombreVia: string; 62 | codigoZona: string; 63 | tipoZona: string; 64 | numero: string; 65 | interior: string; 66 | lote: string; 67 | departamento: string; 68 | manzana: string; 69 | kilometro: string; 70 | } 71 | 72 | export interface User { 73 | id?: number; 74 | fullName?: string; 75 | username: string; 76 | password?: string; 77 | permissions?: Permission[]; 78 | authenticationScheme?: "Basic" | "Bearer"; 79 | } 80 | 81 | export interface UserPasswordChange { 82 | newPassword: string; 83 | } 84 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/frontend-components-notifications.d.ts: -------------------------------------------------------------------------------- 1 | declare module "@redhat-cloud-services/frontend-components-notifications/NotificationPortal"; 2 | declare module "@redhat-cloud-services/frontend-components-notifications/redux"; 3 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/index.scss: -------------------------------------------------------------------------------- 1 | // @import "~@patternfly/react-core/dist/styles/base.css"; 2 | // @import "~@patternfly/react-core/dist/styles/base-no-reset.css"; 3 | @import "~@patternfly/patternfly/patternfly.css"; -------------------------------------------------------------------------------- /application/src/main/webapp/src/index.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import "./index.scss"; 4 | import App from "./App"; 5 | import reportWebVitals from "./reportWebVitals"; 6 | 7 | import { QueryClientProvider, QueryClient, QueryCache } from "react-query"; 8 | import { ReactQueryDevtools } from "react-query/devtools"; 9 | 10 | import { Provider } from "react-redux"; 11 | import configureStore from "./store"; 12 | 13 | const queryCache = new QueryCache(); 14 | const queryClient = new QueryClient({ 15 | queryCache, 16 | defaultOptions: { 17 | queries: { 18 | refetchOnMount: false, 19 | refetchOnWindowFocus: false, 20 | }, 21 | }, 22 | }); 23 | 24 | ReactDOM.render( 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | , 33 | document.getElementById("root") 34 | ); 35 | 36 | // If you want to start measuring performance in your app, pass a function 37 | // to log results (for example: reportWebVitals(console.log)) 38 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 39 | reportWebVitals(); 40 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/pages/consulta-ruc/index.ts: -------------------------------------------------------------------------------- 1 | export { ConsultaRuc as default } from "./consulta-ruc"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/pages/contribuyentes/components/details-modal/details-modal.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Modal, ModalVariant, Button } from "@patternfly/react-core"; 3 | 4 | import { Contribuyente } from "api/models"; 5 | import { ContribuyenteDetails } from "shared/components"; 6 | 7 | export interface DetailsModalProps { 8 | value?: Contribuyente; 9 | onClose: () => void; 10 | } 11 | 12 | export const DetailsModal: React.FC = ({ 13 | value, 14 | onClose, 15 | }) => { 16 | return ( 17 | 25 | Cerrar 26 | , 27 | ]} 28 | > 29 | {value && } 30 | 31 | ); 32 | }; 33 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/pages/contribuyentes/components/details-modal/index.ts: -------------------------------------------------------------------------------- 1 | export { DetailsModal as ContribuyenteDetails } from "./details-modal"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/pages/contribuyentes/index.ts: -------------------------------------------------------------------------------- 1 | export { Contribuyentes as default } from "./contribuyentes"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/pages/profile/index.ts: -------------------------------------------------------------------------------- 1 | export { Profile as default } from "./profile"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/pages/users/components/user-form/index.ts: -------------------------------------------------------------------------------- 1 | export { UserForm } from "./user-form"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/pages/users/index.ts: -------------------------------------------------------------------------------- 1 | export { Users as default } from "./users"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/pages/versions/index.ts: -------------------------------------------------------------------------------- 1 | export { Versions as default } from "./versions"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/queries/fetchHelpers.ts: -------------------------------------------------------------------------------- 1 | import { useClientInstance } from "shared/hooks"; 2 | import { ClusterResource } from "api-client"; 3 | import { AxiosResponse } from "axios"; 4 | 5 | // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types 6 | export const useSearchpeClient = () => { 7 | const client = useClientInstance(); 8 | /* eslint-disable @typescript-eslint/ban-types */ 9 | return { 10 | get: ( 11 | resource: ClusterResource, 12 | name: string, 13 | params?: object 14 | ): Promise> => client.get(resource, name, params), 15 | list: ( 16 | resource: ClusterResource, 17 | params?: object 18 | ): Promise> => client.list(resource, params), 19 | create: ( 20 | resource: ClusterResource, 21 | newObject: object, 22 | params?: object 23 | ): Promise> => client.create(resource, newObject, params), 24 | delete: ( 25 | resource: ClusterResource, 26 | name: string, 27 | params?: object 28 | ): Promise> => client.delete(resource, name, params), 29 | patch: ( 30 | resource: ClusterResource, 31 | name: string, 32 | patch: object, 33 | params?: object 34 | ): Promise> => client.patch(resource, name, patch, params), 35 | put: ( 36 | resource: ClusterResource, 37 | name: string, 38 | object: object, 39 | params?: object 40 | ): Promise> => client.put(resource, name, object, params), 41 | }; 42 | /* eslint-enable @typescript-eslint/ban-types */ 43 | }; 44 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/queries/whoami.ts: -------------------------------------------------------------------------------- 1 | import { UseQueryResult, useQuery } from "react-query"; 2 | 3 | import { CoreClusterResource, CoreClusterResourceKind } from "api-client"; 4 | import { ApiClientError } from "api-client/types"; 5 | 6 | import { User } from "api/models"; 7 | import { useSearchpeClient } from "./fetchHelpers"; 8 | 9 | const whoAmIResource = new CoreClusterResource(CoreClusterResourceKind.WhoAmI); 10 | 11 | export const useWhoAmIQuery = (): UseQueryResult => { 12 | const client = useSearchpeClient(); 13 | const result = useQuery({ 14 | queryKey: "whoami", 15 | queryFn: async () => { 16 | return (await client.get(whoAmIResource, "")).data; 17 | }, 18 | refetchInterval: 60_000, 19 | retry: process.env.NODE_ENV === "development" ? false : undefined, 20 | }); 21 | return result; 22 | }; 23 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/react-app-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | /// and other contributors as indicated by the @author tags. 4 | /// 5 | /// Licensed under the Eclipse Public License - v 2.0 (the "License"); 6 | /// you may not use this file except in compliance with the License. 7 | /// You may obtain a copy of the License at 8 | /// 9 | /// https://www.eclipse.org/legal/epl-2.0/ 10 | /// 11 | /// Unless required by applicable law or agreed to in writing, software 12 | /// distributed under the License is distributed on an "AS IS" BASIS, 13 | /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | /// See the License for the specific language governing permissions and 15 | /// limitations under the License. 16 | /// 17 | 18 | /// 19 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/reportWebVitals.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | /// and other contributors as indicated by the @author tags. 4 | /// 5 | /// Licensed under the Eclipse Public License - v 2.0 (the "License"); 6 | /// you may not use this file except in compliance with the License. 7 | /// You may obtain a copy of the License at 8 | /// 9 | /// https://www.eclipse.org/legal/epl-2.0/ 10 | /// 11 | /// Unless required by applicable law or agreed to in writing, software 12 | /// distributed under the License is distributed on an "AS IS" BASIS, 13 | /// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | /// See the License for the specific language governing permissions and 15 | /// limitations under the License. 16 | /// 17 | 18 | import { ReportHandler } from 'web-vitals'; 19 | 20 | const reportWebVitals = (onPerfEntry?: ReportHandler) => { 21 | if (onPerfEntry && onPerfEntry instanceof Function) { 22 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 23 | getCLS(onPerfEntry); 24 | getFID(onPerfEntry); 25 | getFCP(onPerfEntry); 26 | getLCP(onPerfEntry); 27 | getTTFB(onPerfEntry); 28 | }); 29 | } 30 | }; 31 | 32 | export default reportWebVitals; 33 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/setupProxy.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Eclipse Public License - v 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * https://www.eclipse.org/legal/epl-2.0/ 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | const { createProxyMiddleware } = require("http-proxy-middleware"); 18 | 19 | module.exports = function (app) { 20 | app.use( 21 | "/api", 22 | createProxyMiddleware({ 23 | target: "http://localhost:8080", 24 | }) 25 | ); 26 | }; 27 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/setupTests.ts: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/contribuyente-details/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./contribuyente-details"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/controller-select/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./controller-select-multiple"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./contribuyente-details"; 2 | export * from "./controller-select"; 3 | export * from "./search-input"; 4 | export * from "./simple-page-section"; 5 | export * from "./version-status"; 6 | export * from "./welcome"; 7 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/AppAboutModal/index.ts: -------------------------------------------------------------------------------- 1 | export { AppAboutModal } from "./AppAboutModal"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/AppAboutModalState/AppAboutModalState.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | import { AppAboutModal } from "../AppAboutModal"; 3 | 4 | export interface ChildrenProps { 5 | isOpen: boolean; 6 | toggleModal: () => void; 7 | } 8 | 9 | export interface AppAboutModalStateProps { 10 | children: (args: ChildrenProps) => any; 11 | } 12 | 13 | export const AppAboutModalState: React.FC = ({ 14 | children, 15 | }) => { 16 | const [isOpen, setIsOpen] = useState(false); 17 | 18 | const toggleModal = () => { 19 | setIsOpen((current) => !current); 20 | }; 21 | 22 | return ( 23 | <> 24 | {children({ 25 | isOpen, 26 | toggleModal, 27 | })} 28 | 29 | 30 | ); 31 | }; 32 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/AppAboutModalState/index.ts: -------------------------------------------------------------------------------- 1 | export { AppAboutModalState } from "./AppAboutModalState"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/DefaultLayout/DefaultLayout.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Page, SkipToContent } from "@patternfly/react-core"; 3 | import { HeaderApp } from "../HeaderApp"; 4 | import { SidebarApp } from "../SidebarApp"; 5 | 6 | export interface DefaultLayoutProps {} 7 | 8 | export const DefaultLayout: React.FC = ({ children }) => { 9 | const pageId = "main-content-page-layout-horizontal-nav"; 10 | const PageSkipToContent = ( 11 | Skip to content 12 | ); 13 | 14 | return ( 15 | 16 | } 18 | sidebar={} 19 | isManagedSidebar 20 | skipToContent={PageSkipToContent} 21 | mainContainerId={pageId} 22 | > 23 | {children} 24 | 25 | 26 | ); 27 | }; 28 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/DefaultLayout/index.ts: -------------------------------------------------------------------------------- 1 | export { DefaultLayout } from "./DefaultLayout"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/HeaderApp/index.ts: -------------------------------------------------------------------------------- 1 | export { HeaderApp } from "./HeaderApp"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/LayoutUtils.ts: -------------------------------------------------------------------------------- 1 | type ThemeType = "light" | "dark"; 2 | export const LayoutTheme: ThemeType = "dark"; 3 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/SidebarApp/index.ts: -------------------------------------------------------------------------------- 1 | export { SidebarApp } from "./SidebarApp"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/layout/index.ts: -------------------------------------------------------------------------------- 1 | export { AppAboutModalState as ButtonAboutApp } from "./AppAboutModalState"; 2 | export { DefaultLayout } from "./DefaultLayout"; 3 | export { HeaderApp } from "./HeaderApp"; 4 | export { SidebarApp } from "./SidebarApp"; 5 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/search-input/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./search-input"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/search-input/search-input.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState } from "react"; 2 | 3 | import { Button, InputGroup, TextInput } from "@patternfly/react-core"; 4 | import { SearchIcon } from "@patternfly/react-icons"; 5 | 6 | export interface SearchInputProps { 7 | onSearch: (filterText: string) => void; 8 | } 9 | 10 | export const SearchInput: React.FC = ({ onSearch }) => { 11 | const [filterText, setFilterText] = useState(""); 12 | 13 | const callSearch = () => { 14 | onSearch(filterText); 15 | }; 16 | 17 | const handleOnKeyDown = (event: any) => { 18 | if (event.key === "Enter") { 19 | callSearch(); 20 | } 21 | }; 22 | 23 | return ( 24 | 25 | 34 | 37 | 38 | ); 39 | }; 40 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/simple-page-section/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./simple-page-section"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/simple-page-section/simple-page-section.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { 3 | PageSection, 4 | PageSectionVariants, 5 | TextContent, 6 | Text, 7 | } from "@patternfly/react-core"; 8 | 9 | export interface SimplePageSectionProps { 10 | title: string; 11 | description?: string; 12 | } 13 | 14 | export const SimplePageSection: React.FC = ({ 15 | title, 16 | description, 17 | }) => { 18 | return ( 19 | 20 | 21 | {title} 22 | {description && {description}} 23 | 24 | 25 | ); 26 | }; 27 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/version-status/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./version-status"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/welcome/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./welcome"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/components/welcome/welcome.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { 3 | EmptyState, 4 | Title, 5 | EmptyStateBody, 6 | Button, 7 | EmptyStateVariant, 8 | EmptyStateSecondaryActions, 9 | EmptyStateIcon, 10 | } from "@patternfly/react-core"; 11 | import { RocketIcon } from "@patternfly/react-icons"; 12 | 13 | export interface WelcomeProps { 14 | onPrimaryAction: () => void; 15 | } 16 | 17 | export const Welcome: React.FC = ({ onPrimaryAction }) => { 18 | return ( 19 | 20 | 21 | 22 | Bienvenido a Searchpe 23 | 24 | 25 | Searchpe te ayuda a consumir los datos proveidos por la SUNAT a travéz 26 | del 'padrón reducido'. Antes de empezar a consultar datos, necesitas 27 | crear una Versión. 28 | 29 | 32 | 33 | Para aprender más visita la 34 | 39 | documentación. 40 | 41 | 42 | 43 | ); 44 | }; 45 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/containers/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./visibility-by-permission"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/containers/visibility-by-permission/index.ts: -------------------------------------------------------------------------------- 1 | export { VisibilityByPermission } from "./visibility-by-permission"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/containers/visibility-by-permission/visibility-by-permission.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Permission } from "Constants"; 3 | import { usePermission } from "shared/hooks"; 4 | 5 | export interface VisibilityByPermissionProps { 6 | hasAny: Permission[]; 7 | } 8 | 9 | export const VisibilityByPermission: React.FC = ({ 10 | hasAny, 11 | children, 12 | }) => { 13 | const { isAllowed } = usePermission({ hasAny }); 14 | return <>{isAllowed && children}; 15 | }; 16 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/hooks/index.ts: -------------------------------------------------------------------------------- 1 | export { useClientInstance } from "./useClientInstance"; 2 | export { usePermission } from "./usePermission"; 3 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/hooks/useClientInstance/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./useClientInstance"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/hooks/useClientInstance/useClientInstance.ts: -------------------------------------------------------------------------------- 1 | import { ClusterClient, ClientFactory } from "api-client"; 2 | 3 | export const useClientInstance = (): ClusterClient => { 4 | const result = ClientFactory.cluster("/api"); 5 | return result; 6 | }; 7 | 8 | export default useClientInstance; 9 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/hooks/usePermission/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./usePermission"; 2 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/shared/hooks/usePermission/usePermission.ts: -------------------------------------------------------------------------------- 1 | import { isAuthDisabled, Permission } from "Constants"; 2 | import { useWhoAmIQuery } from "queries/whoami"; 3 | 4 | export interface IArgs { 5 | hasAny: Permission[]; 6 | } 7 | 8 | export interface IState { 9 | isAllowed: boolean; 10 | } 11 | 12 | export const usePermission = ({ hasAny }: IArgs): IState => { 13 | const whoAmI = useWhoAmIQuery(); 14 | 15 | const userPermissions = whoAmI.data?.permissions || []; 16 | const isAllowed = hasAny.some((permission) => { 17 | return userPermissions.some((f) => f === permission); 18 | }); 19 | 20 | return { 21 | isAllowed: isAllowed || isAuthDisabled(), 22 | }; 23 | }; 24 | 25 | export default usePermission; 26 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/store/alert/actions.test.ts: -------------------------------------------------------------------------------- 1 | import { addAlert } from "./actions"; 2 | 3 | describe("Alert actions", () => { 4 | it("addAlert create actions", () => { 5 | const expectedAction = { 6 | type: "@@INSIGHTS-CORE/NOTIFICATIONS/ADD_NOTIFICATION", 7 | payload: { 8 | variant: "danger", 9 | title: "my title", 10 | description: "my message", 11 | }, 12 | }; 13 | 14 | const alertAction = addAlert("danger", "my title", "my message"); 15 | expect(JSON.stringify(alertAction)).toBe(JSON.stringify(expectedAction)); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/store/alert/actions.tsx: -------------------------------------------------------------------------------- 1 | import { addNotification } from "@redhat-cloud-services/frontend-components-notifications/redux"; 2 | 3 | type Variant = "danger" | "success"; 4 | 5 | export const addAlert = ( 6 | variant: Variant, 7 | title: string, 8 | description: string 9 | ) => { 10 | return addNotification({ 11 | variant, 12 | title, 13 | description, 14 | }); 15 | }; 16 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/store/alert/index.tsx: -------------------------------------------------------------------------------- 1 | import * as alertActions from "./actions"; 2 | 3 | export { alertActions }; 4 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/store/common.ts: -------------------------------------------------------------------------------- 1 | import { MapDispatchToProps, MapStateToProps } from "react-redux"; 2 | import { RootState } from "./rootReducer"; 3 | 4 | export function createMapStateToProps( 5 | mapStateToProps: MapStateToProps 6 | ) { 7 | return mapStateToProps; 8 | } 9 | 10 | export function createMapDispatchToProps( 11 | mapDispatchToProps: MapDispatchToProps 12 | ) { 13 | return mapDispatchToProps; 14 | } 15 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/store/index.tsx: -------------------------------------------------------------------------------- 1 | import { createStore, applyMiddleware } from "redux"; 2 | import thunk from "redux-thunk"; 3 | import logger from "redux-logger"; 4 | import { composeWithDevTools } from "redux-devtools-extension"; 5 | import { rootReducer } from "./rootReducer"; 6 | 7 | export default function configureStore() { 8 | return createStore( 9 | rootReducer, 10 | composeWithDevTools( 11 | process.env.NODE_ENV === "production" 12 | ? applyMiddleware(thunk) 13 | : applyMiddleware(logger, thunk) 14 | ) 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/store/reducerUtils.tsx: -------------------------------------------------------------------------------- 1 | import { applyMiddleware, createStore } from "redux"; 2 | import thunk from "redux-thunk"; 3 | import { rootReducer } from "./rootReducer"; 4 | 5 | export const mockStore = (initialStatus?: any) => 6 | initialStatus 7 | ? createStore(rootReducer, initialStatus, applyMiddleware(thunk)) 8 | : createStore(rootReducer, applyMiddleware(thunk)); 9 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/store/rootReducer.tsx: -------------------------------------------------------------------------------- 1 | import { combineReducers } from "redux"; 2 | import { StateType } from "typesafe-actions"; 3 | 4 | import { notificationsReducer } from "@redhat-cloud-services/frontend-components-notifications/redux"; 5 | 6 | export type RootState = StateType; 7 | 8 | export const rootReducer = combineReducers({ 9 | notifications: notificationsReducer, 10 | }); 11 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/utils/dateUtils.ts: -------------------------------------------------------------------------------- 1 | import dayjs from "dayjs"; 2 | import advancedFormat from "dayjs/plugin/advancedFormat"; 3 | import utc from "dayjs/plugin/utc"; 4 | import timezone from "dayjs/plugin/timezone"; 5 | import localizedFormat from "dayjs/plugin/localizedFormat"; 6 | import relativeTime from "dayjs/plugin/relativeTime"; 7 | 8 | dayjs.extend(utc); 9 | dayjs.extend(timezone); 10 | dayjs.extend(advancedFormat); 11 | dayjs.extend(localizedFormat); 12 | dayjs.extend(relativeTime); 13 | dayjs.tz.guess(); 14 | 15 | export const fromNow = (timestamp: Date | number | string): string => { 16 | return timestamp ? dayjs(timestamp).fromNow() : ""; 17 | }; 18 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/utils/modelUtils.test.ts: -------------------------------------------------------------------------------- 1 | import { AxiosError } from "axios"; 2 | import { getAxiosErrorMessage } from "./modelUtils"; 3 | 4 | describe("modelUtils", () => { 5 | it("getAxiosErrorMessage should pick AxiosError message", () => { 6 | const errorMsg = "Network error"; 7 | 8 | const mockAxiosError: AxiosError = { 9 | isAxiosError: true, 10 | name: "error", 11 | message: errorMsg, 12 | config: {}, 13 | toJSON: () => ({}), 14 | }; 15 | 16 | const errorMessage = getAxiosErrorMessage(mockAxiosError); 17 | expect(errorMessage).toBe(errorMsg); 18 | }); 19 | 20 | it("getAxiosErrorMessage should pick AxiosError body message", () => { 21 | const errorMsg = "Internal server error"; 22 | 23 | const mockAxiosError: AxiosError = { 24 | isAxiosError: true, 25 | name: "error", 26 | message: "Network error", 27 | config: {}, 28 | response: { 29 | data: { 30 | message: errorMsg, 31 | }, 32 | status: 400, 33 | statusText: "", 34 | headers: {}, 35 | config: {}, 36 | }, 37 | toJSON: () => ({}), 38 | }; 39 | 40 | const errorMessage = getAxiosErrorMessage(mockAxiosError); 41 | expect(errorMessage).toBe(errorMsg); 42 | }); 43 | }); 44 | -------------------------------------------------------------------------------- /application/src/main/webapp/src/utils/modelUtils.ts: -------------------------------------------------------------------------------- 1 | import { AxiosError } from "axios"; 2 | 3 | export const getBaseApiUrl = (): string => { 4 | return (window as any)["SEARCHPE_API_URL"] || "/api"; 5 | }; 6 | 7 | // Axios error 8 | 9 | export const getAxiosErrorMessage = (axiosError: AxiosError) => { 10 | if (axiosError.response?.data.message) { 11 | return axiosError.response?.data.message; 12 | } 13 | return axiosError.message; 14 | }; 15 | 16 | export const formatNumber = (value: number, fractionDigits = 2) => { 17 | return value.toLocaleString("en", { 18 | style: "decimal", 19 | minimumFractionDigits: fractionDigits, 20 | maximumFractionDigits: fractionDigits, 21 | }); 22 | }; 23 | 24 | // Form 25 | 26 | export const getValidatedFromError = ( 27 | error: any 28 | ): "success" | "warning" | "error" | "default" => { 29 | return error ? "error" : "default"; 30 | }; 31 | 32 | export const getValidatedFromErrorTouched = ( 33 | error: any, 34 | touched: boolean | undefined 35 | ): "success" | "warning" | "error" | "default" => { 36 | return error && touched ? "error" : "default"; 37 | }; 38 | -------------------------------------------------------------------------------- /application/src/main/webapp/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": [ 5 | "dom", 6 | "dom.iterable", 7 | "esnext" 8 | ], 9 | "allowJs": true, 10 | "skipLibCheck": true, 11 | "esModuleInterop": true, 12 | "allowSyntheticDefaultImports": true, 13 | "strict": true, 14 | "forceConsistentCasingInFileNames": true, 15 | "noFallthroughCasesInSwitch": true, 16 | "module": "esnext", 17 | "moduleResolution": "node", 18 | "resolveJsonModule": true, 19 | "isolatedModules": true, 20 | "noEmit": true, 21 | "jsx": "react-jsx", 22 | "baseUrl": "src" 23 | }, 24 | "include": [ 25 | "src" 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /application/src/test/java/io/github/project/openubl/searchpe/AdvancedSearchEnabledManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe; 18 | 19 | import java.util.HashMap; 20 | import java.util.Map; 21 | 22 | public class AdvancedSearchEnabledManager extends ProfileManager { 23 | 24 | @Override 25 | public String getProfile() { 26 | return "basic"; 27 | } 28 | 29 | @Override 30 | public Map getConfigOverrides() { 31 | return new HashMap<>(){{ 32 | put("searchpe.allow.advancedSearch", "true"); 33 | }}; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /application/src/test/java/io/github/project/openubl/searchpe/BasicProfileManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe; 18 | 19 | public class BasicProfileManager extends ProfileManager { 20 | 21 | @Override 22 | public String getProfile() { 23 | return "basic"; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /application/src/test/java/io/github/project/openubl/searchpe/DefaultProfileManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe; 18 | 19 | public class DefaultProfileManager extends ProfileManager { 20 | 21 | @Override 22 | public String getProfile() { 23 | return ""; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /application/src/test/java/io/github/project/openubl/searchpe/ProfileManager.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.searchpe; 18 | 19 | import io.github.project.openubl.searchpe.resources.config.SunatServer; 20 | import io.quarkus.test.junit.QuarkusTestProfile; 21 | 22 | import java.util.ArrayList; 23 | import java.util.List; 24 | 25 | public abstract class ProfileManager implements QuarkusTestProfile { 26 | 27 | private List testResources = new ArrayList<>(); 28 | 29 | public ProfileManager() { 30 | testResources.add(new TestResourceEntry(SunatServer.class)); 31 | } 32 | 33 | public abstract String getProfile(); 34 | 35 | @Override 36 | public String getConfigProfile() { 37 | return "test," + getProfile(); 38 | } 39 | 40 | @Override 41 | public List testResources() { 42 | return testResources; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /application/src/test/resources/db/basic-authentication/V9000.0.1__basic-authentication.sql: -------------------------------------------------------------------------------- 1 | insert into BASIC_USER(id, full_name, username, password, permissions, version) 2 | values (nextval('basic_user_sequence'), 'Carlos Feria', 'admin', 3 | '$2a$10$Vu8TWiCj.qO7l8XTM8JYqOPjfF5Y4f/HbWvQwkIMA.EOtYS3ziddC', 'admin:app', 1), 4 | (nextval('basic_user_sequence'), 'Alice Smith', 'alice', 5 | '$2a$10$kycqeNLdoIhDgn5oegz.ie1QsUWD5l0cCb.4.0iDKp9x1NUjrwyAG', 'search,version:write', 1); 6 | -------------------------------------------------------------------------------- /application/src/test/resources/db/io/github/project/openubl/searchpe/resources/ContribuyenteResourceTest/V9999.0.1__test.sql: -------------------------------------------------------------------------------- 1 | -- Start version_sequence from 1000 to avoid conflicts with the IDs set in VERSION table 2 | alter sequence version_sequence restart with 1000; 3 | 4 | insert into VERSION(id, status, records, created_at, updated_at, version) 5 | values (1, 'ERROR', 1000000, CURRENT_TIMESTAMP - INTERVAL '1 day', CURRENT_TIMESTAMP - INTERVAL '1 day', 1), 6 | (2, 'COMPLETED', 5000000, CURRENT_TIMESTAMP - INTERVAL '2 day', CURRENT_TIMESTAMP - INTERVAL '2 day', 1), 7 | (3, 'COMPLETED', 9000000, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1); 8 | 9 | -- Contribuyentes 10 | create table CONTRIBUYENTE_VERSION_1 partition of CONTRIBUYENTE for values from (1) TO (2); 11 | create table CONTRIBUYENTE_VERSION_2 partition of CONTRIBUYENTE for values from (2) TO (3); 12 | create table CONTRIBUYENTE_VERSION_3 partition of CONTRIBUYENTE for values from (3) TO (4); 13 | 14 | insert into CONTRIBUYENTE(version_id, ruc, nombre) 15 | values (3, '11111111111', 'mi empresa1'), 16 | (3, '22222222222', 'mi empresa2'); -------------------------------------------------------------------------------- /application/src/test/resources/db/io/github/project/openubl/searchpe/resources/VersionResourceTest/V9999.0.1__test.sql: -------------------------------------------------------------------------------- 1 | -- Start version_sequence from 1000 to avoid conflicts with the IDs set in VERSION table 2 | alter sequence version_sequence restart with 1000; 3 | 4 | insert into VERSION(id, status, records, created_at, updated_at, version) 5 | values (1, 'ERROR', 1000000, CURRENT_TIMESTAMP - INTERVAL '1 day', CURRENT_TIMESTAMP - INTERVAL '1 day', 1), 6 | (2, 'COMPLETED', 5000000, CURRENT_TIMESTAMP - INTERVAL '2 day', CURRENT_TIMESTAMP - INTERVAL '2 day', 1), 7 | (3, 'COMPLETED', 9000000, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 1); 8 | 9 | -- Contribuyente 10 | create table CONTRIBUYENTE_VERSION_1 partition of CONTRIBUYENTE for values from (1) TO (2); 11 | create table CONTRIBUYENTE_VERSION_2 partition of CONTRIBUYENTE for values from (2) TO (3); 12 | create table CONTRIBUYENTE_VERSION_3 partition of CONTRIBUYENTE for values from (3) TO (4); 13 | 14 | insert into CONTRIBUYENTE(version_id, ruc, nombre) 15 | values (3, '11111111111', 'mi empresa1'), 16 | (3, '22222222222', 'mi empresa2'); -------------------------------------------------------------------------------- /application/src/test/resources/padron_reducido_ruc.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/application/src/test/resources/padron_reducido_ruc.zip -------------------------------------------------------------------------------- /operator/.dockerignore: -------------------------------------------------------------------------------- 1 | * 2 | !target/*-runner 3 | !target/*-runner.jar 4 | !target/lib/* 5 | !target/quarkus-app/* -------------------------------------------------------------------------------- /operator/src/main/docker/Dockerfile.native: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # 4 | # Before building the container image run: 5 | # 6 | # ./mvnw package -Pnative 7 | # 8 | # Then, build the image with: 9 | # 10 | # docker build -f src/main/docker/Dockerfile.native -t quarkus/code-with-quarkus . 11 | # 12 | # Then run the container using: 13 | # 14 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 15 | # 16 | ### 17 | FROM registry.access.redhat.com/ubi8/ubi-minimal:8.6 18 | WORKDIR /work/ 19 | RUN chown 1001 /work \ 20 | && chmod "g+rwX" /work \ 21 | && chown 1001:root /work 22 | COPY --chown=1001:root target/*-runner /work/application 23 | 24 | EXPOSE 8080 25 | USER 1001 26 | 27 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] 28 | -------------------------------------------------------------------------------- /operator/src/main/docker/Dockerfile.native-micro: -------------------------------------------------------------------------------- 1 | #### 2 | # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. 3 | # It uses a micro base image, tuned for Quarkus native executables. 4 | # It reduces the size of the resulting container image. 5 | # Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. 6 | # 7 | # Before building the container image run: 8 | # 9 | # ./mvnw package -Pnative 10 | # 11 | # Then, build the image with: 12 | # 13 | # docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/code-with-quarkus . 14 | # 15 | # Then run the container using: 16 | # 17 | # docker run -i --rm -p 8080:8080 quarkus/code-with-quarkus 18 | # 19 | ### 20 | FROM quay.io/quarkus/quarkus-micro-image:1.0 21 | WORKDIR /work/ 22 | RUN chown 1001 /work \ 23 | && chmod "g+rwX" /work \ 24 | && chown 1001:root /work 25 | COPY --chown=1001:root target/*-runner /work/application 26 | 27 | EXPOSE 8080 28 | USER 1001 29 | 30 | CMD ["./application", "-Dquarkus.http.host=0.0.0.0"] 31 | -------------------------------------------------------------------------------- /operator/src/main/java/io/github/project/openubl/operator/Config.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.operator; 18 | 19 | import io.smallrye.config.ConfigMapping; 20 | 21 | @ConfigMapping(prefix = "operator") 22 | public interface Config { 23 | 24 | Searchpe searchpe(); 25 | 26 | interface Searchpe { 27 | String image(); 28 | 29 | String imagePullPolicy(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /operator/src/main/java/io/github/project/openubl/operator/ValueOrSecret.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.operator; 18 | 19 | import io.fabric8.kubernetes.api.model.SecretKeySelector; 20 | import lombok.AllArgsConstructor; 21 | import lombok.Builder; 22 | import lombok.Data; 23 | import lombok.NoArgsConstructor; 24 | 25 | @Data 26 | @Builder 27 | @NoArgsConstructor 28 | @AllArgsConstructor 29 | public class ValueOrSecret { 30 | private String name; 31 | private String value; 32 | private SecretKeySelector secret; 33 | } 34 | -------------------------------------------------------------------------------- /operator/src/main/java/io/github/project/openubl/operator/cdrs/v2alpha1/Searchpe.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.operator.cdrs.v2alpha1; 18 | 19 | import io.fabric8.kubernetes.api.model.Namespaced; 20 | import io.fabric8.kubernetes.client.CustomResource; 21 | import io.fabric8.kubernetes.model.annotation.Group; 22 | import io.fabric8.kubernetes.model.annotation.Version; 23 | import io.github.project.openubl.operator.Constants; 24 | 25 | @Group(Constants.CRDS_GROUP) 26 | @Version(Constants.CRDS_VERSION) 27 | public class Searchpe extends CustomResource implements Namespaced { 28 | 29 | @Override 30 | protected SearchpeSpec initSpec() { 31 | return new SearchpeSpec(); 32 | } 33 | 34 | @Override 35 | protected SearchpeStatus initStatus() { 36 | return new SearchpeStatus(); 37 | } 38 | 39 | } 40 | 41 | -------------------------------------------------------------------------------- /operator/src/main/java/io/github/project/openubl/operator/cdrs/v2alpha1/SearchpeStatus.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.operator.cdrs.v2alpha1; 18 | 19 | import lombok.AllArgsConstructor; 20 | import lombok.Builder; 21 | import lombok.Data; 22 | import lombok.NoArgsConstructor; 23 | 24 | import java.util.List; 25 | 26 | @Data 27 | @Builder 28 | @NoArgsConstructor 29 | @AllArgsConstructor 30 | public class SearchpeStatus { 31 | private List conditions; 32 | } 33 | -------------------------------------------------------------------------------- /operator/src/main/java/io/github/project/openubl/operator/cdrs/v2alpha1/SearchpeStatusCondition.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.operator.cdrs.v2alpha1; 18 | 19 | import lombok.AllArgsConstructor; 20 | import lombok.Builder; 21 | import lombok.Data; 22 | import lombok.NoArgsConstructor; 23 | 24 | @Data 25 | @Builder 26 | @NoArgsConstructor 27 | @AllArgsConstructor 28 | public class SearchpeStatusCondition { 29 | public static final String READY = "Ready"; 30 | public static final String HAS_ERRORS = "HasErrors"; 31 | public static final String ROLLING_UPDATE = "RollingUpdate"; 32 | 33 | // string to avoid enums in CRDs 34 | private String type; 35 | private Boolean status; 36 | private String message; 37 | 38 | } 39 | -------------------------------------------------------------------------------- /operator/src/main/java/io/github/project/openubl/operator/utils/CRDUtils.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 3 | * and other contributors as indicated by the @author tags. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | package io.github.project.openubl.operator.utils; 18 | 19 | import java.util.Optional; 20 | import java.util.function.Function; 21 | 22 | public class CRDUtils { 23 | 24 | public static Optional getValueFromSubSpec(T subSpec, Function valueSupplier) { 25 | if (subSpec != null) { 26 | return Optional.ofNullable(valueSupplier.apply(subSpec)); 27 | } else { 28 | return Optional.empty(); 29 | } 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /operator/src/main/kubernetes/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/project-openubl/searchpe/f43c9698b9fe5e1d08a6be1079d128065e39a630/operator/src/main/kubernetes/icon.png -------------------------------------------------------------------------------- /operator/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | quarkus.container-image.build=false 2 | quarkus.container-image.registry=quay.io 3 | quarkus.container-image.group=projectopenubl 4 | quarkus.container-image.name=searchpe-operator 5 | 6 | # set to true to automatically apply CRDs to the cluster when they get regenerated 7 | quarkus.operator-sdk.crd.apply=true 8 | 9 | # Operator config 10 | operator.searchpe.image=quay.io/projectopenubl/searchpe:nightly 11 | operator.searchpe.image-pull-policy=Always 12 | 13 | # https://quarkus.io/guides/deploying-to-kubernetes#environment-variables-from-keyvalue-pairs 14 | quarkus.kubernetes.env.vars.operator-searchpe-image=${operator.searchpe.image} 15 | quarkus.openshift.env.vars.operator-searchpe-image=${operator.searchpe.image} 16 | 17 | quarkus.kubernetes.resources.requests.memory=64Mi 18 | quarkus.kubernetes.resources.requests.cpu=50m 19 | quarkus.kubernetes.resources.limits.memory=256Mi 20 | quarkus.kubernetes.resources.limits.cpu=250m -------------------------------------------------------------------------------- /operator/src/main/resources/searchpe.yml: -------------------------------------------------------------------------------- 1 | kind: "Searchpe" 2 | apiVersion: "searchpe.openubl.io/v1alpha1" 3 | metadata: 4 | name: searchpe 5 | spec: 6 | db: 7 | usernameSecret: 8 | name: postgresql-pguser-foo 9 | key: user 10 | passwordSecret: 11 | name: postgresql-pguser-foo 12 | key: password 13 | url: jdbc:postgresql://postgresql-primary.default.svc:5432/searchpedb 14 | -------------------------------------------------------------------------------- /scripts/postgresql.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: postgres-operator.crunchydata.com/v1beta1 2 | kind: PostgresCluster 3 | metadata: 4 | name: postgresql 5 | spec: 6 | postgresVersion: 14 7 | instances: 8 | - name: pg-1 9 | replicas: 1 10 | dataVolumeClaimSpec: 11 | accessModes: 12 | - ReadWriteOnce 13 | resources: 14 | requests: 15 | storage: 1Gi 16 | backups: 17 | pgbackrest: 18 | repos: 19 | - name: repo1 20 | volume: 21 | volumeClaimSpec: 22 | accessModes: 23 | - ReadWriteOnce 24 | resources: 25 | requests: 26 | storage: 1Gi 27 | users: 28 | - name: foo 29 | databases: 30 | - searchpedb 31 | options: "SUPERUSER" -------------------------------------------------------------------------------- /scripts/searchpe-operator.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: operators.coreos.com/v1alpha1 2 | kind: CatalogSource 3 | metadata: 4 | name: searchpe-catalog-source 5 | namespace: olm 6 | spec: 7 | sourceType: grpc 8 | image: localhost:5000/searchpe-operator-catalog:0.0.0 9 | --- 10 | apiVersion: operators.coreos.com/v1 11 | kind: OperatorGroup 12 | metadata: 13 | name: operatorgroup 14 | namespace: openubl 15 | spec: 16 | targetNamespaces: 17 | - openubl 18 | --- 19 | apiVersion: operators.coreos.com/v1alpha1 20 | kind: Subscription 21 | metadata: 22 | name: searchpe-subscription 23 | namespace: openubl 24 | spec: 25 | channel: alpha 26 | name: searchpe-operator 27 | source: searchpe-catalog-source 28 | sourceNamespace: olm 29 | -------------------------------------------------------------------------------- /scripts/searchpe.yaml: -------------------------------------------------------------------------------- 1 | kind: "Searchpe" 2 | apiVersion: "searchpe.openubl.io/v1alpha1" 3 | metadata: 4 | name: searchpe 5 | spec: 6 | sunat: 7 | padronReducidoUrl: https://raw.githubusercontent.com/project-openubl/searchpe/master/application/src/test/resources/padron_reducido_ruc.zip 8 | db: 9 | usernameSecret: 10 | name: postgresql-pguser-foo 11 | key: user 12 | passwordSecret: 13 | name: postgresql-pguser-foo 14 | key: password 15 | url: jdbc:postgresql://postgresql-primary.openubl.svc:5432/searchpedb -------------------------------------------------------------------------------- /src/jreleaser/templates/article/release.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{projectNameCapitalized}} {{projectEffectiveVersion}} released! 3 | description: {{projectEffectiveVersion}} es el último release. 4 | date: {{#f_now}}YYYY-MM-dd{{/f_now}} 5 | authors: [carlosthe19916] 6 | tags: [searchpe, release] 7 | --- 8 | 9 | Acabamos de lanzar {{projectNameCapitalized}} {{projectEffectiveVersion}} con un conjunto de nuevas funcionalidades, corrección de errores, y mejor documentación. 10 | 11 | ## Full changelog 12 | 13 | Puedes ver [the full changelog of {{projectEffectiveVersion}} on GitHub]({{releaseNotesUrl}}). 14 | -------------------------------------------------------------------------------- /tools/copyright.txt: -------------------------------------------------------------------------------- 1 | Copyright 2019 Project OpenUBL, Inc. and/or its affiliates 2 | and other contributors as indicated by the @author tags. 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | --------------------------------------------------------------------------------