From 83bcef05783742c5dfa1e06d0c29ada8be7e9975 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Mon, 11 Oct 2021 10:22:13 +0200 Subject: [PATCH 01/24] initial refactoring --- .circleci/config.yml | 45 --- .github/workflows/prerelease.yml | 33 +- Dockerfile-beta-deploy | 53 ---- Dockerfile-build | 71 ----- Dockerfile-build-from-base | 36 --- Dockerfile-dev | 4 - Dockerfile-dev-build | 85 ------ README.md | 1 - Taskfile.yml | 288 +----------------- build/package_dependencies.sh | 8 +- config/default.yml | 41 +-- docker/files/api/Dockerfile | 28 ++ docker/files/api/entrypoint.sh | 3 + docker/files/install-mustache-cli.sh | 8 + docker/files/mora/Dockerfile | 33 ++ docker/files/mora/entrypoint.sh | 5 + docker/files/proxy/Dockerfile | 66 ++++ docker/files/rsyslog/Dockerfile | 27 ++ docker/files/rsyslog/entrypoint.sh | 7 + docker/files/trafficserver/Dockerfile | 52 ++++ docker/files/trafficserver/entrypoint.sh | 13 + docker/files/ui/Dockerfile | 10 + src/api-umbrella/admin-ui/node_modules | 1 - .../admin-ui/.editorconfig | 0 src/{api-umbrella => js}/admin-ui/.ember-cli | 0 .../admin-ui/.eslintignore | 0 .../admin-ui/.eslintrc.js | 0 src/{api-umbrella => js}/admin-ui/.gitignore | 0 .../admin-ui/.template-lintrc.js | 0 .../admin-ui/.watchmanconfig | 0 src/{api-umbrella => js}/admin-ui/.yarnrc | 0 src/{api-umbrella => js}/admin-ui/README.md | 0 .../admin-ui/app/adapters/application.js | 1 + src/{api-umbrella => js}/admin-ui/app/app.js | 0 .../app/authenticators/devise-server-side.js | 0 .../admin-ui/app/components/.gitkeep | 0 .../components/admin-groups/index-table.js | 0 .../components/admin-groups/record-form.js | 0 .../app/components/admins/index-table.js | 0 .../app/components/admins/record-form.js | 0 .../app/components/api-scopes/index-table.js | 0 .../app/components/api-scopes/record-form.js | 0 .../app/components/api-users/index-table.js | 0 .../app/components/api-users/record-form.js | 0 .../app/components/apis/index-table.js | 0 .../app/components/apis/record-form.js | 0 .../app/components/apis/rewrite-form.js | 0 .../app/components/apis/rewrite-table.js | 0 .../app/components/apis/server-form.js | 0 .../app/components/apis/server-table.js | 0 .../apis/settings/allowed-ips-fields.js | 0 .../apis/settings/allowed-referers-fields.js | 0 .../components/apis/settings/common-fields.js | 0 .../apis/settings/rate-limit-fields.js | 0 .../app/components/apis/sub-settings-form.js | 0 .../app/components/apis/sub-settings-table.js | 0 .../app/components/apis/url-match-form.js | 0 .../app/components/apis/url-match-table.js | 0 .../admin-ui/app/components/busy-blocker.js | 0 .../components/config/publish-form-records.js | 0 .../app/components/config/publish-form.js | 0 .../admin-ui/app/components/error-messages.js | 0 .../admin-ui/app/components/fields-for.js | 0 .../app/components/form-fields/base-field.js | 0 .../components/form-fields/checkbox-field.js | 0 .../form-fields/checkboxes-field.js | 0 .../form-fields/codemirror-field.js | 0 .../components/form-fields/error-messages.js | 0 .../components/form-fields/field-wrapper.js | 0 .../app/components/form-fields/hint.js | 0 .../components/form-fields/password-field.js | 0 .../components/form-fields/select-field.js | 0 .../components/form-fields/selectize-field.js | 0 .../components/form-fields/static-field.js | 0 .../app/components/form-fields/text-field.js | 0 .../components/form-fields/textarea-field.js | 0 .../admin-ui/app/components/help-tooltip.js | 0 .../admin-ui/app/components/select-menu.js | 0 .../stats/drilldown/results-breadcrumbs.js | 0 .../stats/drilldown/results-chart.js | 0 .../stats/drilldown/results-table.js | 0 .../components/stats/logs/results-chart.js | 0 .../stats/logs/results-facet-table.js | 0 .../stats/logs/results-highlights.js | 0 .../components/stats/logs/results-table.js | 0 .../stats/map/results-breadcrumbs.js | 0 .../app/components/stats/map/results-map.js | 0 .../app/components/stats/map/results-table.js | 0 .../app/components/stats/query-form.js | 0 .../components/stats/users/results-table.js | 0 .../website-backends/index-table.js | 0 .../website-backends/record-form.js | 0 .../admin-ui/app/controllers/.gitkeep | 0 .../admin-ui/app/controllers/application.js | 0 .../app/controllers/config/publish.js | 0 .../admin-ui/app/controllers/stats/base.js | 0 .../app/controllers/stats/drilldown.js | 0 .../admin-ui/app/controllers/stats/logs.js | 0 .../admin-ui/app/controllers/stats/map.js | 0 .../admin-ui/app/controllers/stats/users.js | 0 .../admin-ui/app/helpers/.gitkeep | 0 .../admin-ui/app/helpers/format-date.js | 0 .../admin-ui/app/helpers/format-number.js | 0 .../admin-ui/app/helpers/guid-for.js | 0 .../admin-ui/app/helpers/html-safe.js | 0 .../admin-ui/app/helpers/inflect.js | 0 .../admin-ui/app/helpers/t.js | 0 .../admin-ui/app/index.html | 0 .../admin-ui/app/initializers/bootbox.js | 0 .../admin-ui/app/initializers/bootstrap.js | 0 .../admin-ui/app/initializers/echarts.js | 0 .../admin-ui/app/initializers/fontawesome.js | 0 .../admin-ui/app/initializers/inflections.js | 0 .../admin-ui/app/initializers/pnotify.js | 0 .../initializers/test-disable-animations.js | 0 .../initializers/test-disable-fixed-header.js | 0 .../admin-ui/app/initializers/test-pnotify.js | 0 .../app/initializers/test-timekeeper.js | 0 .../admin-ui/app/initializers/tooltips.js | 0 .../app/instance-initializers/datatables.js | 0 .../app/instance-initializers/jquery-ajax.js | 0 .../admin-ui/app/mixins/confirmation.js | 0 .../admin-ui/app/mixins/save.js | 0 .../admin-ui/app/mixins/sortable.js | 0 .../admin-ui/app/mixins/uncached-model.js | 0 .../admin-ui/app/models/.gitkeep | 0 .../admin-ui/app/models/admin-group.js | 0 .../admin-ui/app/models/admin-permission.js | 0 .../admin-ui/app/models/admin.js | 0 .../admin-ui/app/models/api-scope.js | 0 .../admin-ui/app/models/api-user-role.js | 0 .../admin-ui/app/models/api-user.js | 0 .../admin-ui/app/models/api.js | 0 .../admin-ui/app/models/api/rate-limit.js | 0 .../admin-ui/app/models/api/rewrite.js | 0 .../admin-ui/app/models/api/server.js | 0 .../admin-ui/app/models/api/settings.js | 0 .../admin-ui/app/models/api/sub-settings.js | 0 .../admin-ui/app/models/api/url-match.js | 0 .../app/models/config-pending-changes.js | 0 .../admin-ui/app/models/stats/drilldown.js | 0 .../admin-ui/app/models/stats/logs.js | 0 .../admin-ui/app/models/stats/map.js | 0 .../admin-ui/app/models/website-backend.js | 0 .../admin-ui/app/resolver.js | 0 .../admin-ui/app/router.js | 0 .../admin-ui/app/routes/.gitkeep | 0 .../admin-ui/app/routes/admin-groups/base.js | 0 .../admin-ui/app/routes/admin-groups/edit.js | 0 .../admin-ui/app/routes/admin-groups/form.js | 0 .../admin-ui/app/routes/admin-groups/index.js | 0 .../admin-ui/app/routes/admin-groups/new.js | 0 .../admin-ui/app/routes/admins/base.js | 0 .../admin-ui/app/routes/admins/edit.js | 0 .../admin-ui/app/routes/admins/form.js | 0 .../admin-ui/app/routes/admins/index.js | 0 .../admin-ui/app/routes/admins/new.js | 0 .../admin-ui/app/routes/api-scopes/base.js | 0 .../admin-ui/app/routes/api-scopes/edit.js | 0 .../admin-ui/app/routes/api-scopes/form.js | 0 .../admin-ui/app/routes/api-scopes/index.js | 0 .../admin-ui/app/routes/api-scopes/new.js | 0 .../admin-ui/app/routes/api-users/base.js | 0 .../admin-ui/app/routes/api-users/edit.js | 0 .../admin-ui/app/routes/api-users/form.js | 0 .../admin-ui/app/routes/api-users/index.js | 0 .../admin-ui/app/routes/api-users/new.js | 0 .../admin-ui/app/routes/apis/base.js | 0 .../admin-ui/app/routes/apis/edit.js | 0 .../admin-ui/app/routes/apis/form.js | 0 .../admin-ui/app/routes/apis/index.js | 0 .../admin-ui/app/routes/apis/new.js | 0 .../admin-ui/app/routes/application.js | 0 .../admin-ui/app/routes/config/publish.js | 0 .../admin-ui/app/routes/error.js | 0 .../admin-ui/app/routes/index.js | 0 .../admin-ui/app/routes/loading.js | 0 .../admin-ui/app/routes/login.js | 0 .../admin-ui/app/routes/not-found.js | 0 .../admin-ui/app/routes/stats/base.js | 0 .../app/routes/stats/drilldown-legacy.js | 0 .../admin-ui/app/routes/stats/drilldown.js | 0 .../admin-ui/app/routes/stats/logs-legacy.js | 0 .../admin-ui/app/routes/stats/logs.js | 0 .../admin-ui/app/routes/stats/map-legacy.js | 0 .../admin-ui/app/routes/stats/map.js | 0 .../admin-ui/app/routes/stats/users-legacy.js | 0 .../admin-ui/app/routes/stats/users.js | 0 .../app/routes/website-backends/base.js | 0 .../app/routes/website-backends/edit.js | 0 .../app/routes/website-backends/form.js | 0 .../app/routes/website-backends/index.js | 0 .../app/routes/website-backends/new.js | 0 .../admin-ui/app/serializers/api-user.js | 0 .../admin-ui/app/serializers/api.js | 0 .../admin-ui/app/serializers/api/settings.js | 0 .../app/serializers/api/sub-settings.js | 0 .../admin-ui/app/serializers/application.js | 0 .../admin-ui/app/services/busy.js | 0 .../admin-ui/app/styles/_base.scss | 0 .../admin-ui/app/styles/_busy-blocker.scss | 0 .../admin-ui/app/styles/_codemirror.scss | 0 .../admin-ui/app/styles/_forms.scss | 0 .../admin-ui/app/styles/_icons.scss | 0 .../admin-ui/app/styles/_noscript.scss | 0 .../admin-ui/app/styles/_query-builder.scss | 0 .../admin-ui/app/styles/_selectize.scss | 0 .../admin-ui/app/styles/_stats.scss | 0 .../admin-ui/app/styles/_tables.scss | 0 .../admin-ui/app/styles/_tooltips.scss | 0 .../admin-ui/app/styles/_variables.scss | 0 .../admin-ui/app/styles/app.scss | 0 .../admin-ui/app/templates/.gitkeep | 0 .../app/templates/admin-groups/edit.hbs | 0 .../app/templates/admin-groups/index.hbs | 0 .../app/templates/admin-groups/new.hbs | 0 .../admin-ui/app/templates/admins/edit.hbs | 0 .../admin-ui/app/templates/admins/index.hbs | 0 .../admin-ui/app/templates/admins/new.hbs | 0 .../app/templates/api-scopes/edit.hbs | 0 .../app/templates/api-scopes/index.hbs | 0 .../admin-ui/app/templates/api-scopes/new.hbs | 0 .../admin-ui/app/templates/api-users/edit.hbs | 0 .../app/templates/api-users/index.hbs | 0 .../admin-ui/app/templates/api-users/new.hbs | 0 .../admin-ui/app/templates/apis/edit.hbs | 0 .../admin-ui/app/templates/apis/index.hbs | 0 .../admin-ui/app/templates/apis/new.hbs | 0 .../admin-ui/app/templates/application.hbs | 0 .../app/templates/components/.gitkeep | 0 .../components/admin-groups/index-table.hbs | 0 .../components/admin-groups/record-form.hbs | 0 .../components/admins/index-table.hbs | 0 .../components/admins/record-form.hbs | 0 .../components/api-scopes/index-table.hbs | 0 .../components/api-scopes/record-form.hbs | 0 .../components/api-users/index-table.hbs | 0 .../components/api-users/record-form.hbs | 0 .../templates/components/apis/index-table.hbs | 0 .../templates/components/apis/record-form.hbs | 2 +- .../components/apis/rewrite-form.hbs | 0 .../components/apis/rewrite-table.hbs | 0 .../templates/components/apis/server-form.hbs | 0 .../components/apis/server-table.hbs | 0 .../apis/settings/allowed-ips-fields.hbs | 0 .../apis/settings/allowed-referers-fields.hbs | 0 .../apis/settings/common-fields.hbs | 0 .../apis/settings/rate-limit-fields.hbs | 0 .../components/apis/sub-settings-form.hbs | 0 .../components/apis/sub-settings-table.hbs | 0 .../components/apis/url-match-form.hbs | 0 .../components/apis/url-match-table.hbs | 0 .../app/templates/components/busy-blocker.hbs | 0 .../config/publish-form-records.hbs | 0 .../components/config/publish-form.hbs | 0 .../templates/components/error-messages.hbs | 0 .../app/templates/components/fields-for.hbs | 0 .../components/form-fields/ace-field.hbs | 0 .../components/form-fields/base-field.hbs | 0 .../components/form-fields/checkbox-field.hbs | 0 .../form-fields/checkboxes-field.hbs | 0 .../form-fields/codemirror-field.hbs | 0 .../components/form-fields/error-messages.hbs | 0 .../components/form-fields/field-wrapper.hbs | 0 .../templates/components/form-fields/hint.hbs | 0 .../components/form-fields/password-field.hbs | 0 .../components/form-fields/select-field.hbs | 0 .../form-fields/selectize-field.hbs | 0 .../components/form-fields/static-field.hbs | 0 .../components/form-fields/text-field.hbs | 0 .../components/form-fields/textarea-field.hbs | 0 .../app/templates/components/help-tooltip.hbs | 0 .../app/templates/components/select-menu.hbs | 0 .../stats/drilldown/results-breadcrumbs.hbs | 0 .../stats/drilldown/results-chart.hbs | 0 .../stats/drilldown/results-table.hbs | 0 .../components/stats/logs/results-chart.hbs | 0 .../stats/logs/results-facet-table.hbs | 0 .../stats/logs/results-highlights.hbs | 0 .../components/stats/logs/results-table.hbs | 0 .../stats/map/results-breadcrumbs.hbs | 0 .../components/stats/map/results-map.hbs | 0 .../components/stats/map/results-table.hbs | 0 .../templates/components/stats/query-form.hbs | 0 .../components/stats/users/results-table.hbs | 0 .../website-backends/index-table.hbs | 0 .../website-backends/record-form.hbs | 0 .../admin-ui/app/templates/config/publish.hbs | 0 .../admin-ui/app/templates/error.hbs | 0 .../admin-ui/app/templates/login.hbs | 0 .../admin-ui/app/templates/not-found.hbs | 0 .../app/templates/stats/drilldown.hbs | 0 .../admin-ui/app/templates/stats/logs.hbs | 0 .../admin-ui/app/templates/stats/map.hbs | 0 .../admin-ui/app/templates/stats/users.hbs | 0 .../app/templates/website-backends/edit.hbs | 0 .../app/templates/website-backends/index.hbs | 0 .../app/templates/website-backends/new.hbs | 0 .../admin-ui/app/utils/data-tables-helpers.js | 0 .../admin-ui/app/utils/loading-button.js | 0 .../admin-ui/config/environment.js | 0 .../admin-ui/config/optional-features.json | 0 .../admin-ui/config/targets.js | 0 .../admin-ui/ember-cli-build.js | 0 .../admin-ui/lib/.eslintrc.js | 0 .../lib/inject-live-reload-config/index.js | 0 .../inject-live-reload-config/package.json | 0 .../admin-ui/package.json | 0 .../admin-ui/public/maps/AD.json | 0 .../admin-ui/public/maps/AE.json | 0 .../admin-ui/public/maps/AF.json | 0 .../admin-ui/public/maps/AI.json | 0 .../admin-ui/public/maps/AL.json | 0 .../admin-ui/public/maps/AM.json | 0 .../admin-ui/public/maps/AO.json | 0 .../admin-ui/public/maps/AR.json | 0 .../admin-ui/public/maps/AS.json | 0 .../admin-ui/public/maps/AT.json | 0 .../admin-ui/public/maps/AU.json | 0 .../admin-ui/public/maps/AW.json | 0 .../admin-ui/public/maps/AX.json | 0 .../admin-ui/public/maps/AZ.json | 0 .../admin-ui/public/maps/BA.json | 0 .../admin-ui/public/maps/BB.json | 0 .../admin-ui/public/maps/BD.json | 0 .../admin-ui/public/maps/BE.json | 0 .../admin-ui/public/maps/BF.json | 0 .../admin-ui/public/maps/BG.json | 0 .../admin-ui/public/maps/BH.json | 0 .../admin-ui/public/maps/BI.json | 0 .../admin-ui/public/maps/BJ.json | 0 .../admin-ui/public/maps/BL.json | 0 .../admin-ui/public/maps/BM.json | 0 .../admin-ui/public/maps/BN.json | 0 .../admin-ui/public/maps/BO.json | 0 .../admin-ui/public/maps/BQ.json | 0 .../admin-ui/public/maps/BR.json | 0 .../admin-ui/public/maps/BS.json | 0 .../admin-ui/public/maps/BT.json | 0 .../admin-ui/public/maps/BW.json | 0 .../admin-ui/public/maps/BY.json | 0 .../admin-ui/public/maps/BZ.json | 0 .../admin-ui/public/maps/CA.json | 0 .../admin-ui/public/maps/CC.json | 0 .../admin-ui/public/maps/CD.json | 0 .../admin-ui/public/maps/CF.json | 0 .../admin-ui/public/maps/CG.json | 0 .../admin-ui/public/maps/CH.json | 0 .../admin-ui/public/maps/CI.json | 0 .../admin-ui/public/maps/CK.json | 0 .../admin-ui/public/maps/CL.json | 0 .../admin-ui/public/maps/CM.json | 0 .../admin-ui/public/maps/CN.json | 0 .../admin-ui/public/maps/CO.json | 0 .../admin-ui/public/maps/CR.json | 0 .../admin-ui/public/maps/CU.json | 0 .../admin-ui/public/maps/CV.json | 0 .../admin-ui/public/maps/CW.json | 0 .../admin-ui/public/maps/CX.json | 0 .../admin-ui/public/maps/CY.json | 0 .../admin-ui/public/maps/CZ.json | 0 .../admin-ui/public/maps/DE.json | 0 .../admin-ui/public/maps/DJ.json | 0 .../admin-ui/public/maps/DK.json | 0 .../admin-ui/public/maps/DM.json | 0 .../admin-ui/public/maps/DO.json | 0 .../admin-ui/public/maps/DZ.json | 0 .../admin-ui/public/maps/EC.json | 0 .../admin-ui/public/maps/EE.json | 0 .../admin-ui/public/maps/EG.json | 0 .../admin-ui/public/maps/EH.json | 0 .../admin-ui/public/maps/ER.json | 0 .../admin-ui/public/maps/ES.json | 0 .../admin-ui/public/maps/ET.json | 0 .../admin-ui/public/maps/FI.json | 0 .../admin-ui/public/maps/FJ.json | 0 .../admin-ui/public/maps/FK.json | 0 .../admin-ui/public/maps/FM.json | 0 .../admin-ui/public/maps/FO.json | 0 .../admin-ui/public/maps/FR.json | 0 .../admin-ui/public/maps/GA.json | 0 .../admin-ui/public/maps/GB.json | 0 .../admin-ui/public/maps/GD.json | 0 .../admin-ui/public/maps/GE.json | 0 .../admin-ui/public/maps/GF.json | 0 .../admin-ui/public/maps/GG.json | 0 .../admin-ui/public/maps/GH.json | 0 .../admin-ui/public/maps/GL.json | 0 .../admin-ui/public/maps/GM.json | 0 .../admin-ui/public/maps/GN.json | 0 .../admin-ui/public/maps/GP.json | 0 .../admin-ui/public/maps/GQ.json | 0 .../admin-ui/public/maps/GR.json | 0 .../admin-ui/public/maps/GS.json | 0 .../admin-ui/public/maps/GT.json | 0 .../admin-ui/public/maps/GU.json | 0 .../admin-ui/public/maps/GW.json | 0 .../admin-ui/public/maps/GY.json | 0 .../admin-ui/public/maps/HK.json | 0 .../admin-ui/public/maps/HM.json | 0 .../admin-ui/public/maps/HN.json | 0 .../admin-ui/public/maps/HR.json | 0 .../admin-ui/public/maps/HT.json | 0 .../admin-ui/public/maps/HU.json | 0 .../admin-ui/public/maps/ID.json | 0 .../admin-ui/public/maps/IE.json | 0 .../admin-ui/public/maps/IL.json | 0 .../admin-ui/public/maps/IM.json | 0 .../admin-ui/public/maps/IN.json | 0 .../admin-ui/public/maps/IO.json | 0 .../admin-ui/public/maps/IQ.json | 0 .../admin-ui/public/maps/IR.json | 0 .../admin-ui/public/maps/IS.json | 0 .../admin-ui/public/maps/IT.json | 0 .../admin-ui/public/maps/JE.json | 0 .../admin-ui/public/maps/JM.json | 0 .../admin-ui/public/maps/JO.json | 0 .../admin-ui/public/maps/JP.json | 0 .../admin-ui/public/maps/KE.json | 0 .../admin-ui/public/maps/KG.json | 0 .../admin-ui/public/maps/KH.json | 0 .../admin-ui/public/maps/KI.json | 0 .../admin-ui/public/maps/KM.json | 0 .../admin-ui/public/maps/KN.json | 0 .../admin-ui/public/maps/KP.json | 0 .../admin-ui/public/maps/KR.json | 0 .../admin-ui/public/maps/KW.json | 0 .../admin-ui/public/maps/KY.json | 0 .../admin-ui/public/maps/KZ.json | 0 .../admin-ui/public/maps/LA.json | 0 .../admin-ui/public/maps/LB.json | 0 .../admin-ui/public/maps/LC.json | 0 .../admin-ui/public/maps/LI.json | 0 .../admin-ui/public/maps/LK.json | 0 .../admin-ui/public/maps/LR.json | 0 .../admin-ui/public/maps/LS.json | 0 .../admin-ui/public/maps/LT.json | 0 .../admin-ui/public/maps/LU.json | 0 .../admin-ui/public/maps/LV.json | 0 .../admin-ui/public/maps/LY.json | 0 .../admin-ui/public/maps/MA.json | 0 .../admin-ui/public/maps/MC.json | 0 .../admin-ui/public/maps/MD.json | 0 .../admin-ui/public/maps/ME.json | 0 .../admin-ui/public/maps/MF.json | 0 .../admin-ui/public/maps/MG.json | 0 .../admin-ui/public/maps/MH.json | 0 .../admin-ui/public/maps/MK.json | 0 .../admin-ui/public/maps/ML.json | 0 .../admin-ui/public/maps/MM.json | 0 .../admin-ui/public/maps/MN.json | 0 .../admin-ui/public/maps/MO.json | 0 .../admin-ui/public/maps/MP.json | 0 .../admin-ui/public/maps/MQ.json | 0 .../admin-ui/public/maps/MR.json | 0 .../admin-ui/public/maps/MS.json | 0 .../admin-ui/public/maps/MT.json | 0 .../admin-ui/public/maps/MU.json | 0 .../admin-ui/public/maps/MV.json | 0 .../admin-ui/public/maps/MW.json | 0 .../admin-ui/public/maps/MX.json | 0 .../admin-ui/public/maps/MY.json | 0 .../admin-ui/public/maps/MZ.json | 0 .../admin-ui/public/maps/NA.json | 0 .../admin-ui/public/maps/NC.json | 0 .../admin-ui/public/maps/NE.json | 0 .../admin-ui/public/maps/NF.json | 0 .../admin-ui/public/maps/NG.json | 0 .../admin-ui/public/maps/NI.json | 0 .../admin-ui/public/maps/NL.json | 0 .../admin-ui/public/maps/NO.json | 0 .../admin-ui/public/maps/NP.json | 0 .../admin-ui/public/maps/NR.json | 0 .../admin-ui/public/maps/NU.json | 0 .../admin-ui/public/maps/NZ.json | 0 .../admin-ui/public/maps/OM.json | 0 .../admin-ui/public/maps/PA.json | 0 .../admin-ui/public/maps/PE.json | 0 .../admin-ui/public/maps/PF.json | 0 .../admin-ui/public/maps/PG.json | 0 .../admin-ui/public/maps/PH.json | 0 .../admin-ui/public/maps/PK.json | 0 .../admin-ui/public/maps/PL.json | 0 .../admin-ui/public/maps/PM.json | 0 .../admin-ui/public/maps/PN.json | 0 .../admin-ui/public/maps/PR.json | 0 .../admin-ui/public/maps/PT.json | 0 .../admin-ui/public/maps/PW.json | 0 .../admin-ui/public/maps/PY.json | 0 .../admin-ui/public/maps/QA.json | 0 .../admin-ui/public/maps/RE.json | 0 .../admin-ui/public/maps/RO.json | 0 .../admin-ui/public/maps/RS.json | 0 .../admin-ui/public/maps/RU.json | 0 .../admin-ui/public/maps/RW.json | 0 .../admin-ui/public/maps/SA.json | 0 .../admin-ui/public/maps/SB.json | 0 .../admin-ui/public/maps/SC.json | 0 .../admin-ui/public/maps/SD.json | 0 .../admin-ui/public/maps/SE.json | 0 .../admin-ui/public/maps/SG.json | 0 .../admin-ui/public/maps/SH.json | 0 .../admin-ui/public/maps/SI.json | 0 .../admin-ui/public/maps/SJ.json | 0 .../admin-ui/public/maps/SK.json | 0 .../admin-ui/public/maps/SL.json | 0 .../admin-ui/public/maps/SM.json | 0 .../admin-ui/public/maps/SN.json | 0 .../admin-ui/public/maps/SO.json | 0 .../admin-ui/public/maps/SR.json | 0 .../admin-ui/public/maps/SS.json | 0 .../admin-ui/public/maps/ST.json | 0 .../admin-ui/public/maps/SV.json | 0 .../admin-ui/public/maps/SX.json | 0 .../admin-ui/public/maps/SY.json | 0 .../admin-ui/public/maps/SZ.json | 0 .../admin-ui/public/maps/TC.json | 0 .../admin-ui/public/maps/TD.json | 0 .../admin-ui/public/maps/TF.json | 0 .../admin-ui/public/maps/TG.json | 0 .../admin-ui/public/maps/TH.json | 0 .../admin-ui/public/maps/TJ.json | 0 .../admin-ui/public/maps/TK.json | 0 .../admin-ui/public/maps/TL.json | 0 .../admin-ui/public/maps/TM.json | 0 .../admin-ui/public/maps/TN.json | 0 .../admin-ui/public/maps/TO.json | 0 .../admin-ui/public/maps/TR.json | 0 .../admin-ui/public/maps/TT.json | 0 .../admin-ui/public/maps/TW.json | 0 .../admin-ui/public/maps/TZ.json | 0 .../admin-ui/public/maps/UA.json | 0 .../admin-ui/public/maps/UG.json | 0 .../admin-ui/public/maps/US-AK.json | 0 .../admin-ui/public/maps/US-AL.json | 0 .../admin-ui/public/maps/US-AR.json | 0 .../admin-ui/public/maps/US-AZ.json | 0 .../admin-ui/public/maps/US-CA.json | 0 .../admin-ui/public/maps/US-CO.json | 0 .../admin-ui/public/maps/US-CT.json | 0 .../admin-ui/public/maps/US-DC.json | 0 .../admin-ui/public/maps/US-DE.json | 0 .../admin-ui/public/maps/US-FL.json | 0 .../admin-ui/public/maps/US-GA.json | 0 .../admin-ui/public/maps/US-HI.json | 0 .../admin-ui/public/maps/US-IA.json | 0 .../admin-ui/public/maps/US-ID.json | 0 .../admin-ui/public/maps/US-IL.json | 0 .../admin-ui/public/maps/US-IN.json | 0 .../admin-ui/public/maps/US-KS.json | 0 .../admin-ui/public/maps/US-KY.json | 0 .../admin-ui/public/maps/US-LA.json | 0 .../admin-ui/public/maps/US-MA.json | 0 .../admin-ui/public/maps/US-MD.json | 0 .../admin-ui/public/maps/US-ME.json | 0 .../admin-ui/public/maps/US-MI.json | 0 .../admin-ui/public/maps/US-MN.json | 0 .../admin-ui/public/maps/US-MO.json | 0 .../admin-ui/public/maps/US-MS.json | 0 .../admin-ui/public/maps/US-MT.json | 0 .../admin-ui/public/maps/US-NC.json | 0 .../admin-ui/public/maps/US-ND.json | 0 .../admin-ui/public/maps/US-NE.json | 0 .../admin-ui/public/maps/US-NH.json | 0 .../admin-ui/public/maps/US-NJ.json | 0 .../admin-ui/public/maps/US-NM.json | 0 .../admin-ui/public/maps/US-NV.json | 0 .../admin-ui/public/maps/US-NY.json | 0 .../admin-ui/public/maps/US-OH.json | 0 .../admin-ui/public/maps/US-OK.json | 0 .../admin-ui/public/maps/US-OR.json | 0 .../admin-ui/public/maps/US-PA.json | 0 .../admin-ui/public/maps/US-RI.json | 0 .../admin-ui/public/maps/US-SC.json | 0 .../admin-ui/public/maps/US-SD.json | 0 .../admin-ui/public/maps/US-TN.json | 0 .../admin-ui/public/maps/US-TX.json | 0 .../admin-ui/public/maps/US-UT.json | 0 .../admin-ui/public/maps/US-VA.json | 0 .../admin-ui/public/maps/US-VT.json | 0 .../admin-ui/public/maps/US-WA.json | 0 .../admin-ui/public/maps/US-WI.json | 0 .../admin-ui/public/maps/US-WV.json | 0 .../admin-ui/public/maps/US-WY.json | 0 .../admin-ui/public/maps/US.json | 0 .../admin-ui/public/maps/UY.json | 0 .../admin-ui/public/maps/UZ.json | 0 .../admin-ui/public/maps/VA.json | 0 .../admin-ui/public/maps/VC.json | 0 .../admin-ui/public/maps/VE.json | 0 .../admin-ui/public/maps/VG.json | 0 .../admin-ui/public/maps/VI.json | 0 .../admin-ui/public/maps/VN.json | 0 .../admin-ui/public/maps/VU.json | 0 .../admin-ui/public/maps/WF.json | 0 .../admin-ui/public/maps/WS.json | 0 .../admin-ui/public/maps/YE.json | 0 .../admin-ui/public/maps/YT.json | 0 .../admin-ui/public/maps/ZA.json | 0 .../admin-ui/public/maps/ZM.json | 0 .../admin-ui/public/maps/ZW.json | 0 .../admin-ui/public/maps/world.json | 0 src/{api-umbrella => js}/admin-ui/testem.js | 0 .../admin-ui/tests/helpers/.gitkeep | 0 .../admin-ui/tests/index.html | 0 .../admin-ui/tests/integration/.gitkeep | 0 .../admin-ui/tests/test-helper.js | 0 .../admin-ui/tests/unit/.gitkeep | 0 .../admin-ui/tests/unit/services/busy-test.js | 0 .../admin-ui/vendor/.gitkeep | 0 src/{api-umbrella => js}/admin-ui/yarn.lock | 0 .../auto-ssl/hooks/init.lua | 0 .../auto-ssl/hooks/init_worker.lua | 0 .../auto-ssl/hooks/ssl_certificate.lua | 0 .../auto-ssl/storage_adapters/mongodb.lua | 0 src/{api-umbrella => lua}/cli.lua | 0 src/{api-umbrella => lua}/cli/health.lua | 1 + src/{api-umbrella => lua}/cli/processes.lua | 0 src/{api-umbrella => lua}/cli/read_config.lua | 0 src/{api-umbrella => lua}/cli/reload.lua | 0 src/{api-umbrella => lua}/cli/reopen_logs.lua | 0 src/{api-umbrella => lua}/cli/run.lua | 0 src/{api-umbrella => lua}/cli/setup.lua | 57 ++-- src/{api-umbrella => lua}/cli/status.lua | 0 src/{api-umbrella => lua}/cli/stop.lua | 0 src/{ => lua}/conf.lua | 0 .../elasticsearch-aws-signing-proxy/init.lua | 0 .../elasticsearch-aws-signing-proxy/proxy.lua | 0 src/{api-umbrella => lua}/http-api/health.lua | 2 - src/{api-umbrella => lua}/http-api/state.lua | 0 .../proxy/distributed_rate_limit_queue.lua | 0 .../proxy/elasticsearch_templates_data.lua | 0 .../proxy/error_handler.lua | 0 .../proxy/hooks/access.lua | 0 .../proxy/hooks/header_filter.lua | 0 .../proxy/hooks/init.lua | 0 .../proxy/hooks/init_preload_modules.lua | 0 .../proxy/hooks/init_worker.lua | 0 .../proxy/hooks/log_initial_proxy.lua | 0 .../proxy/hooks/rewrite.lua | 0 .../hooks/set_x_api_umbrella_request_id.lua | 0 .../jobs/distributed_rate_limit_puller.lua | 0 .../jobs/distributed_rate_limit_pusher.lua | 0 .../proxy/jobs/elasticsearch_setup.lua | 0 .../proxy/jobs/load_api_users.lua | 0 .../proxy/jobs/load_db_config.lua | 0 src/{api-umbrella => lua}/proxy/log_utils.lua | 0 .../proxy/middleware/api_key_validator.lua | 0 .../proxy/middleware/api_matcher.lua | 0 .../proxy/middleware/api_settings.lua | 0 .../https_transition_user_validator.lua | 0 .../proxy/middleware/https_validator.lua | 0 .../proxy/middleware/ip_validator.lua | 0 .../policy_validator_cb_ishare_auto.lua | 0 .../proxy/middleware/rate_limit.lua | 0 .../proxy/middleware/referer_validator.lua | 0 .../proxy/middleware/resolve_api_key.lua | 0 .../proxy/middleware/rewrite_request.lua | 0 .../proxy/middleware/rewrite_response.lua | 0 .../proxy/middleware/role_validator.lua | 0 .../proxy/middleware/user_settings.lua | 0 .../proxy/middleware/website_matcher.lua | 0 .../proxy/models/active_config.lua | 0 .../proxy/models/db_config.lua | 0 .../proxy/models/file_config.lua | 0 .../proxy/startup/seed_database.lua | 0 .../proxy/user_agent_parser.lua | 0 .../proxy/user_agent_parser_data.lua | 0 .../proxy/user_store.lua | 0 src/{api-umbrella => lua}/proxy/utils.lua | 0 src/{api-umbrella => lua}/utils/admin.lua | 0 .../utils/array_includes.lua | 0 .../utils/array_last.lua | 0 .../utils/aws_signing_v4.lua | 0 .../utils/deep_defaults.lua | 0 .../utils/deep_merge_overwrite_arrays.lua | 0 .../utils/elasticsearch.lua | 0 .../utils/escape_regex.lua | 0 .../utils/escape_uri_non_ascii.lua | 0 .../utils/flatten_headers.lua | 0 .../utils/get_api_umbrella_version.lua | 0 .../utils/host_normalize.lua | 0 .../utils/httpsify_current_url.lua | 0 src/{api-umbrella => lua}/utils/idp.lua | 0 .../utils/interval_lock.lua | 0 .../utils/invert_table.lua | 0 src/{api-umbrella => lua}/utils/is_array.lua | 0 src/{api-umbrella => lua}/utils/is_hash.lua | 0 .../utils/json_encode.lua | 0 .../utils/matches_hostname.lua | 0 src/{api-umbrella => lua}/utils/mongo.lua | 0 .../utils/mustache_unescape.lua | 0 .../utils/nillify_json_nulls.lua | 0 .../utils/nillify_yaml_nulls.lua | 0 .../utils/packed_shared_dict.lua | 0 .../utils/random_num.lua | 0 .../utils/random_seed.lua | 0 .../utils/random_token.lua | 0 .../utils/redirect_matches_to_https.lua | 0 src/{api-umbrella => lua}/utils/round.lua | 0 .../utils/run_command.lua | 0 .../utils/xpcall_error_handler.lua | 0 src/{api-umbrella => ruby}/web-app/.gitignore | 0 .../web-app/.gitmodules | 0 src/{api-umbrella => ruby}/web-app/.rspec | 0 src/{api-umbrella => ruby}/web-app/.yardopts | 0 src/{api-umbrella => ruby}/web-app/Gemfile | 0 .../web-app/Gemfile.lock | 0 .../web-app/LICENSE.txt | 0 src/{api-umbrella => ruby}/web-app/README.md | 0 src/{api-umbrella => ruby}/web-app/Rakefile | 0 .../app/assets/stylesheets/admin/login.scss | 0 .../admins/omniauth_callbacks_controller.rb | 0 .../omniauth_custom_forms_controller.rb | 0 .../app/controllers/admin/base_controller.rb | 0 .../admin/registrations_controller.rb | 0 .../controllers/admin/sessions_controller.rb | 0 .../app/controllers/admin/stats_controller.rb | 0 .../controllers/api/api_users_controller.rb | 0 .../api/health_checks_controller.rb | 0 .../api/v0/analytics_controller.rb | 0 .../api/v1/admin_groups_controller.rb | 0 .../api/v1/admin_permissions_controller.rb | 0 .../controllers/api/v1/admins_controller.rb | 0 .../api/v1/analytics_controller.rb | 0 .../api/v1/api_scopes_controller.rb | 0 .../app/controllers/api/v1/apis_controller.rb | 0 .../app/controllers/api/v1/base_controller.rb | 0 .../controllers/api/v1/config_controller.rb | 0 .../controllers/api/v1/contacts_controller.rb | 0 .../app/controllers/api/v1/idps_controller.rb | 0 .../api/v1/user_roles_controller.rb | 0 .../controllers/api/v1/users_controller.rb | 0 .../api/v1/website_backends_controller.rb | 0 .../app/controllers/application_controller.rb | 0 .../web-app/app/helpers/accounts_helper.rb | 0 .../admin/admins/omniauth_callbacks_helper.rb | 0 .../app/helpers/admin/admins_helper.rb | 0 .../app/helpers/admin/api_users_helper.rb | 0 .../web-app/app/helpers/admin/apis_helper.rb | 0 .../web-app/app/helpers/admin/base_helper.rb | 0 .../app/helpers/admin/sessions_helper.rb | 0 .../web-app/app/helpers/admin/stats_helper.rb | 0 .../app/helpers/api/api_users_helper.rb | 0 .../app/helpers/api/health_checks_helper.rb | 0 .../app/helpers/api/v1/admins_helper.rb | 0 .../web-app/app/helpers/api/v1/apis_helper.rb | 0 .../web-app/app/helpers/api/v1/base_helper.rb | 0 .../app/helpers/api/v1/users_helper.rb | 0 .../web-app/app/helpers/application_helper.rb | 0 .../web-app/app/helpers/datatables_helper.rb | 0 .../web-app/app/mailers/admin_mailer.rb | 0 .../web-app/app/mailers/api_user_mailer.rb | 0 .../web-app/app/mailers/contact_mailer.rb | 0 .../web-app/app/models/admin.rb | 2 +- .../web-app/app/models/admin_group.rb | 0 .../web-app/app/models/admin_permission.rb | 0 .../web-app/app/models/api.rb | 0 .../web-app/app/models/api/header.rb | 0 .../web-app/app/models/api/rate_limit.rb | 0 .../web-app/app/models/api/rewrite.rb | 0 .../web-app/app/models/api/route.rb | 0 .../web-app/app/models/api/server.rb | 0 .../web-app/app/models/api/settings.rb | 0 .../web-app/app/models/api/sub_settings.rb | 0 .../web-app/app/models/api/url_match.rb | 0 .../web-app/app/models/api_scope.rb | 0 .../web-app/app/models/api_user.rb | 0 .../web-app/app/models/api_user_role.rb | 0 .../web-app/app/models/config_version.rb | 0 .../web-app/app/models/contact.rb | 0 .../web-app/app/models/idp.rb | 0 .../web-app/app/models/log_city_location.rb | 0 .../web-app/app/models/log_result.rb | 0 .../web-app/app/models/log_result/base.rb | 0 .../app/models/log_result/elastic_search.rb | 0 .../web-app/app/models/log_search.rb | 0 .../web-app/app/models/log_search/base.rb | 0 .../app/models/log_search/elastic_search.rb | 0 .../web-app/app/models/website_backend.rb | 0 .../app/policies/admin_group_policy.rb | 0 .../web-app/app/policies/admin_policy.rb | 0 .../web-app/app/policies/api_policy.rb | 0 .../web-app/app/policies/api_scope_policy.rb | 0 .../web-app/app/policies/api_user_policy.rb | 0 .../app/policies/api_user_role_policy.rb | 0 .../app/policies/application_policy.rb | 0 .../web-app/app/policies/idp_policy.rb | 0 .../web-app/app/policies/log_search_policy.rb | 0 .../app/policies/website_backend_policy.rb | 0 .../omniauth_custom_forms/developer.html.erb | 0 .../omniauth_custom_forms/ldap.html.erb | 0 .../views/admin/stats/_hits_over_time.rabl | 0 .../app/views/admin/stats/map.csv.csvbuilder | 0 .../web-app/app/views/admin/stats/map.rabl | 0 .../web-app/app/views/admin/stats/search.rabl | 0 .../views/admin/stats/users.csv.csvbuilder | 0 .../web-app/app/views/admin/stats/users.rabl | 0 .../app/views/admin_mailer/invite.html.erb | 0 .../app/views/api/v1/admin_groups/index.rabl | 0 .../app/views/api/v1/admin_groups/show.rabl | 0 .../app/views/api/v1/admins/index.rabl | 0 .../web-app/app/views/api/v1/admins/show.rabl | 0 .../api/v1/analytics/drilldown.csv.csvbuilder | 0 .../api/v1/analytics/drilldown.json.jbuilder | 0 .../app/views/api/v1/analytics/logs.rabl | 0 .../app/views/api/v1/api_scopes/index.rabl | 0 .../app/views/api/v1/api_scopes/show.rabl | 0 .../web-app/app/views/api/v1/apis/index.rabl | 0 .../v1/config/pending_changes.json.jbuilder | 0 .../web-app/app/views/api/v1/idps/index.rabl | 0 .../web-app/app/views/api/v1/idps/show.rabl | 0 .../web-app/app/views/api/v1/users/index.rabl | 0 .../web-app/app/views/api/v1/users/show.rabl | 0 .../views/api/v1/website_backends/index.rabl | 0 .../views/api/v1/website_backends/show.rabl | 0 .../views/api_user_mailer/_welcome.html.erb | 0 .../api_user_mailer/notify_api_admin.erb | 0 .../api_user_mailer/signup_email.html.erb | 0 .../contact_mailer/contact_email.text.erb | 0 .../mailer/confirmation_instructions.html.erb | 0 .../devise/mailer/password_change.html.erb | 0 .../reset_password_instructions.html.erb | 0 .../mailer/unlock_instructions.html.erb | 0 .../app/views/devise/passwords/edit.html.erb | 0 .../app/views/devise/passwords/new.html.erb | 0 .../views/devise/registrations/new.html.erb | 0 .../devise/sessions/_ldap_login_form.html.erb | 0 .../sessions/_local_login_form.html.erb | 0 .../_omniauth_provider_buttons.html.erb | 0 .../app/views/devise/sessions/new.html.erb | 0 .../app/views/devise/shared/_links.html.erb | 0 .../app/views/devise/unlocks/new.html.erb | 0 .../app/views/layouts/application.html.erb | 0 src/{api-umbrella => ruby}/web-app/bin/bundle | 0 .../web-app/bin/delayed_job | 0 src/{api-umbrella => ruby}/web-app/bin/rails | 0 src/{api-umbrella => ruby}/web-app/bin/rake | 0 src/{api-umbrella => ruby}/web-app/bin/setup | 0 src/{api-umbrella => ruby}/web-app/bin/spring | 0 src/{api-umbrella => ruby}/web-app/config.ru | 0 .../web-app/config/application.rb | 0 .../web-app/config/boot.rb | 0 .../web-app/config/environment.rb | 0 .../config/environments/development.rb | 0 .../web-app/config/environments/production.rb | 0 .../web-app/config/environments/test.rb | 0 .../initializers/api_umbrella_version.rb | 0 .../web-app/config/initializers/assets.rb | 0 .../config/initializers/awesome_print.rb | 0 .../initializers/backtrace_silencers.rb | 0 .../config/initializers/cookies_serializer.rb | 0 .../config/initializers/delayed_job.rb | 0 .../web-app/config/initializers/devise.rb | 0 .../initializers/filter_parameter_logging.rb | 0 .../web-app/config/initializers/i18n.rb | 0 .../config/initializers/inflections.rb | 0 .../web-app/config/initializers/json.rb | 0 .../web-app/config/initializers/mime_types.rb | 0 .../initializers/mongoid_serializable_id.rb | 0 .../web-app/config/initializers/rollbar.rb | 0 .../config/initializers/session_store.rb | 0 .../config/initializers/simple_form.rb | 0 .../initializers/simple_form_bootstrap.rb | 0 .../web-app/config/initializers/timeout.rb | 0 .../to_time_preserves_timezone.rb | 0 .../config/initializers/wrap_parameters.rb | 0 .../web-app/config/locales/de.yml | 0 .../web-app/config/locales/en.yml | 0 .../web-app/config/locales/es-419.yml | 0 .../web-app/config/locales/fi.yml | 0 .../web-app/config/locales/fr.yml | 0 .../web-app/config/locales/it.yml | 0 .../web-app/config/locales/ru.yml | 0 .../web-app/config/locales/simple_form.en.yml | 0 .../web-app/config/locales/zy.yml | 0 .../web-app/config/routes.rb | 0 .../web-app/config/secrets.yml | 0 .../db/migrate/20131020035658_user_uuids.rb | 0 .../db/migrate/20131107231237_api_uuids.rb | 0 .../db/migrate/20131107233429_admin_uuids.rb | 0 .../20131108001405_remove_legacy_ids.rb | 0 .../20131127043301_custom_rate_limits.rb | 0 ...131127063456_create_delayed_job_indexes.rb | 0 .../20131127185950_fix_custom_rate_limits.rb | 0 ...20140103144751_add_user_register_source.rb | 0 ...50_generate_admin_authentication_tokens.rb | 0 .../migrate/20140325061951_api_sort_orders.rb | 0 .../20140908045601_legacy_pass_api_keys.rb | 0 ...20150118061631_downcase_admin_usernames.rb | 0 .../20150327071153_require_https_settings.rb | 0 ...20150529144541_api_sort_orders_with_gap.rb | 0 ...2850_move_cached_city_geocodes_to_mongo.rb | 0 .../web-app/db/seeds.rb | 0 .../web-app/docker-compose.yml | 0 .../lib/api_umbrella/attributify_data.rb | 0 .../lib/api_umbrella/elasticsearch_proxy.rb | 0 .../web-app/lib/common_validations.rb | 0 .../web-app/lib/csv_streamer.rb | 0 .../web-app/lib/js_locale_helper.rb | 0 .../web-app/lib/known_hosts.rb | 0 .../web-app/lib/mongoid/userstamp.rb | 0 .../web-app/lib/tasks/i18n.rake | 0 .../web-app/lib/tasks/rubocop.rake | 0 .../lib/templates/erb/scaffold/_form.html.erb | 0 .../web-app/public/404.html | 0 .../web-app/public/422.html | 0 .../web-app/public/500.html | 0 .../web-app/script/migrate_logs | 0 .../web-app/script/migrate_users | 0 .../web-app/vendor/.gitkeep | 0 src/{api-umbrella => }/version.txt | 0 tasks/app-deps/admin-ui/yarn | 26 -- tasks/app-deps/web-app/bundle | 46 --- tasks/app/admin-ui/build | 38 --- tasks/app/core | 13 - tasks/app/static-site | 0 tasks/app/web-app/precompile | 27 -- tasks/build-deps/nodejs | 16 - tasks/build-deps/yarn | 22 -- tasks/deps/bundler | 11 - tasks/deps/elasticsearch | 17 -- tasks/deps/luarocks | 25 +- tasks/deps/mongodb | 26 -- tasks/deps/mora | 26 -- tasks/deps/openresty | 105 ------- tasks/deps/rsyslog | 34 --- tasks/deps/ruby | 22 -- tasks/deps/rubygems | 10 - tasks/deps/trafficserver | 24 -- tasks/helpers.sh | 7 +- tasks/install-system-build-dependencies | 34 +-- templates/etc/perp/mongod/rc.log | 3 - templates/etc/perp/mongod/rc.main.mustache | 29 -- templates/etc/perp/mora/rc.log | 3 - templates/etc/perp/mora/rc.main.mustache | 21 -- templates/etc/perp/nginx/rc.main.mustache | 2 +- templates/etc/perp/rsyslog/rc.env.mustache | 1 - templates/etc/perp/rsyslog/rc.log | 3 - templates/etc/perp/rsyslog/rc.main.mustache | 32 -- .../etc/perp/trafficserver/rc.main.mustache | 2 +- templates/etc/rsyslog.conf.mustache | 2 +- .../etc/trafficserver/plugin.config.mustache | 2 +- .../etc/trafficserver/records.config.mustache | 6 +- .../etc/trafficserver/remap.config.mustache | 2 +- 945 files changed, 340 insertions(+), 1280 deletions(-) delete mode 100644 .circleci/config.yml delete mode 100644 Dockerfile-beta-deploy delete mode 100644 Dockerfile-build delete mode 100644 Dockerfile-build-from-base delete mode 100644 Dockerfile-dev delete mode 100644 Dockerfile-dev-build create mode 100644 docker/files/api/Dockerfile create mode 100755 docker/files/api/entrypoint.sh create mode 100755 docker/files/install-mustache-cli.sh create mode 100644 docker/files/mora/Dockerfile create mode 100755 docker/files/mora/entrypoint.sh create mode 100644 docker/files/proxy/Dockerfile create mode 100644 docker/files/rsyslog/Dockerfile create mode 100755 docker/files/rsyslog/entrypoint.sh create mode 100644 docker/files/trafficserver/Dockerfile create mode 100755 docker/files/trafficserver/entrypoint.sh create mode 100644 docker/files/ui/Dockerfile delete mode 120000 src/api-umbrella/admin-ui/node_modules rename src/{api-umbrella => js}/admin-ui/.editorconfig (100%) rename src/{api-umbrella => js}/admin-ui/.ember-cli (100%) rename src/{api-umbrella => js}/admin-ui/.eslintignore (100%) rename src/{api-umbrella => js}/admin-ui/.eslintrc.js (100%) rename src/{api-umbrella => js}/admin-ui/.gitignore (100%) rename src/{api-umbrella => js}/admin-ui/.template-lintrc.js (100%) rename src/{api-umbrella => js}/admin-ui/.watchmanconfig (100%) rename src/{api-umbrella => js}/admin-ui/.yarnrc (100%) rename src/{api-umbrella => js}/admin-ui/README.md (100%) rename src/{api-umbrella => js}/admin-ui/app/adapters/application.js (98%) rename src/{api-umbrella => js}/admin-ui/app/app.js (100%) rename src/{api-umbrella => js}/admin-ui/app/authenticators/devise-server-side.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/app/components/admin-groups/index-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/admin-groups/record-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/admins/index-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/admins/record-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/api-scopes/index-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/api-scopes/record-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/api-users/index-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/api-users/record-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/index-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/record-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/rewrite-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/rewrite-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/server-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/server-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/settings/allowed-ips-fields.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/settings/allowed-referers-fields.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/settings/common-fields.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/settings/rate-limit-fields.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/sub-settings-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/sub-settings-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/url-match-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/apis/url-match-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/busy-blocker.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/config/publish-form-records.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/config/publish-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/error-messages.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/fields-for.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/base-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/checkbox-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/checkboxes-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/codemirror-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/error-messages.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/field-wrapper.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/hint.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/password-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/select-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/selectize-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/static-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/text-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/form-fields/textarea-field.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/help-tooltip.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/select-menu.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/drilldown/results-chart.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/drilldown/results-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/logs/results-chart.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/logs/results-facet-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/logs/results-highlights.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/logs/results-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/map/results-breadcrumbs.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/map/results-map.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/map/results-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/query-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/stats/users/results-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/website-backends/index-table.js (100%) rename src/{api-umbrella => js}/admin-ui/app/components/website-backends/record-form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/controllers/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/app/controllers/application.js (100%) rename src/{api-umbrella => js}/admin-ui/app/controllers/config/publish.js (100%) rename src/{api-umbrella => js}/admin-ui/app/controllers/stats/base.js (100%) rename src/{api-umbrella => js}/admin-ui/app/controllers/stats/drilldown.js (100%) rename src/{api-umbrella => js}/admin-ui/app/controllers/stats/logs.js (100%) rename src/{api-umbrella => js}/admin-ui/app/controllers/stats/map.js (100%) rename src/{api-umbrella => js}/admin-ui/app/controllers/stats/users.js (100%) rename src/{api-umbrella => js}/admin-ui/app/helpers/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/app/helpers/format-date.js (100%) rename src/{api-umbrella => js}/admin-ui/app/helpers/format-number.js (100%) rename src/{api-umbrella => js}/admin-ui/app/helpers/guid-for.js (100%) rename src/{api-umbrella => js}/admin-ui/app/helpers/html-safe.js (100%) rename src/{api-umbrella => js}/admin-ui/app/helpers/inflect.js (100%) rename src/{api-umbrella => js}/admin-ui/app/helpers/t.js (100%) rename src/{api-umbrella => js}/admin-ui/app/index.html (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/bootbox.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/bootstrap.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/echarts.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/fontawesome.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/inflections.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/pnotify.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/test-disable-animations.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/test-disable-fixed-header.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/test-pnotify.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/test-timekeeper.js (100%) rename src/{api-umbrella => js}/admin-ui/app/initializers/tooltips.js (100%) rename src/{api-umbrella => js}/admin-ui/app/instance-initializers/datatables.js (100%) rename src/{api-umbrella => js}/admin-ui/app/instance-initializers/jquery-ajax.js (100%) rename src/{api-umbrella => js}/admin-ui/app/mixins/confirmation.js (100%) rename src/{api-umbrella => js}/admin-ui/app/mixins/save.js (100%) rename src/{api-umbrella => js}/admin-ui/app/mixins/sortable.js (100%) rename src/{api-umbrella => js}/admin-ui/app/mixins/uncached-model.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/app/models/admin-group.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/admin-permission.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/admin.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api-scope.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api-user-role.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api-user.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api/rate-limit.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api/rewrite.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api/server.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api/settings.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api/sub-settings.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/api/url-match.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/config-pending-changes.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/stats/drilldown.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/stats/logs.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/stats/map.js (100%) rename src/{api-umbrella => js}/admin-ui/app/models/website-backend.js (100%) rename src/{api-umbrella => js}/admin-ui/app/resolver.js (100%) rename src/{api-umbrella => js}/admin-ui/app/router.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admin-groups/base.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admin-groups/edit.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admin-groups/form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admin-groups/index.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admin-groups/new.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admins/base.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admins/edit.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admins/form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admins/index.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/admins/new.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-scopes/base.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-scopes/edit.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-scopes/form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-scopes/index.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-scopes/new.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-users/base.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-users/edit.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-users/form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-users/index.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/api-users/new.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/apis/base.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/apis/edit.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/apis/form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/apis/index.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/apis/new.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/application.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/config/publish.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/error.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/index.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/loading.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/login.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/not-found.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/base.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/drilldown-legacy.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/drilldown.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/logs-legacy.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/logs.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/map-legacy.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/map.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/users-legacy.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/stats/users.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/website-backends/base.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/website-backends/edit.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/website-backends/form.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/website-backends/index.js (100%) rename src/{api-umbrella => js}/admin-ui/app/routes/website-backends/new.js (100%) rename src/{api-umbrella => js}/admin-ui/app/serializers/api-user.js (100%) rename src/{api-umbrella => js}/admin-ui/app/serializers/api.js (100%) rename src/{api-umbrella => js}/admin-ui/app/serializers/api/settings.js (100%) rename src/{api-umbrella => js}/admin-ui/app/serializers/api/sub-settings.js (100%) rename src/{api-umbrella => js}/admin-ui/app/serializers/application.js (100%) rename src/{api-umbrella => js}/admin-ui/app/services/busy.js (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_base.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_busy-blocker.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_codemirror.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_forms.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_icons.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_noscript.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_query-builder.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_selectize.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_stats.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_tables.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_tooltips.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/_variables.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/styles/app.scss (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/admin-groups/edit.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/admin-groups/index.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/admin-groups/new.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/admins/edit.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/admins/index.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/admins/new.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/api-scopes/edit.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/api-scopes/index.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/api-scopes/new.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/api-users/edit.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/api-users/index.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/api-users/new.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/apis/edit.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/apis/index.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/apis/new.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/application.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/admin-groups/index-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/admin-groups/record-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/admins/index-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/admins/record-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/api-scopes/index-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/api-scopes/record-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/api-users/index-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/api-users/record-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/index-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/record-form.hbs (96%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/rewrite-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/rewrite-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/server-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/server-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/settings/allowed-ips-fields.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/settings/allowed-referers-fields.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/settings/common-fields.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/sub-settings-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/sub-settings-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/url-match-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/apis/url-match-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/busy-blocker.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/config/publish-form-records.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/config/publish-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/error-messages.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/fields-for.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/ace-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/base-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/checkbox-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/checkboxes-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/codemirror-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/error-messages.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/field-wrapper.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/hint.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/password-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/select-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/selectize-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/static-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/text-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/form-fields/textarea-field.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/help-tooltip.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/select-menu.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/drilldown/results-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/logs/results-chart.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/logs/results-facet-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/logs/results-highlights.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/logs/results-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/map/results-map.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/map/results-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/query-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/stats/users/results-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/website-backends/index-table.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/components/website-backends/record-form.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/config/publish.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/error.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/login.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/not-found.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/stats/drilldown.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/stats/logs.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/stats/map.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/stats/users.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/website-backends/edit.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/website-backends/index.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/templates/website-backends/new.hbs (100%) rename src/{api-umbrella => js}/admin-ui/app/utils/data-tables-helpers.js (100%) rename src/{api-umbrella => js}/admin-ui/app/utils/loading-button.js (100%) rename src/{api-umbrella => js}/admin-ui/config/environment.js (100%) rename src/{api-umbrella => js}/admin-ui/config/optional-features.json (100%) rename src/{api-umbrella => js}/admin-ui/config/targets.js (100%) rename src/{api-umbrella => js}/admin-ui/ember-cli-build.js (100%) rename src/{api-umbrella => js}/admin-ui/lib/.eslintrc.js (100%) rename src/{api-umbrella => js}/admin-ui/lib/inject-live-reload-config/index.js (100%) rename src/{api-umbrella => js}/admin-ui/lib/inject-live-reload-config/package.json (100%) rename src/{api-umbrella => js}/admin-ui/package.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AX.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/AZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BB.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BJ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BQ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/BZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CV.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CX.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/CZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/DE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/DJ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/DK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/DM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/DO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/DZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/EC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/EE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/EG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/EH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ER.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ES.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ET.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/FI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/FJ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/FK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/FM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/FO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/FR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GB.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GP.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GQ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/GY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/HK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/HM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/HN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/HR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/HT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/HU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ID.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IQ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/IT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/JE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/JM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/JO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/JP.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KP.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/KZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LB.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LV.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/LY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ME.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ML.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MP.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MQ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MV.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MX.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/MZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NP.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/NZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/OM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/PY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/QA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/RE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/RO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/RS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/RU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/RW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SB.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SJ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ST.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SV.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SX.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/SZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TJ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/TZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/UA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/UG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-AK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-AL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-AR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-AZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-CA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-CO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-CT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-DC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-DE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-FL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-GA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-HI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-IA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-ID.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-IL.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-IN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-KS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-KY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-LA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-MA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-MD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-ME.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-MI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-MN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-MO.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-MS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-MT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-NC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-ND.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-NE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-NH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-NJ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-NM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-NV.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-NY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-OH.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-OK.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-OR.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-PA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-RI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-SC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-SD.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-TN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-TX.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-UT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-VA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-VT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-WA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-WI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-WV.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US-WY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/US.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/UY.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/UZ.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/VA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/VC.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/VE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/VG.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/VI.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/VN.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/VU.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/WF.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/WS.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/YE.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/YT.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ZA.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ZM.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/ZW.json (100%) rename src/{api-umbrella => js}/admin-ui/public/maps/world.json (100%) rename src/{api-umbrella => js}/admin-ui/testem.js (100%) rename src/{api-umbrella => js}/admin-ui/tests/helpers/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/tests/index.html (100%) rename src/{api-umbrella => js}/admin-ui/tests/integration/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/tests/test-helper.js (100%) rename src/{api-umbrella => js}/admin-ui/tests/unit/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/tests/unit/services/busy-test.js (100%) rename src/{api-umbrella => js}/admin-ui/vendor/.gitkeep (100%) rename src/{api-umbrella => js}/admin-ui/yarn.lock (100%) rename src/{api-umbrella => lua}/auto-ssl/hooks/init.lua (100%) rename src/{api-umbrella => lua}/auto-ssl/hooks/init_worker.lua (100%) rename src/{api-umbrella => lua}/auto-ssl/hooks/ssl_certificate.lua (100%) rename src/{api-umbrella => lua}/auto-ssl/storage_adapters/mongodb.lua (100%) rename src/{api-umbrella => lua}/cli.lua (100%) rename src/{api-umbrella => lua}/cli/health.lua (99%) rename src/{api-umbrella => lua}/cli/processes.lua (100%) rename src/{api-umbrella => lua}/cli/read_config.lua (100%) rename src/{api-umbrella => lua}/cli/reload.lua (100%) rename src/{api-umbrella => lua}/cli/reopen_logs.lua (100%) rename src/{api-umbrella => lua}/cli/run.lua (100%) rename src/{api-umbrella => lua}/cli/setup.lua (89%) rename src/{api-umbrella => lua}/cli/status.lua (100%) rename src/{api-umbrella => lua}/cli/stop.lua (100%) rename src/{ => lua}/conf.lua (100%) rename src/{api-umbrella => lua}/elasticsearch-aws-signing-proxy/init.lua (100%) rename src/{api-umbrella => lua}/elasticsearch-aws-signing-proxy/proxy.lua (100%) rename src/{api-umbrella => lua}/http-api/health.lua (99%) rename src/{api-umbrella => lua}/http-api/state.lua (100%) rename src/{api-umbrella => lua}/proxy/distributed_rate_limit_queue.lua (100%) rename src/{api-umbrella => lua}/proxy/elasticsearch_templates_data.lua (100%) rename src/{api-umbrella => lua}/proxy/error_handler.lua (100%) rename src/{api-umbrella => lua}/proxy/hooks/access.lua (100%) rename src/{api-umbrella => lua}/proxy/hooks/header_filter.lua (100%) rename src/{api-umbrella => lua}/proxy/hooks/init.lua (100%) rename src/{api-umbrella => lua}/proxy/hooks/init_preload_modules.lua (100%) rename src/{api-umbrella => lua}/proxy/hooks/init_worker.lua (100%) rename src/{api-umbrella => lua}/proxy/hooks/log_initial_proxy.lua (100%) rename src/{api-umbrella => lua}/proxy/hooks/rewrite.lua (100%) rename src/{api-umbrella => lua}/proxy/hooks/set_x_api_umbrella_request_id.lua (100%) rename src/{api-umbrella => lua}/proxy/jobs/distributed_rate_limit_puller.lua (100%) rename src/{api-umbrella => lua}/proxy/jobs/distributed_rate_limit_pusher.lua (100%) rename src/{api-umbrella => lua}/proxy/jobs/elasticsearch_setup.lua (100%) rename src/{api-umbrella => lua}/proxy/jobs/load_api_users.lua (100%) rename src/{api-umbrella => lua}/proxy/jobs/load_db_config.lua (100%) rename src/{api-umbrella => lua}/proxy/log_utils.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/api_key_validator.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/api_matcher.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/api_settings.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/https_transition_user_validator.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/https_validator.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/ip_validator.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/policy_validator_cb_ishare_auto.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/rate_limit.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/referer_validator.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/resolve_api_key.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/rewrite_request.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/rewrite_response.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/role_validator.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/user_settings.lua (100%) rename src/{api-umbrella => lua}/proxy/middleware/website_matcher.lua (100%) rename src/{api-umbrella => lua}/proxy/models/active_config.lua (100%) rename src/{api-umbrella => lua}/proxy/models/db_config.lua (100%) rename src/{api-umbrella => lua}/proxy/models/file_config.lua (100%) rename src/{api-umbrella => lua}/proxy/startup/seed_database.lua (100%) rename src/{api-umbrella => lua}/proxy/user_agent_parser.lua (100%) rename src/{api-umbrella => lua}/proxy/user_agent_parser_data.lua (100%) rename src/{api-umbrella => lua}/proxy/user_store.lua (100%) rename src/{api-umbrella => lua}/proxy/utils.lua (100%) rename src/{api-umbrella => lua}/utils/admin.lua (100%) rename src/{api-umbrella => lua}/utils/array_includes.lua (100%) rename src/{api-umbrella => lua}/utils/array_last.lua (100%) rename src/{api-umbrella => lua}/utils/aws_signing_v4.lua (100%) rename src/{api-umbrella => lua}/utils/deep_defaults.lua (100%) rename src/{api-umbrella => lua}/utils/deep_merge_overwrite_arrays.lua (100%) rename src/{api-umbrella => lua}/utils/elasticsearch.lua (100%) rename src/{api-umbrella => lua}/utils/escape_regex.lua (100%) rename src/{api-umbrella => lua}/utils/escape_uri_non_ascii.lua (100%) rename src/{api-umbrella => lua}/utils/flatten_headers.lua (100%) rename src/{api-umbrella => lua}/utils/get_api_umbrella_version.lua (100%) rename src/{api-umbrella => lua}/utils/host_normalize.lua (100%) rename src/{api-umbrella => lua}/utils/httpsify_current_url.lua (100%) rename src/{api-umbrella => lua}/utils/idp.lua (100%) rename src/{api-umbrella => lua}/utils/interval_lock.lua (100%) rename src/{api-umbrella => lua}/utils/invert_table.lua (100%) rename src/{api-umbrella => lua}/utils/is_array.lua (100%) rename src/{api-umbrella => lua}/utils/is_hash.lua (100%) rename src/{api-umbrella => lua}/utils/json_encode.lua (100%) rename src/{api-umbrella => lua}/utils/matches_hostname.lua (100%) rename src/{api-umbrella => lua}/utils/mongo.lua (100%) rename src/{api-umbrella => lua}/utils/mustache_unescape.lua (100%) rename src/{api-umbrella => lua}/utils/nillify_json_nulls.lua (100%) rename src/{api-umbrella => lua}/utils/nillify_yaml_nulls.lua (100%) rename src/{api-umbrella => lua}/utils/packed_shared_dict.lua (100%) rename src/{api-umbrella => lua}/utils/random_num.lua (100%) rename src/{api-umbrella => lua}/utils/random_seed.lua (100%) rename src/{api-umbrella => lua}/utils/random_token.lua (100%) rename src/{api-umbrella => lua}/utils/redirect_matches_to_https.lua (100%) rename src/{api-umbrella => lua}/utils/round.lua (100%) rename src/{api-umbrella => lua}/utils/run_command.lua (100%) rename src/{api-umbrella => lua}/utils/xpcall_error_handler.lua (100%) rename src/{api-umbrella => ruby}/web-app/.gitignore (100%) rename src/{api-umbrella => ruby}/web-app/.gitmodules (100%) rename src/{api-umbrella => ruby}/web-app/.rspec (100%) rename src/{api-umbrella => ruby}/web-app/.yardopts (100%) rename src/{api-umbrella => ruby}/web-app/Gemfile (100%) rename src/{api-umbrella => ruby}/web-app/Gemfile.lock (100%) rename src/{api-umbrella => ruby}/web-app/LICENSE.txt (100%) rename src/{api-umbrella => ruby}/web-app/README.md (100%) rename src/{api-umbrella => ruby}/web-app/Rakefile (100%) rename src/{api-umbrella => ruby}/web-app/app/assets/stylesheets/admin/login.scss (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/admin/admins/omniauth_callbacks_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/admin/admins/omniauth_custom_forms_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/admin/base_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/admin/registrations_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/admin/sessions_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/admin/stats_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/api_users_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/health_checks_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v0/analytics_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/admin_groups_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/admin_permissions_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/admins_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/analytics_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/api_scopes_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/apis_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/base_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/config_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/contacts_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/idps_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/user_roles_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/users_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/api/v1/website_backends_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/controllers/application_controller.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/accounts_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/admin/admins/omniauth_callbacks_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/admin/admins_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/admin/api_users_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/admin/apis_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/admin/base_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/admin/sessions_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/admin/stats_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/api/api_users_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/api/health_checks_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/api/v1/admins_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/api/v1/apis_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/api/v1/base_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/api/v1/users_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/application_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/helpers/datatables_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/mailers/admin_mailer.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/mailers/api_user_mailer.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/mailers/contact_mailer.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/admin.rb (98%) rename src/{api-umbrella => ruby}/web-app/app/models/admin_group.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/admin_permission.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api/header.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api/rate_limit.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api/rewrite.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api/route.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api/server.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api/settings.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api/sub_settings.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api/url_match.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api_scope.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api_user.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/api_user_role.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/config_version.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/contact.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/idp.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/log_city_location.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/log_result.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/log_result/base.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/log_result/elastic_search.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/log_search.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/log_search/base.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/log_search/elastic_search.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/models/website_backend.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/admin_group_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/admin_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/api_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/api_scope_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/api_user_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/api_user_role_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/application_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/idp_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/log_search_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/policies/website_backend_policy.rb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin/admins/omniauth_custom_forms/developer.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin/admins/omniauth_custom_forms/ldap.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin/stats/_hits_over_time.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin/stats/map.csv.csvbuilder (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin/stats/map.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin/stats/search.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin/stats/users.csv.csvbuilder (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin/stats/users.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/admin_mailer/invite.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/admin_groups/index.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/admin_groups/show.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/admins/index.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/admins/show.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/analytics/drilldown.csv.csvbuilder (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/analytics/drilldown.json.jbuilder (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/analytics/logs.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/api_scopes/index.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/api_scopes/show.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/apis/index.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/config/pending_changes.json.jbuilder (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/idps/index.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/idps/show.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/users/index.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/users/show.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/website_backends/index.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api/v1/website_backends/show.rabl (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api_user_mailer/_welcome.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api_user_mailer/notify_api_admin.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/api_user_mailer/signup_email.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/contact_mailer/contact_email.text.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/mailer/confirmation_instructions.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/mailer/password_change.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/mailer/reset_password_instructions.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/mailer/unlock_instructions.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/passwords/edit.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/passwords/new.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/registrations/new.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/sessions/_ldap_login_form.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/sessions/_local_login_form.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/sessions/_omniauth_provider_buttons.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/sessions/new.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/shared/_links.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/devise/unlocks/new.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/app/views/layouts/application.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/bin/bundle (100%) rename src/{api-umbrella => ruby}/web-app/bin/delayed_job (100%) rename src/{api-umbrella => ruby}/web-app/bin/rails (100%) rename src/{api-umbrella => ruby}/web-app/bin/rake (100%) rename src/{api-umbrella => ruby}/web-app/bin/setup (100%) rename src/{api-umbrella => ruby}/web-app/bin/spring (100%) rename src/{api-umbrella => ruby}/web-app/config.ru (100%) rename src/{api-umbrella => ruby}/web-app/config/application.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/boot.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/environment.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/environments/development.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/environments/production.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/environments/test.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/api_umbrella_version.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/assets.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/awesome_print.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/backtrace_silencers.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/cookies_serializer.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/delayed_job.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/devise.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/filter_parameter_logging.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/i18n.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/inflections.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/json.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/mime_types.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/mongoid_serializable_id.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/rollbar.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/session_store.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/simple_form.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/simple_form_bootstrap.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/timeout.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/to_time_preserves_timezone.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/initializers/wrap_parameters.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/de.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/en.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/es-419.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/fi.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/fr.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/it.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/ru.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/simple_form.en.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/locales/zy.yml (100%) rename src/{api-umbrella => ruby}/web-app/config/routes.rb (100%) rename src/{api-umbrella => ruby}/web-app/config/secrets.yml (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20131020035658_user_uuids.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20131107231237_api_uuids.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20131107233429_admin_uuids.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20131108001405_remove_legacy_ids.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20131127043301_custom_rate_limits.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20131127063456_create_delayed_job_indexes.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20131127185950_fix_custom_rate_limits.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20140103144751_add_user_register_source.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20140323163150_generate_admin_authentication_tokens.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20140325061951_api_sort_orders.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20140908045601_legacy_pass_api_keys.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20150118061631_downcase_admin_usernames.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20150327071153_require_https_settings.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20150529144541_api_sort_orders_with_gap.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/migrate/20160229172850_move_cached_city_geocodes_to_mongo.rb (100%) rename src/{api-umbrella => ruby}/web-app/db/seeds.rb (100%) rename src/{api-umbrella => ruby}/web-app/docker-compose.yml (100%) rename src/{api-umbrella => ruby}/web-app/lib/api_umbrella/attributify_data.rb (100%) rename src/{api-umbrella => ruby}/web-app/lib/api_umbrella/elasticsearch_proxy.rb (100%) rename src/{api-umbrella => ruby}/web-app/lib/common_validations.rb (100%) rename src/{api-umbrella => ruby}/web-app/lib/csv_streamer.rb (100%) rename src/{api-umbrella => ruby}/web-app/lib/js_locale_helper.rb (100%) rename src/{api-umbrella => ruby}/web-app/lib/known_hosts.rb (100%) rename src/{api-umbrella => ruby}/web-app/lib/mongoid/userstamp.rb (100%) rename src/{api-umbrella => ruby}/web-app/lib/tasks/i18n.rake (100%) rename src/{api-umbrella => ruby}/web-app/lib/tasks/rubocop.rake (100%) rename src/{api-umbrella => ruby}/web-app/lib/templates/erb/scaffold/_form.html.erb (100%) rename src/{api-umbrella => ruby}/web-app/public/404.html (100%) rename src/{api-umbrella => ruby}/web-app/public/422.html (100%) rename src/{api-umbrella => ruby}/web-app/public/500.html (100%) rename src/{api-umbrella => ruby}/web-app/script/migrate_logs (100%) rename src/{api-umbrella => ruby}/web-app/script/migrate_users (100%) rename src/{api-umbrella => ruby}/web-app/vendor/.gitkeep (100%) rename src/{api-umbrella => }/version.txt (100%) delete mode 100755 tasks/app-deps/admin-ui/yarn delete mode 100755 tasks/app-deps/web-app/bundle delete mode 100755 tasks/app/admin-ui/build mode change 100755 => 100644 tasks/app/static-site delete mode 100755 tasks/app/web-app/precompile delete mode 100755 tasks/build-deps/nodejs delete mode 100755 tasks/build-deps/yarn delete mode 100755 tasks/deps/bundler delete mode 100755 tasks/deps/elasticsearch delete mode 100755 tasks/deps/mongodb delete mode 100755 tasks/deps/mora delete mode 100755 tasks/deps/openresty delete mode 100755 tasks/deps/rsyslog delete mode 100755 tasks/deps/ruby delete mode 100755 tasks/deps/rubygems delete mode 100755 tasks/deps/trafficserver delete mode 100755 templates/etc/perp/mongod/rc.log delete mode 100755 templates/etc/perp/mongod/rc.main.mustache delete mode 100755 templates/etc/perp/mora/rc.log delete mode 100755 templates/etc/perp/mora/rc.main.mustache delete mode 100644 templates/etc/perp/rsyslog/rc.env.mustache delete mode 100755 templates/etc/perp/rsyslog/rc.log delete mode 100755 templates/etc/perp/rsyslog/rc.main.mustache diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 7945bf0a2..000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,45 +0,0 @@ -version: 2 -jobs: - build: - parallelism: 3 - working_directory: /app - docker: - - image: circleci/buildpack-deps:18.04-browsers - user: root - steps: - - checkout - # Install any system package dependencies. - - run: env INSTALL_TEST_DEPENDENCIES=true ./tasks/install-system-build-dependencies - - restore_cache: - # CircleCI's prefix based matching will mean the cache from the last - # cache for this branch will be restored. - key: cache-build-deps-{{ .Environment.CACHE_VERSION }}-{{ .Branch }}-{{ arch }}- - # The bootstrap's "task" file will be cached on subsequent runs, but due - # to the reliance on timestamps, this fact might not get picked up in the - # CI environment. So if a stamp file exists for the initial bootstrap - # process, re-touch it to prevent re-downloads. - - run: touch -c build/work/stamp/bootstrap-* - # Build all the API Umbrella software dependencies. - - run: ./configure - - run: make all test-deps - - run: make clean:dev - # Cache the staged build data and task checksums of what's been - # completed. - - save_cache: - key: cache-build-deps-{{ .Environment.CACHE_VERSION }}-{{ .Branch }}-{{ arch }}-{{ epoch }} - paths: - - .task - - build/work/dev-env - - build/work/stage - - build/work/stamp - - build/work/task - - build/work/tasks - - build/work/test-env - - run: groupadd -r api-umbrella && useradd -r -g api-umbrella -s /sbin/nologin -d /opt/api-umbrella -c "API Umbrella user" api-umbrella - - run: make test:circle-ci - - store_test_results: - path: test/tmp/reports - - store_artifacts: - path: test/tmp/run/api-umbrella-root/var/log - - store_artifacts: - path: test/tmp/capybara diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 07fda50a4..e0e27b1b4 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -10,13 +10,13 @@ on: - unlabeled env: - BASE_IMAGE_NAME: fiware/api-umbrella-base + BASE_IMAGE_NAME: fiware/api-umbrella TEST_IMAGE_NAME: fiware/api-umbrella-test - IMAGE_NAME: fiware/api-umbrella + QUAY_IO_BASE_NAME: quay.io/wi_stefan/api-umbrella jobs: - prerelease: + prerelease-version: runs-on: ubuntu-latest steps: @@ -44,20 +44,37 @@ jobs: - name: generate temporary tag run: echo IMAGE_TAG=${{ steps.out.outputs.version }} >> $GITHUB_ENV + create-images: + needs: prerelease-version + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + image: ["ui", "proxy", "trafficserver", "mora", "rsyslog", "api"] + + steps: + - name: Set up QEMU uses: docker/setup-qemu-action@v1 - - name: Log into registry + - name: Log into dockerhub run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u "${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin + - name: Log into quay.io + run: docker login -u "${{ secrets.QUAY_USERNAME }}" -p "${{ secrets.QUAY_PASSWORD }}" quay.io + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - name: Build base run: | - docker build -f Dockerfile-base -t api-umbrella-base:${{ env.IMAGE_TAG }} . + docker build -f docker/files/${{ matrix.image }}/Dockerfile -t ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} . + + - name: Push to dockerhub + run: | + docker push ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} - - name: Build and push snapshot + - name: Push to quay.io run: | - docker build -f Dockerfile-build-from-base -t ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} --build-arg BASE_IMAGE=api-umbrella-base:${{ env.IMAGE_TAG }} . - docker push ${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} \ No newline at end of file + docker tag ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} ${{env.QUAY_IO_BASE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} + docker push ${{env.QUAY_IO_BASE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} \ No newline at end of file diff --git a/Dockerfile-beta-deploy b/Dockerfile-beta-deploy deleted file mode 100644 index f42969353..000000000 --- a/Dockerfile-beta-deploy +++ /dev/null @@ -1,53 +0,0 @@ -FROM ubuntu:18.04 AS build - -RUN mkdir -p /app/build /build/.task /build/build/work -RUN ln -snf /build/.task /app/.task -RUN ln -snf /build/build/work /app/build/work -WORKDIR /app - -ENV DOCKER_DEV true -ENV NOKOGIRI_USE_SYSTEM_LIBRARIES 1 - -COPY tasks/install-system-build-dependencies /app/tasks/install-system-build-dependencies -COPY build/package_dependencies.sh /app/build/package_dependencies.sh -COPY tasks/helpers.sh /app/tasks/helpers.sh -RUN /app/tasks/install-system-build-dependencies - -COPY Makefile.in /app/Makefile.in -COPY Taskfile.yml /app/Taskfile.yml -COPY configure /app/configure -COPY tasks/bootstrap-* /app/tasks/ -RUN ./configure - -COPY build/patches /app/build/patches -COPY tasks/deps /app/tasks/deps -COPY tasks/clean/dev /app/tasks/clean/dev -RUN make deps && make clean:dev - -COPY tasks/build-deps /app/tasks/build-deps -RUN make build-deps && make clean:dev - -COPY src/api-umbrella/admin-ui/.yarnrc /app/src/api-umbrella/admin-ui/.yarnrc -COPY src/api-umbrella/admin-ui/package.json /app/src/api-umbrella/admin-ui/package.json -COPY src/api-umbrella/admin-ui/yarn.lock /app/src/api-umbrella/admin-ui/yarn.lock -COPY src/api-umbrella/web-app/Gemfile /app/src/api-umbrella/web-app/Gemfile -COPY src/api-umbrella/web-app/Gemfile.lock /app/src/api-umbrella/web-app/Gemfile.lock -COPY tasks/app-deps /app/tasks/app-deps -RUN make app-deps && make clean:dev - -COPY . /app -RUN make && make clean:dev -RUN make install DESTDIR="/build/install-destdir" - -FROM ubuntu:18.04 - -COPY --from=build /build/install-destdir / -COPY --from=build /app/build/package_dependencies.sh /tmp/install/package_dependencies.sh -COPY --from=build /app/build/package/scripts/after-install /tmp/install/after-install -RUN set -x && \ - apt-get update && \ - bash -c 'source /tmp/install/package_dependencies.sh && DEBIAN_FRONTEND=noninteractive apt-get -y --no-install-recommends install "${core_package_dependencies[@]}"' && \ - /tmp/install/after-install 1 && \ - rm -rf /tmp/install /var/lib/apt/lists/* - -CMD ["api-umbrella", "run"] diff --git a/Dockerfile-build b/Dockerfile-build deleted file mode 100644 index 5bc1aaec1..000000000 --- a/Dockerfile-build +++ /dev/null @@ -1,71 +0,0 @@ -FROM ubuntu:18.04 AS build - -ARG MAXMIND_LICENSE_KEY_ARG -ARG MAXMIND_EDITION_ID_ARG=GeoLite2-City -ARG MAXMIND_DOWNLOAD_URL_ARG=https://download.maxmind.com/app/geoip_download - -ENV MAXMIND_LICENSE_KEY=$MAXMIND_LICENSE_KEY_ARG -ENV MAXMIND_EDITION_ID=$MAXMIND_EDITION_ID_ARG -ENV MAXMIND_DOWNLOAD_URL=$MAXMIND_DOWNLOAD_URL_ARG - -RUN mkdir -p /app/build /build/.task /build/build/work -RUN ln -snf /build/.task /app/.task -RUN ln -snf /build/build/work /app/build/work -WORKDIR /app - -ENV DOCKER_DEV true -ENV NOKOGIRI_USE_SYSTEM_LIBRARIES 1 - -COPY tasks/install-system-build-dependencies /app/tasks/install-system-build-dependencies -COPY build/package_dependencies.sh /app/build/package_dependencies.sh -COPY tasks/helpers.sh /app/tasks/helpers.sh -RUN env INSTALL_TEST_DEPENDENCIES=true /app/tasks/install-system-build-dependencies - -COPY Makefile.in /app/Makefile.in -COPY Taskfile.yml /app/Taskfile.yml -COPY configure /app/configure -COPY tasks/bootstrap-* /app/tasks/ -RUN ./configure - -COPY build/patches /app/build/patches -COPY tasks/deps /app/tasks/deps -COPY tasks/clean/dev /app/tasks/clean/dev - -RUN if [[ -n "$MAXMIND_LICENSE_KEY_ARG" ]] ; then make deps:geolitecity ; else echo "If you want to use the geoIp-feature, please provide a valid license key." ; fi - -RUN make deps && make clean:dev - -COPY tasks/build-deps /app/tasks/build-deps -RUN make build-deps && make clean:dev - -COPY Gemfile /app/Gemfile -COPY Gemfile.lock /app/Gemfile.lock - -COPY src/api-umbrella/admin-ui/.yarnrc /app/src/api-umbrella/admin-ui/.yarnrc -COPY src/api-umbrella/admin-ui/package.json /app/src/api-umbrella/admin-ui/package.json -COPY src/api-umbrella/admin-ui/yarn.lock /app/src/api-umbrella/admin-ui/yarn.lock -COPY src/api-umbrella/web-app/Gemfile /app/src/api-umbrella/web-app/Gemfile -COPY src/api-umbrella/web-app/Gemfile.lock /app/src/api-umbrella/web-app/Gemfile.lock -COPY tasks/app-deps /app/tasks/app-deps -RUN make app-deps && make clean:dev - -COPY . /app -RUN make && make clean:dev - -RUN rm -rf build/work/tasks - -FROM ubuntu:18.04 - -COPY --from=build /app /app -COPY --from=build /build /build -WORKDIR /app -RUN env INSTALL_TEST_DEPENDENCIES=true /app/tasks/install-system-build-dependencies - -RUN groupadd -r api-umbrella && \ - useradd -r -g api-umbrella -s /sbin/nologin -d /opt/api-umbrella -c "API Umbrella user" api-umbrella - -ENV PATH "/app/bin:/build/build/work/dev-env/sbin:/build/build/work/dev-env/bin:/build/build/work/test-env/sbin:/build/build/work/test-env/bin:/build/build/work/stage/opt/api-umbrella/sbin:/build/build/work/stage/opt/api-umbrella/bin:/build/build/work/stage/opt/api-umbrella/embedded/sbin:/build/build/work/stage/opt/api-umbrella/embedded/bin:${PATH}" -ENV API_UMBRELLA_ROOT /build/build/work/stage/opt/api-umbrella - -ENTRYPOINT ["/app/docker/docker-entrypoint"] -CMD ["/app/docker/dev/docker-start"] diff --git a/Dockerfile-build-from-base b/Dockerfile-build-from-base deleted file mode 100644 index 65d7417c2..000000000 --- a/Dockerfile-build-from-base +++ /dev/null @@ -1,36 +0,0 @@ -ARG BASE_IMAGE=fiware/api-umbrella-base:latest -FROM ${BASE_IMAGE} AS build - -FROM ubuntu:18.04 - -COPY --from=build /app/bin /app/bin -COPY --from=build /app/tasks /app/tasks -COPY --from=build /app/config /app/config -COPY --from=build /app/build /app/build -COPY --from=build /app/docker /app/docker -COPY --from=build /app/src /app/src -COPY --from=build /app/templates /app/templates - -WORKDIR /app -RUN /app/tasks/install-system-build-dependencies - -RUN groupadd -r api-umbrella && \ - useradd -r -g api-umbrella -s /sbin/nologin -d /opt/api-umbrella -c "API Umbrella user" api-umbrella - -ENV PATH "/app/bin:/build/build/work/dev-env/sbin:/build/build/work/dev-env/bin:/build/build/work/test-env/sbin:/build/build/work/test-env/bin:/build/build/work/stage/opt/api-umbrella/sbin:/build/build/work/stage/opt/api-umbrella/bin:/build/build/work/stage/opt/api-umbrella/embedded/sbin:/build/build/work/stage/opt/api-umbrella/embedded/bin:${PATH}" -ENV API_UMBRELLA_ROOT /opt/api-umbrella -ENV API_UMBRELLA_SRC_ROOT /app - -RUN mkdir -p /etc/api-umbrella -RUN mkdir /opt/api-umbrella -RUN mkdir /opt/api-umbrella/etc -RUN mkdir /opt/api-umbrella/var - -RUN mkdir /opt/api-umbrella/var/log -RUN mkdir /opt/api-umbrella/var/run -RUN mkdir /opt/api-umbrella/var/tmp -RUN mkdir /opt/api-umbrella/var/db - -RUN chmod -R a+rwx /opt - -ENTRYPOINT ["/app/docker/dev/docker-start-command"] diff --git a/Dockerfile-dev b/Dockerfile-dev deleted file mode 100644 index 5519905bf..000000000 --- a/Dockerfile-dev +++ /dev/null @@ -1,4 +0,0 @@ -FROM nrel/api-umbrella-dev-env:latest - -WORKDIR /app -RUN ./configure && make diff --git a/Dockerfile-dev-build b/Dockerfile-dev-build deleted file mode 100644 index d393db10f..000000000 --- a/Dockerfile-dev-build +++ /dev/null @@ -1,85 +0,0 @@ -FROM ubuntu:18.04 AS build - -RUN mkdir -p /app/build /build/.task /build/build/work -RUN ln -snf /build/.task /app/.task -RUN ln -snf /build/build/work /app/build/work -WORKDIR /app - -ENV DOCKER_DEV true -ENV NOKOGIRI_USE_SYSTEM_LIBRARIES 1 - -COPY tasks/install-system-build-dependencies /app/tasks/install-system-build-dependencies -COPY build/package_dependencies.sh /app/build/package_dependencies.sh -COPY tasks/helpers.sh /app/tasks/helpers.sh -RUN env INSTALL_TEST_DEPENDENCIES=true /app/tasks/install-system-build-dependencies - -COPY Makefile.in /app/Makefile.in -COPY Taskfile-dev.yml /app/Taskfile.yml -COPY configure /app/configure -COPY tasks/bootstrap-* /app/tasks/ -RUN ./configure - -COPY build/patches /app/build/patches -COPY tasks/deps /app/tasks/deps -COPY tasks/clean/dev /app/tasks/clean/dev -RUN make deps && make clean:dev - -COPY tasks/build-deps /app/tasks/build-deps -RUN make build-deps && make clean:dev - -COPY Gemfile /app/Gemfile -COPY Gemfile.lock /app/Gemfile.lock -COPY tasks/test-deps /app/tasks/test-deps -RUN make test-deps && make clean:dev - -COPY src/api-umbrella/admin-ui/.yarnrc /app/src/api-umbrella/admin-ui/.yarnrc -COPY src/api-umbrella/admin-ui/package.json /app/src/api-umbrella/admin-ui/package.json -COPY src/api-umbrella/admin-ui/yarn.lock /app/src/api-umbrella/admin-ui/yarn.lock -COPY src/api-umbrella/web-app/Gemfile /app/src/api-umbrella/web-app/Gemfile -COPY src/api-umbrella/web-app/Gemfile.lock /app/src/api-umbrella/web-app/Gemfile.lock -COPY tasks/app-deps /app/tasks/app-deps -RUN make app-deps && make clean:dev - -COPY . /app -RUN make && make clean:dev - -RUN rm -rf build/work/tasks - -FROM ubuntu:18.04 - -COPY --from=build /app /app -COPY --from=build /build /build -WORKDIR /app -RUN env INSTALL_TEST_DEPENDENCIES=true /app/tasks/install-system-build-dependencies - -# Add Chrome for integration tests, similar to how the CircleCI images add it: -# https://github.com/CircleCI-Public/circleci-dockerfiles/blob/c24e69355b400aaba34a1ddfc55cdb1fef9dedff/buildpack-deps/images/xenial/browsers/Dockerfile#L47 -RUN set -x && \ - apt-get update && \ - curl --silent --show-error --location --fail --retry 3 --output /tmp/google-chrome-stable_current_amd64.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \ - (dpkg -i /tmp/google-chrome-stable_current_amd64.deb || apt-get -fy install) && \ - rm -f /tmp/google-chrome-stable_current_amd64.deb && \ - sed -i 's|HERE/chrome"|HERE/chrome" --disable-setuid-sandbox --no-sandbox|g' /opt/google/chrome/google-chrome && \ - google-chrome --version -RUN set -x && \ - CHROME_VERSION="$(google-chrome --version)" && \ - export CHROMEDRIVER_RELEASE="$(echo $CHROME_VERSION | sed 's/^Google Chrome //')" && export CHROMEDRIVER_RELEASE=${CHROMEDRIVER_RELEASE%%.*} && \ - CHROMEDRIVER_VERSION=$(curl --location --fail --retry 3 http://chromedriver.storage.googleapis.com/LATEST_RELEASE_${CHROMEDRIVER_RELEASE}) && \ - curl --silent --show-error --location --fail --retry 3 --output /tmp/chromedriver_linux64.zip "http://chromedriver.storage.googleapis.com/$CHROMEDRIVER_VERSION/chromedriver_linux64.zip" && \ - cd /tmp && \ - unzip chromedriver_linux64.zip && \ - rm -rf chromedriver_linux64.zip && \ - mv chromedriver /usr/local/bin/chromedriver && \ - chmod +x /usr/local/bin/chromedriver && \ - chromedriver --version - -RUN groupadd -r api-umbrella && \ - useradd -r -g api-umbrella -s /sbin/nologin -d /opt/api-umbrella -c "API Umbrella user" api-umbrella - -ENV PATH "/app/bin:/build/build/work/dev-env/sbin:/build/build/work/dev-env/bin:/build/build/work/test-env/sbin:/build/build/work/test-env/bin:/build/build/work/stage/opt/api-umbrella/sbin:/build/build/work/stage/opt/api-umbrella/bin:/build/build/work/stage/opt/api-umbrella/embedded/sbin:/build/build/work/stage/opt/api-umbrella/embedded/bin:${PATH}" -ENV API_UMBRELLA_ROOT /build/build/work/stage/opt/api-umbrella -ENV HTTP_PORT 8080 -ENV HTTPS_PORT 8443 - -ENTRYPOINT ["/app/docker/dev/docker-entrypoint"] -CMD ["/app/docker/dev/docker-start"] diff --git a/README.md b/README.md index 198945fe7..f90e77c58 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ [![](https://nexus.lab.fiware.org/repository/raw/public/badges/chapters/api-management.svg)](https://www.fiware.org/developers/catalogue/) [![License badge](https://img.shields.io/github/license/FIWARE/api-umbrella.svg)](https://opensource.org/licenses/MIT) [![](https://img.shields.io/badge/tag-fiware-orange.svg?logo=stackoverflow)](http://stackoverflow.com/questions/tagged/fiware) -
[![CircleCI](https://circleci.com/gh/NREL/api-umbrella.svg?style=svg)](https://circleci.com/gh/NREL/api-umbrella) ![Status](https://nexus.lab.fiware.org/static/badges/statuses/apinf.svg) # APInf Umbrella diff --git a/Taskfile.yml b/Taskfile.yml index a907b484a..ca1973deb 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -29,19 +29,6 @@ version: "2" output: interleaved tasks: - deps:bundler: - deps: - - deps:rubygems - cmds: - - ./tasks/deps/bundler - sources: - - ./build/work/stamp/deps/rubygems - - ./tasks/deps/bundler - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/deps/bundler - method: checksum - deps:geolitecity: cmds: - ./tasks/deps/geolitecity @@ -93,41 +80,15 @@ tasks: method: checksum deps:luarocks: - deps: - - deps:openresty cmds: - ./tasks/deps/luarocks sources: - - ./build/work/stamp/deps/openresty - ./tasks/deps/luarocks - ./tasks/helpers.sh generates: - ./build/work/stamp/deps/luarocks method: checksum - deps:mora: - cmds: - - ./tasks/deps/mora - sources: - - ./tasks/deps/mora - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/deps/mora - method: checksum - - deps:openresty: - deps: - - deps:libmaxminddb - cmds: - - ./tasks/deps/openresty - sources: - - ./build/work/stamp/deps/libmaxminddb - - ./tasks/deps/openresty - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/deps/openresty - method: checksum - deps:perp: cmds: - ./tasks/deps/perp @@ -138,44 +99,6 @@ tasks: - ./build/work/stamp/deps/perp method: checksum - deps:rsyslog: - deps: - - deps:libestr - - deps:libfastjson - cmds: - - ./tasks/deps/rsyslog - sources: - - ./build/work/stamp/deps/libestr - - ./build/work/stamp/deps/libfastjson - - ./tasks/deps/rsyslog - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/deps/rsyslog - method: checksum - - deps:ruby: - cmds: - - ./tasks/deps/ruby - sources: - - ./tasks/deps/ruby - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/deps/ruby - method: checksum - - deps:rubygems: - deps: - - deps:ruby - cmds: - - ./tasks/deps/rubygems - sources: - - ./build/work/stamp/deps/ruby - - ./tasks/deps/rubygems - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/deps/rubygems - method: checksum - deps:runit_svlogd: cmds: - ./tasks/deps/runit_svlogd @@ -186,73 +109,12 @@ tasks: - ./build/work/stamp/deps/runit_svlogd method: checksum - deps:trafficserver: - deps: - - deps:openresty - cmds: - - ./tasks/deps/trafficserver - sources: - - ./build/work/stamp/deps/openresty - - ./tasks/deps/trafficserver - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/deps/trafficserver - method: checksum - deps: cmds: - - task: deps:bundler - task: deps:libcidr - task: deps:luarocks - - task: deps:mora - - task: deps:openresty - task: deps:perp - - task: deps:rsyslog - task: deps:runit_svlogd - - task: deps:trafficserver - - build-deps:nodejs: - cmds: - - ./tasks/build-deps/nodejs - sources: - - ./tasks/build-deps/nodejs - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/build-deps/nodejs - method: checksum - - build-deps:yarn: - deps: - - build-deps:nodejs - cmds: - - ./tasks/build-deps/yarn - sources: - - ./build/work/stamp/build-deps/nodejs - - ./tasks/build-deps/yarn - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/build-deps/yarn - method: checksum - - build-deps: - cmds: - - task: build-deps:yarn - - app-deps:admin-ui:yarn: - deps: - - build-deps:yarn - cmds: - - ./tasks/app-deps/admin-ui/yarn - sources: - - ./build/work/stamp/build-deps/yarn - - ./src/api-umbrella/admin-ui/.yarnrc - - ./src/api-umbrella/admin-ui/package.json - - ./src/api-umbrella/admin-ui/yarn.lock - - ./tasks/app-deps/admin-ui/yarn - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/app-deps/admin-ui/yarn - method: checksum app-deps:lua:argparse: deps: @@ -490,24 +352,9 @@ tasks: - ./build/work/stamp/app-deps/lua/resty-uuid method: checksum - app-deps:web-app:bundle: - deps: - - deps:bundler - cmds: - - ./tasks/app-deps/web-app/bundle - sources: - - ./build/work/stamp/deps/bundler - - ./src/api-umbrella/web-app/Gemfile - - ./src/api-umbrella/web-app/Gemfile.lock - - ./tasks/app-deps/web-app/bundle - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/app-deps/web-app/bundle - method: checksum app-deps: cmds: - - task: app-deps:admin-ui:yarn - task: app-deps:lua:argparse - task: app-deps:lua:cmsgpack - task: app-deps:lua:icu-date @@ -526,103 +373,26 @@ tasks: - task: app-deps:lua:resty-shcache - task: app-deps:lua:resty-txid - task: app-deps:lua:resty-uuid - - task: app-deps:web-app:bundle - - app:admin-ui:build: - deps: - - app-deps:admin-ui:yarn - cmds: - - ./tasks/app/admin-ui/build - sources: - - ./build/work/stamp/app-deps/admin-ui/yarn - - ./src/api-umbrella/admin-ui/app/**/*.hbs - - ./src/api-umbrella/admin-ui/app/**/*.html - - ./src/api-umbrella/admin-ui/app/**/*.js - - ./src/api-umbrella/admin-ui/app/**/*.scss - - ./src/api-umbrella/admin-ui/config/**/*.js - - ./src/api-umbrella/admin-ui/ember-cli-build.js - - ./src/api-umbrella/admin-ui/lib/**/*.js - - ./tasks/app/admin-ui/build - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/app/admin-ui/build - method: checksum - - app:core: - deps: - - app:admin-ui:build - - app:web-app:precompile - cmds: - - ./tasks/app/core - sources: - - ./build/work/stamp/app/admin-ui/build - - ./build/work/stamp/app/web-app/precompile - - ./tasks/app/core - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/app/core - method: checksum - - app:static-site: - deps: - - build-deps:nodejs - - deps:bundler - cmds: - - ./tasks/app/static-site - sources: - - ./build/work/stamp/build-deps/nodejs - - ./build/work/stamp/deps/bundler - - ./tasks/app/static-site - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/app/static-site - method: checksum - app:web-app:precompile: - deps: - - build-deps:nodejs - - app-deps:web-app:bundle - cmds: - - ./tasks/app/web-app/precompile - sources: - - ./build/work/stamp/app-deps/web-app/bundle - - ./build/work/stamp/build-deps/nodejs - - ./src/api-umbrella/web-app/app/assets/**/*.css - - ./src/api-umbrella/web-app/app/assets/**/*.erb - - ./src/api-umbrella/web-app/app/assets/**/*.js - - ./src/api-umbrella/web-app/app/assets/**/*.scss - - ./tasks/app/web-app/precompile - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/app/web-app/precompile - method: checksum +# app:core: +# cmds: +# - ./tasks/app/core +# sources: +# - ./tasks/app/core +# - ./tasks/helpers.sh +# generates: +# - ./build/work/stamp/app/core +# method: checksum - app: - cmds: - - task: app:core - - task: app:static-site +# app: +# cmds: +# - task: app:core all: cmds: - - task: build-deps - task: deps - task: app-deps - - task: app - - test-deps:bundle: - deps: - - deps:bundler - cmds: - - ./tasks/test-deps/bundle - sources: - - ./build/work/stamp/deps/bundler - - ./Gemfile - - ./Gemfile.lock - - ./tasks/test-deps/bundle - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/bundle - method: checksum +# - task: app test-deps:lua:luacheck: deps: @@ -660,40 +430,10 @@ tasks: - ./build/work/stamp/test-deps/mailhog method: checksum - test-deps:elasticsearch: - cmds: - - ./tasks/test-deps/elasticsearch - sources: - - ./tasks/test-deps/elasticsearch - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/elasticsearch - method: checksum - - test-deps:mongodb: - cmds: - - ./tasks/deps/mongodb - sources: - - ./tasks/deps/mongodb - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/deps/mongodb - method: checksum - test-deps:eslint: cmds: - ./tasks/test-deps/eslint - test-deps:mongo-orchestration: - cmds: - - ./tasks/test-deps/mongo-orchestration - sources: - - ./tasks/test-deps/mongo-orchestration - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/mongo-orchestration - method: checksum - test-deps:openldap: cmds: - ./tasks/test-deps/openldap @@ -727,11 +467,9 @@ tasks: test-deps: cmds: - task: test-deps:bundle - - task: test-deps:elasticsearch - task: test-deps:lua:luacheck - task: test-deps:lua:penlight - task: test-deps:mailhog - - task: test-deps:mongo-orchestration - task: test-deps:openldap - task: test-deps:shellcheck - task: test-deps:unbound diff --git a/build/package_dependencies.sh b/build/package_dependencies.sh index 78233124f..5e6040eb0 100644 --- a/build/package_dependencies.sh +++ b/build/package_dependencies.sh @@ -39,11 +39,11 @@ if [ -f /etc/redhat-release ]; then tcl # ElasticSearch - java-1.8.0-openjdk-headless + openjdk-11-jre which # rsyslog omelasticsearch - libcurl + # libcurl # init.d script helpers initscripts @@ -128,9 +128,9 @@ if [ -f /etc/redhat-release ]; then sudo ) elif [ -f /etc/debian_version ]; then - libcurl_version=3 + libcurl_version=4 libtool_bin_package="libtool-bin" - openjdk_version=8 + openjdk_version=11 if [[ "$ID" == "ubuntu" && "$VERSION_ID" == "18.04" ]]; then libcurl_version=4 diff --git a/config/default.yml b/config/default.yml index 2f1758157..7d5752a0a 100644 --- a/config/default.yml +++ b/config/default.yml @@ -1,15 +1,12 @@ app_env: production services: - - general_db - - log_db - router - - web user: api-umbrella group: api-umbrella rlimits: nofile: 100000 nproc: 20000 -http_port: 80 +http_port: 8080 https_port: 443 listen: addresses: @@ -18,7 +15,7 @@ listen: nginx: workers: auto worker_connections: 8192 - error_log_level: warn + error_log_level: info access_log_filename: access.log access_log_options: buffer=256k flush=10s large_client_header_buffers: 4 8k @@ -177,7 +174,7 @@ rsyslog: host: 127.0.0.1 port: 14014 log: - destination: file + destination: console dns_resolver: negative_ttl: 60 max_stale: 86400 @@ -188,43 +185,19 @@ dns_resolver: # default. Enabling may also break certain hosting environments that still # aren't IPv6 compatible. allow_ipv6: false +# config used by mora mongodb: - url: "mongodb://127.0.0.1:14001/api_umbrella" + url: "mongodb://127.0.0.1:27017/api_umbrella" read_preference: primaryPreferred - embedded_server_config: - processManagement: - fork: false - net: - bindIp: 127.0.0.1 - port: 14001 mora: host: 127.0.0.1 - port: 14004 + port: 8181 timeout: 0 elasticsearch: hosts: - - "http://127.0.0.1:14002" - embedded_server_env: - heap_size: 512m + - "http://127.0.0.1:9200" api_version: 2 template_version: 1 - embedded_server_config: - network: - host: 127.0.0.1 - http: - port: 14002 - transport: - tcp: - port: 14003 - cluster: - name: api-umbrella - indices: - fielddata: - cache: - size: 40% - breaker: - fielddata: - limit: 60% aws_signing_proxy: host: 127.0.0.1 port: 14017 diff --git a/docker/files/api/Dockerfile b/docker/files/api/Dockerfile new file mode 100644 index 000000000..0460ece0d --- /dev/null +++ b/docker/files/api/Dockerfile @@ -0,0 +1,28 @@ +FROM ruby:2.4.6 + +RUN apt-get update +RUN apt-get install -y libsass1 +RUN apt-get install -y libsass-dev +RUN apt-get install -y nodejs + +COPY ./src/ruby/web-app /opt/api-umbrella/src +WORKDIR /opt/api-umbrella/src + +RUN bundle update --bundler +RUN bundle config --local without "development:test:assets" +RUN bundle config --local clean true +RUN bundle config --local deployment true +RUN bundle install + +ENV API_UMBRELLA_RUNTIME_CONFIG="/config/config.yml" + +RUN wget https://github.com/mikefarah/yq/releases/download/v4.2.0/yq_linux_amd64 -O /usr/bin/yq &&\ + chmod +x /usr/bin/yq + +COPY ./src/version.txt /opt/api-umbrella/version.txt +COPY ./config/default.yml /config/config.yml + +# copy entrypoint +COPY ./docker/files/api/entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/files/api/entrypoint.sh b/docker/files/api/entrypoint.sh new file mode 100755 index 000000000..b59f82d05 --- /dev/null +++ b/docker/files/api/entrypoint.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +bundle exec puma -q --dir /opt/api-umbrella/src -w $(yq e '.web.puma.workers' /config/config.yml) -t$(yq e '.web.puma.min_threads' /config/config.yml):$(yq e '.web.puma.max_threads' /config/config.yml) \ No newline at end of file diff --git a/docker/files/install-mustache-cli.sh b/docker/files/install-mustache-cli.sh new file mode 100755 index 000000000..819989409 --- /dev/null +++ b/docker/files/install-mustache-cli.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +mkdir /opt/mustache +cd /opt/mustache + +# install mustache cli for creating the config +wget https://github.com/cbroglie/mustache/releases/download/v1.3.0/mustache_1.3.0_linux_amd64.tar.gz +tar xf mustache_1.3.0_linux_amd64.tar.gz -C /opt/mustache \ No newline at end of file diff --git a/docker/files/mora/Dockerfile b/docker/files/mora/Dockerfile new file mode 100644 index 000000000..1601fa890 --- /dev/null +++ b/docker/files/mora/Dockerfile @@ -0,0 +1,33 @@ +FROM debian:11.0 as build + +RUN apt-get update +RUN apt-get install -y wget +RUN apt-get install -y git + +# install mustache cli for creating the config +COPY ./docker/files/install-mustache-cli.sh /temp/install-mustache-cli.sh +RUN /temp/install-mustache-cli.sh + +# checkout current mora +RUN git clone https://github.com/emicklei/mora.git + +FROM golang:1.17.2-alpine3.13 + +COPY --from=build /opt/mustache/mustache /usr/local/bin/mustache +COPY --from=build /mora /mora + +# mustache file for mora config +COPY ./templates/etc/mora.properties.mustache /templates/mora.properties.mustache +# copy in default config +COPY ./config/default.yml /config/config.yml + +WORKDIR /mora + +# install mora +RUN go get -d -v ./ +RUN go install -v ./ + +# copy entrypoint +COPY ./docker/files/mora/entrypoint.sh /mora/entrypoint.sh + +ENTRYPOINT ["/mora/entrypoint.sh"] diff --git a/docker/files/mora/entrypoint.sh b/docker/files/mora/entrypoint.sh new file mode 100755 index 000000000..539ae4925 --- /dev/null +++ b/docker/files/mora/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +mustache /config/config.yml /templates/mora.properties.mustache > mora.properties + +mora -config mora.properties \ No newline at end of file diff --git a/docker/files/proxy/Dockerfile b/docker/files/proxy/Dockerfile new file mode 100644 index 000000000..e41af431c --- /dev/null +++ b/docker/files/proxy/Dockerfile @@ -0,0 +1,66 @@ +FROM openresty/openresty:1.19.9.1-1-buster-fat as build + +ARG MAXMIND_LICENSE_KEY_ARG +ARG MAXMIND_EDITION_ID_ARG=GeoLite2-City +ARG MAXMIND_DOWNLOAD_URL_ARG=https://download.maxmind.com/app/geoip_download + +ENV MAXMIND_LICENSE_KEY=$MAXMIND_LICENSE_KEY_ARG +ENV MAXMIND_EDITION_ID=$MAXMIND_EDITION_ID_ARG +ENV MAXMIND_DOWNLOAD_URL=$MAXMIND_DOWNLOAD_URL_ARG + +ENV NOKOGIRI_USE_SYSTEM_LIBRARIES 1 + +COPY ./src/lua/auto-ssl /opt/api-umbrella/src/api-umbrella/auto-ssl +COPY ./src/lua/cli /opt/api-umbrella/src/api-umbrella/cli +COPY ./src/lua/elasticsearch-aws-signing-proxy /opt/api-umbrella/src/api-umbrella/elasticsearch-aws-signing-proxy +COPY ./src/lua/http-api /opt/api-umbrella/src/api-umbrella/http-api +COPY ./src/lua/proxy /opt/api-umbrella/src/api-umbrella/proxy +COPY ./src/lua/utils /opt/api-umbrella/src/api-umbrella/utils +COPY ./src/lua/cli.lua /opt/api-umbrella/src/api-umbrella/cli.lua +COPY ./src/lua/conf.lua /opt/api-umbrella/src/conf.lua + +COPY ./bin /opt/api-umbrella/bin +COPY ./build /opt/api-umbrella/build +COPY ./templates/etc/nginx /opt/api-umbrella/templates/etc/nginx +COPY ./templates/etc/perp /opt/api-umbrella/templates/etc/perp +COPY ./tasks /opt/api-umbrella/tasks +COPY ./Taskfile.yml /opt/api-umbrella/Taskfile.yml +COPY ./Makefile.in /opt/api-umbrella/Makefile.in +COPY ./configure /opt/api-umbrella/configure + +WORKDIR /opt/api-umbrella + +RUN ./tasks/install-system-build-dependencies +RUN ./configure + +RUN if [[ -n "$MAXMIND_LICENSE_KEY_ARG" ]] ; then make deps:geolitecity ; else echo "If you want to use the geoIp-feature, please provide a valid license key." ; fi + +RUN echo "Install dependencies" +RUN make deps && make clean:dev + +RUN echo "Install app dependencies" +RUN make app-deps && make clean:dev + +RUN echo "Make all" +RUN make && make clean:dev + +RUN groupadd -r api-umbrella && \ + useradd -r -g api-umbrella -s /sbin/nologin -d /opt/api-umbrella -c "API Umbrella user" api-umbrella + +ENV API_UMBRELLA_ROOT /opt/api-umbrella +ENV API_UMBRELLA_SRC_ROOT /opt/api-umbrella +ENV PATH "/opt/api-umbrella/bin:${PATH}" + +COPY ./config/ /opt/api-umbrella/config/ + +RUN mkdir /opt/api-umbrella/etc +RUN mkdir /opt/api-umbrella/var + +# required for nginx error logs +RUN mkdir /opt/api-umbrella/logs +RUN mkdir /opt/api-umbrella/var/log +RUN mkdir /opt/api-umbrella/var/run +RUN mkdir /opt/api-umbrella/var/tmp +RUN mkdir /opt/api-umbrella/var/db + +CMD ["api-umbrella", "run"] \ No newline at end of file diff --git a/docker/files/rsyslog/Dockerfile b/docker/files/rsyslog/Dockerfile new file mode 100644 index 000000000..267e04dd6 --- /dev/null +++ b/docker/files/rsyslog/Dockerfile @@ -0,0 +1,27 @@ +FROM debian:11.0 as build + +RUN apt-get update +RUN apt-get install -y wget + +# install mustache cli for creating the config +COPY ./docker/files/install-mustache-cli.sh /temp/install-mustache-cli.sh +RUN /temp/install-mustache-cli.sh + +FROM debian:11.0-slim + +COPY --from=build /opt/mustache/mustache /usr/local/bin/mustache + +# install rsyslog +RUN apt-get update +RUN apt-get install -y rsyslog + +# copy in default config and config template +COPY ./config/default.yml /config/config.yml +COPY ./templates/etc/rsyslog.d/analytics.conf.mustache /templates/analytics.conf.mustache +COPY ./templates/etc/rsyslog.conf.mustache /templates/rsyslog.conf.mustache + +# copy entrypoint +COPY ./docker/files/rsyslog/entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] + diff --git a/docker/files/rsyslog/entrypoint.sh b/docker/files/rsyslog/entrypoint.sh new file mode 100755 index 000000000..5b7cc3f40 --- /dev/null +++ b/docker/files/rsyslog/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +mustache /config/config.yml /templates/analytics.conf.mustache > /etc/rsyslog.d/analytics.conf +mustache /config/config.yml /templates/rsyslog.conf.mustache > /etc/rsyslog.conf + +# run with -n to prevent auto-backgrounding +rsyslogd -n \ No newline at end of file diff --git a/docker/files/trafficserver/Dockerfile b/docker/files/trafficserver/Dockerfile new file mode 100644 index 000000000..be1235d71 --- /dev/null +++ b/docker/files/trafficserver/Dockerfile @@ -0,0 +1,52 @@ +FROM debian:11.0 as build + +RUN apt-get update +RUN apt-get install -y wget +RUN apt-get install -y git + +# install mustache cli for creating the config +COPY ./docker/files/install-mustache-cli.sh /temp/install-mustache-cli.sh +RUN /temp/install-mustache-cli.sh + +RUN git clone https://luajit.org/git/luajit.git +RUN git clone https://git-wip-us.apache.org/repos/asf/trafficserver.git + +FROM debian:11.0 + +RUN apt-get update +RUN apt-get install -y autoconf +RUN apt-get install -y automake +RUN apt-get install -y pkg-config +RUN apt-get install -y libtool +RUN apt-get install -y libpcre3 libpcre3-dev +RUN apt-get install -y libpcap0.8 +RUN apt-get install -y flex +RUN apt-get install -y hwloc +RUN apt-get install -y lua5.4 +RUN apt-get install -y zlib1g +RUN apt-get install -y zlib1g-dev +RUN apt-get install -y libncurses5-dev libncursesw5-dev +RUN apt-get install -y curl +RUN apt-get install -y build-essential +RUN apt-get install -y libssl-dev + +COPY --from=build /opt/mustache/mustache /usr/local/bin/mustache +COPY --from=build /trafficserver /trafficserver +COPY --from=build /luajit /luajit + +WORKDIR /luajit +RUN make install PREFIX=/opt/luajit + +WORKDIR /trafficserver +RUN autoreconf -if +RUN ./configure --prefix=/opt/ts --with-luajit="/opt/luajit" +RUN make +RUN make install + +COPY ./config/default.yml /config/config.yml +COPY ./templates/etc/trafficserver /templates/ + +# copy entrypoint +COPY ./docker/files/trafficserver/entrypoint.sh /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/docker/files/trafficserver/entrypoint.sh b/docker/files/trafficserver/entrypoint.sh new file mode 100755 index 000000000..c69ff3cbd --- /dev/null +++ b/docker/files/trafficserver/entrypoint.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +mkdir /templates/config + +mustache /config/config.yml /templates/logging.yaml.mustache > /templates/logging.yaml +mustache /config/config.yml /templates/plugin.config.mustache > /templates/plugin.config +mustache /config/config.yml /templates/records.config.mustache > /templates/records.config +mustache /config/config.yml /templates/remap.config.mustache > /templates/remap.config +mustache /config/config.yml /templates/storage.config.mustache > /templates/storage.config +mustache /config/config.yml /templates/records.config.mustache +cp -a /templates/. /opt/ts/etc/trafficserver/ + +/opt/ts/bin/traffic_manager \ No newline at end of file diff --git a/docker/files/ui/Dockerfile b/docker/files/ui/Dockerfile new file mode 100644 index 000000000..e6d2bde4c --- /dev/null +++ b/docker/files/ui/Dockerfile @@ -0,0 +1,10 @@ +FROM node:10.15.3 + +COPY ./src/js/admin-ui /admin-ui + +WORKDIR admin-ui + +RUN npm install -g ember-cli@3.8.1 +RUN npm install +RUN DEBUG=ember-cli:* ember build +CMD ember serve \ No newline at end of file diff --git a/src/api-umbrella/admin-ui/node_modules b/src/api-umbrella/admin-ui/node_modules deleted file mode 120000 index d324b6f3e..000000000 --- a/src/api-umbrella/admin-ui/node_modules +++ /dev/null @@ -1 +0,0 @@ -/app/build/work/tasks/app-deps/admin-ui/yarn/_persist/node_modules \ No newline at end of file diff --git a/src/api-umbrella/admin-ui/.editorconfig b/src/js/admin-ui/.editorconfig similarity index 100% rename from src/api-umbrella/admin-ui/.editorconfig rename to src/js/admin-ui/.editorconfig diff --git a/src/api-umbrella/admin-ui/.ember-cli b/src/js/admin-ui/.ember-cli similarity index 100% rename from src/api-umbrella/admin-ui/.ember-cli rename to src/js/admin-ui/.ember-cli diff --git a/src/api-umbrella/admin-ui/.eslintignore b/src/js/admin-ui/.eslintignore similarity index 100% rename from src/api-umbrella/admin-ui/.eslintignore rename to src/js/admin-ui/.eslintignore diff --git a/src/api-umbrella/admin-ui/.eslintrc.js b/src/js/admin-ui/.eslintrc.js similarity index 100% rename from src/api-umbrella/admin-ui/.eslintrc.js rename to src/js/admin-ui/.eslintrc.js diff --git a/src/api-umbrella/admin-ui/.gitignore b/src/js/admin-ui/.gitignore similarity index 100% rename from src/api-umbrella/admin-ui/.gitignore rename to src/js/admin-ui/.gitignore diff --git a/src/api-umbrella/admin-ui/.template-lintrc.js b/src/js/admin-ui/.template-lintrc.js similarity index 100% rename from src/api-umbrella/admin-ui/.template-lintrc.js rename to src/js/admin-ui/.template-lintrc.js diff --git a/src/api-umbrella/admin-ui/.watchmanconfig b/src/js/admin-ui/.watchmanconfig similarity index 100% rename from src/api-umbrella/admin-ui/.watchmanconfig rename to src/js/admin-ui/.watchmanconfig diff --git a/src/api-umbrella/admin-ui/.yarnrc b/src/js/admin-ui/.yarnrc similarity index 100% rename from src/api-umbrella/admin-ui/.yarnrc rename to src/js/admin-ui/.yarnrc diff --git a/src/api-umbrella/admin-ui/README.md b/src/js/admin-ui/README.md similarity index 100% rename from src/api-umbrella/admin-ui/README.md rename to src/js/admin-ui/README.md diff --git a/src/api-umbrella/admin-ui/app/adapters/application.js b/src/js/admin-ui/app/adapters/application.js similarity index 98% rename from src/api-umbrella/admin-ui/app/adapters/application.js rename to src/js/admin-ui/app/adapters/application.js index 25c57dd50..46623dff6 100644 --- a/src/api-umbrella/admin-ui/app/adapters/application.js +++ b/src/js/admin-ui/app/adapters/application.js @@ -5,6 +5,7 @@ import isPlainObject from 'lodash-es/isPlainObject'; import isString from 'lodash-es/isString'; export default RESTAdapter.extend({ + host: 'http://myhost.com', // Build the URL using the customizable "urlRoot" attribute that can be set // on the model class. buildURL(modelName, id, snapshot) { diff --git a/src/api-umbrella/admin-ui/app/app.js b/src/js/admin-ui/app/app.js similarity index 100% rename from src/api-umbrella/admin-ui/app/app.js rename to src/js/admin-ui/app/app.js diff --git a/src/api-umbrella/admin-ui/app/authenticators/devise-server-side.js b/src/js/admin-ui/app/authenticators/devise-server-side.js similarity index 100% rename from src/api-umbrella/admin-ui/app/authenticators/devise-server-side.js rename to src/js/admin-ui/app/authenticators/devise-server-side.js diff --git a/src/api-umbrella/admin-ui/app/components/.gitkeep b/src/js/admin-ui/app/components/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/app/components/.gitkeep rename to src/js/admin-ui/app/components/.gitkeep diff --git a/src/api-umbrella/admin-ui/app/components/admin-groups/index-table.js b/src/js/admin-ui/app/components/admin-groups/index-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/admin-groups/index-table.js rename to src/js/admin-ui/app/components/admin-groups/index-table.js diff --git a/src/api-umbrella/admin-ui/app/components/admin-groups/record-form.js b/src/js/admin-ui/app/components/admin-groups/record-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/admin-groups/record-form.js rename to src/js/admin-ui/app/components/admin-groups/record-form.js diff --git a/src/api-umbrella/admin-ui/app/components/admins/index-table.js b/src/js/admin-ui/app/components/admins/index-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/admins/index-table.js rename to src/js/admin-ui/app/components/admins/index-table.js diff --git a/src/api-umbrella/admin-ui/app/components/admins/record-form.js b/src/js/admin-ui/app/components/admins/record-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/admins/record-form.js rename to src/js/admin-ui/app/components/admins/record-form.js diff --git a/src/api-umbrella/admin-ui/app/components/api-scopes/index-table.js b/src/js/admin-ui/app/components/api-scopes/index-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/api-scopes/index-table.js rename to src/js/admin-ui/app/components/api-scopes/index-table.js diff --git a/src/api-umbrella/admin-ui/app/components/api-scopes/record-form.js b/src/js/admin-ui/app/components/api-scopes/record-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/api-scopes/record-form.js rename to src/js/admin-ui/app/components/api-scopes/record-form.js diff --git a/src/api-umbrella/admin-ui/app/components/api-users/index-table.js b/src/js/admin-ui/app/components/api-users/index-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/api-users/index-table.js rename to src/js/admin-ui/app/components/api-users/index-table.js diff --git a/src/api-umbrella/admin-ui/app/components/api-users/record-form.js b/src/js/admin-ui/app/components/api-users/record-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/api-users/record-form.js rename to src/js/admin-ui/app/components/api-users/record-form.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/index-table.js b/src/js/admin-ui/app/components/apis/index-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/index-table.js rename to src/js/admin-ui/app/components/apis/index-table.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/record-form.js b/src/js/admin-ui/app/components/apis/record-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/record-form.js rename to src/js/admin-ui/app/components/apis/record-form.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/rewrite-form.js b/src/js/admin-ui/app/components/apis/rewrite-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/rewrite-form.js rename to src/js/admin-ui/app/components/apis/rewrite-form.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/rewrite-table.js b/src/js/admin-ui/app/components/apis/rewrite-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/rewrite-table.js rename to src/js/admin-ui/app/components/apis/rewrite-table.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/server-form.js b/src/js/admin-ui/app/components/apis/server-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/server-form.js rename to src/js/admin-ui/app/components/apis/server-form.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/server-table.js b/src/js/admin-ui/app/components/apis/server-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/server-table.js rename to src/js/admin-ui/app/components/apis/server-table.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/settings/allowed-ips-fields.js b/src/js/admin-ui/app/components/apis/settings/allowed-ips-fields.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/settings/allowed-ips-fields.js rename to src/js/admin-ui/app/components/apis/settings/allowed-ips-fields.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/settings/allowed-referers-fields.js b/src/js/admin-ui/app/components/apis/settings/allowed-referers-fields.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/settings/allowed-referers-fields.js rename to src/js/admin-ui/app/components/apis/settings/allowed-referers-fields.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/settings/common-fields.js b/src/js/admin-ui/app/components/apis/settings/common-fields.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/settings/common-fields.js rename to src/js/admin-ui/app/components/apis/settings/common-fields.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/settings/rate-limit-fields.js b/src/js/admin-ui/app/components/apis/settings/rate-limit-fields.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/settings/rate-limit-fields.js rename to src/js/admin-ui/app/components/apis/settings/rate-limit-fields.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/sub-settings-form.js b/src/js/admin-ui/app/components/apis/sub-settings-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/sub-settings-form.js rename to src/js/admin-ui/app/components/apis/sub-settings-form.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/sub-settings-table.js b/src/js/admin-ui/app/components/apis/sub-settings-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/sub-settings-table.js rename to src/js/admin-ui/app/components/apis/sub-settings-table.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/url-match-form.js b/src/js/admin-ui/app/components/apis/url-match-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/url-match-form.js rename to src/js/admin-ui/app/components/apis/url-match-form.js diff --git a/src/api-umbrella/admin-ui/app/components/apis/url-match-table.js b/src/js/admin-ui/app/components/apis/url-match-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/apis/url-match-table.js rename to src/js/admin-ui/app/components/apis/url-match-table.js diff --git a/src/api-umbrella/admin-ui/app/components/busy-blocker.js b/src/js/admin-ui/app/components/busy-blocker.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/busy-blocker.js rename to src/js/admin-ui/app/components/busy-blocker.js diff --git a/src/api-umbrella/admin-ui/app/components/config/publish-form-records.js b/src/js/admin-ui/app/components/config/publish-form-records.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/config/publish-form-records.js rename to src/js/admin-ui/app/components/config/publish-form-records.js diff --git a/src/api-umbrella/admin-ui/app/components/config/publish-form.js b/src/js/admin-ui/app/components/config/publish-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/config/publish-form.js rename to src/js/admin-ui/app/components/config/publish-form.js diff --git a/src/api-umbrella/admin-ui/app/components/error-messages.js b/src/js/admin-ui/app/components/error-messages.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/error-messages.js rename to src/js/admin-ui/app/components/error-messages.js diff --git a/src/api-umbrella/admin-ui/app/components/fields-for.js b/src/js/admin-ui/app/components/fields-for.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/fields-for.js rename to src/js/admin-ui/app/components/fields-for.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/base-field.js b/src/js/admin-ui/app/components/form-fields/base-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/base-field.js rename to src/js/admin-ui/app/components/form-fields/base-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/checkbox-field.js b/src/js/admin-ui/app/components/form-fields/checkbox-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/checkbox-field.js rename to src/js/admin-ui/app/components/form-fields/checkbox-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/checkboxes-field.js b/src/js/admin-ui/app/components/form-fields/checkboxes-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/checkboxes-field.js rename to src/js/admin-ui/app/components/form-fields/checkboxes-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/codemirror-field.js b/src/js/admin-ui/app/components/form-fields/codemirror-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/codemirror-field.js rename to src/js/admin-ui/app/components/form-fields/codemirror-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/error-messages.js b/src/js/admin-ui/app/components/form-fields/error-messages.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/error-messages.js rename to src/js/admin-ui/app/components/form-fields/error-messages.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/field-wrapper.js b/src/js/admin-ui/app/components/form-fields/field-wrapper.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/field-wrapper.js rename to src/js/admin-ui/app/components/form-fields/field-wrapper.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/hint.js b/src/js/admin-ui/app/components/form-fields/hint.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/hint.js rename to src/js/admin-ui/app/components/form-fields/hint.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/password-field.js b/src/js/admin-ui/app/components/form-fields/password-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/password-field.js rename to src/js/admin-ui/app/components/form-fields/password-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/select-field.js b/src/js/admin-ui/app/components/form-fields/select-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/select-field.js rename to src/js/admin-ui/app/components/form-fields/select-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/selectize-field.js b/src/js/admin-ui/app/components/form-fields/selectize-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/selectize-field.js rename to src/js/admin-ui/app/components/form-fields/selectize-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/static-field.js b/src/js/admin-ui/app/components/form-fields/static-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/static-field.js rename to src/js/admin-ui/app/components/form-fields/static-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/text-field.js b/src/js/admin-ui/app/components/form-fields/text-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/text-field.js rename to src/js/admin-ui/app/components/form-fields/text-field.js diff --git a/src/api-umbrella/admin-ui/app/components/form-fields/textarea-field.js b/src/js/admin-ui/app/components/form-fields/textarea-field.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/form-fields/textarea-field.js rename to src/js/admin-ui/app/components/form-fields/textarea-field.js diff --git a/src/api-umbrella/admin-ui/app/components/help-tooltip.js b/src/js/admin-ui/app/components/help-tooltip.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/help-tooltip.js rename to src/js/admin-ui/app/components/help-tooltip.js diff --git a/src/api-umbrella/admin-ui/app/components/select-menu.js b/src/js/admin-ui/app/components/select-menu.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/select-menu.js rename to src/js/admin-ui/app/components/select-menu.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js b/src/js/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js rename to src/js/admin-ui/app/components/stats/drilldown/results-breadcrumbs.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-chart.js b/src/js/admin-ui/app/components/stats/drilldown/results-chart.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/drilldown/results-chart.js rename to src/js/admin-ui/app/components/stats/drilldown/results-chart.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/drilldown/results-table.js b/src/js/admin-ui/app/components/stats/drilldown/results-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/drilldown/results-table.js rename to src/js/admin-ui/app/components/stats/drilldown/results-table.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/logs/results-chart.js b/src/js/admin-ui/app/components/stats/logs/results-chart.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/logs/results-chart.js rename to src/js/admin-ui/app/components/stats/logs/results-chart.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/logs/results-facet-table.js b/src/js/admin-ui/app/components/stats/logs/results-facet-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/logs/results-facet-table.js rename to src/js/admin-ui/app/components/stats/logs/results-facet-table.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/logs/results-highlights.js b/src/js/admin-ui/app/components/stats/logs/results-highlights.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/logs/results-highlights.js rename to src/js/admin-ui/app/components/stats/logs/results-highlights.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/logs/results-table.js b/src/js/admin-ui/app/components/stats/logs/results-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/logs/results-table.js rename to src/js/admin-ui/app/components/stats/logs/results-table.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/map/results-breadcrumbs.js b/src/js/admin-ui/app/components/stats/map/results-breadcrumbs.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/map/results-breadcrumbs.js rename to src/js/admin-ui/app/components/stats/map/results-breadcrumbs.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/map/results-map.js b/src/js/admin-ui/app/components/stats/map/results-map.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/map/results-map.js rename to src/js/admin-ui/app/components/stats/map/results-map.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/map/results-table.js b/src/js/admin-ui/app/components/stats/map/results-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/map/results-table.js rename to src/js/admin-ui/app/components/stats/map/results-table.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/query-form.js b/src/js/admin-ui/app/components/stats/query-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/query-form.js rename to src/js/admin-ui/app/components/stats/query-form.js diff --git a/src/api-umbrella/admin-ui/app/components/stats/users/results-table.js b/src/js/admin-ui/app/components/stats/users/results-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/stats/users/results-table.js rename to src/js/admin-ui/app/components/stats/users/results-table.js diff --git a/src/api-umbrella/admin-ui/app/components/website-backends/index-table.js b/src/js/admin-ui/app/components/website-backends/index-table.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/website-backends/index-table.js rename to src/js/admin-ui/app/components/website-backends/index-table.js diff --git a/src/api-umbrella/admin-ui/app/components/website-backends/record-form.js b/src/js/admin-ui/app/components/website-backends/record-form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/components/website-backends/record-form.js rename to src/js/admin-ui/app/components/website-backends/record-form.js diff --git a/src/api-umbrella/admin-ui/app/controllers/.gitkeep b/src/js/admin-ui/app/controllers/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/app/controllers/.gitkeep rename to src/js/admin-ui/app/controllers/.gitkeep diff --git a/src/api-umbrella/admin-ui/app/controllers/application.js b/src/js/admin-ui/app/controllers/application.js similarity index 100% rename from src/api-umbrella/admin-ui/app/controllers/application.js rename to src/js/admin-ui/app/controllers/application.js diff --git a/src/api-umbrella/admin-ui/app/controllers/config/publish.js b/src/js/admin-ui/app/controllers/config/publish.js similarity index 100% rename from src/api-umbrella/admin-ui/app/controllers/config/publish.js rename to src/js/admin-ui/app/controllers/config/publish.js diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/base.js b/src/js/admin-ui/app/controllers/stats/base.js similarity index 100% rename from src/api-umbrella/admin-ui/app/controllers/stats/base.js rename to src/js/admin-ui/app/controllers/stats/base.js diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/drilldown.js b/src/js/admin-ui/app/controllers/stats/drilldown.js similarity index 100% rename from src/api-umbrella/admin-ui/app/controllers/stats/drilldown.js rename to src/js/admin-ui/app/controllers/stats/drilldown.js diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/logs.js b/src/js/admin-ui/app/controllers/stats/logs.js similarity index 100% rename from src/api-umbrella/admin-ui/app/controllers/stats/logs.js rename to src/js/admin-ui/app/controllers/stats/logs.js diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/map.js b/src/js/admin-ui/app/controllers/stats/map.js similarity index 100% rename from src/api-umbrella/admin-ui/app/controllers/stats/map.js rename to src/js/admin-ui/app/controllers/stats/map.js diff --git a/src/api-umbrella/admin-ui/app/controllers/stats/users.js b/src/js/admin-ui/app/controllers/stats/users.js similarity index 100% rename from src/api-umbrella/admin-ui/app/controllers/stats/users.js rename to src/js/admin-ui/app/controllers/stats/users.js diff --git a/src/api-umbrella/admin-ui/app/helpers/.gitkeep b/src/js/admin-ui/app/helpers/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/app/helpers/.gitkeep rename to src/js/admin-ui/app/helpers/.gitkeep diff --git a/src/api-umbrella/admin-ui/app/helpers/format-date.js b/src/js/admin-ui/app/helpers/format-date.js similarity index 100% rename from src/api-umbrella/admin-ui/app/helpers/format-date.js rename to src/js/admin-ui/app/helpers/format-date.js diff --git a/src/api-umbrella/admin-ui/app/helpers/format-number.js b/src/js/admin-ui/app/helpers/format-number.js similarity index 100% rename from src/api-umbrella/admin-ui/app/helpers/format-number.js rename to src/js/admin-ui/app/helpers/format-number.js diff --git a/src/api-umbrella/admin-ui/app/helpers/guid-for.js b/src/js/admin-ui/app/helpers/guid-for.js similarity index 100% rename from src/api-umbrella/admin-ui/app/helpers/guid-for.js rename to src/js/admin-ui/app/helpers/guid-for.js diff --git a/src/api-umbrella/admin-ui/app/helpers/html-safe.js b/src/js/admin-ui/app/helpers/html-safe.js similarity index 100% rename from src/api-umbrella/admin-ui/app/helpers/html-safe.js rename to src/js/admin-ui/app/helpers/html-safe.js diff --git a/src/api-umbrella/admin-ui/app/helpers/inflect.js b/src/js/admin-ui/app/helpers/inflect.js similarity index 100% rename from src/api-umbrella/admin-ui/app/helpers/inflect.js rename to src/js/admin-ui/app/helpers/inflect.js diff --git a/src/api-umbrella/admin-ui/app/helpers/t.js b/src/js/admin-ui/app/helpers/t.js similarity index 100% rename from src/api-umbrella/admin-ui/app/helpers/t.js rename to src/js/admin-ui/app/helpers/t.js diff --git a/src/api-umbrella/admin-ui/app/index.html b/src/js/admin-ui/app/index.html similarity index 100% rename from src/api-umbrella/admin-ui/app/index.html rename to src/js/admin-ui/app/index.html diff --git a/src/api-umbrella/admin-ui/app/initializers/bootbox.js b/src/js/admin-ui/app/initializers/bootbox.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/bootbox.js rename to src/js/admin-ui/app/initializers/bootbox.js diff --git a/src/api-umbrella/admin-ui/app/initializers/bootstrap.js b/src/js/admin-ui/app/initializers/bootstrap.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/bootstrap.js rename to src/js/admin-ui/app/initializers/bootstrap.js diff --git a/src/api-umbrella/admin-ui/app/initializers/echarts.js b/src/js/admin-ui/app/initializers/echarts.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/echarts.js rename to src/js/admin-ui/app/initializers/echarts.js diff --git a/src/api-umbrella/admin-ui/app/initializers/fontawesome.js b/src/js/admin-ui/app/initializers/fontawesome.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/fontawesome.js rename to src/js/admin-ui/app/initializers/fontawesome.js diff --git a/src/api-umbrella/admin-ui/app/initializers/inflections.js b/src/js/admin-ui/app/initializers/inflections.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/inflections.js rename to src/js/admin-ui/app/initializers/inflections.js diff --git a/src/api-umbrella/admin-ui/app/initializers/pnotify.js b/src/js/admin-ui/app/initializers/pnotify.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/pnotify.js rename to src/js/admin-ui/app/initializers/pnotify.js diff --git a/src/api-umbrella/admin-ui/app/initializers/test-disable-animations.js b/src/js/admin-ui/app/initializers/test-disable-animations.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/test-disable-animations.js rename to src/js/admin-ui/app/initializers/test-disable-animations.js diff --git a/src/api-umbrella/admin-ui/app/initializers/test-disable-fixed-header.js b/src/js/admin-ui/app/initializers/test-disable-fixed-header.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/test-disable-fixed-header.js rename to src/js/admin-ui/app/initializers/test-disable-fixed-header.js diff --git a/src/api-umbrella/admin-ui/app/initializers/test-pnotify.js b/src/js/admin-ui/app/initializers/test-pnotify.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/test-pnotify.js rename to src/js/admin-ui/app/initializers/test-pnotify.js diff --git a/src/api-umbrella/admin-ui/app/initializers/test-timekeeper.js b/src/js/admin-ui/app/initializers/test-timekeeper.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/test-timekeeper.js rename to src/js/admin-ui/app/initializers/test-timekeeper.js diff --git a/src/api-umbrella/admin-ui/app/initializers/tooltips.js b/src/js/admin-ui/app/initializers/tooltips.js similarity index 100% rename from src/api-umbrella/admin-ui/app/initializers/tooltips.js rename to src/js/admin-ui/app/initializers/tooltips.js diff --git a/src/api-umbrella/admin-ui/app/instance-initializers/datatables.js b/src/js/admin-ui/app/instance-initializers/datatables.js similarity index 100% rename from src/api-umbrella/admin-ui/app/instance-initializers/datatables.js rename to src/js/admin-ui/app/instance-initializers/datatables.js diff --git a/src/api-umbrella/admin-ui/app/instance-initializers/jquery-ajax.js b/src/js/admin-ui/app/instance-initializers/jquery-ajax.js similarity index 100% rename from src/api-umbrella/admin-ui/app/instance-initializers/jquery-ajax.js rename to src/js/admin-ui/app/instance-initializers/jquery-ajax.js diff --git a/src/api-umbrella/admin-ui/app/mixins/confirmation.js b/src/js/admin-ui/app/mixins/confirmation.js similarity index 100% rename from src/api-umbrella/admin-ui/app/mixins/confirmation.js rename to src/js/admin-ui/app/mixins/confirmation.js diff --git a/src/api-umbrella/admin-ui/app/mixins/save.js b/src/js/admin-ui/app/mixins/save.js similarity index 100% rename from src/api-umbrella/admin-ui/app/mixins/save.js rename to src/js/admin-ui/app/mixins/save.js diff --git a/src/api-umbrella/admin-ui/app/mixins/sortable.js b/src/js/admin-ui/app/mixins/sortable.js similarity index 100% rename from src/api-umbrella/admin-ui/app/mixins/sortable.js rename to src/js/admin-ui/app/mixins/sortable.js diff --git a/src/api-umbrella/admin-ui/app/mixins/uncached-model.js b/src/js/admin-ui/app/mixins/uncached-model.js similarity index 100% rename from src/api-umbrella/admin-ui/app/mixins/uncached-model.js rename to src/js/admin-ui/app/mixins/uncached-model.js diff --git a/src/api-umbrella/admin-ui/app/models/.gitkeep b/src/js/admin-ui/app/models/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/app/models/.gitkeep rename to src/js/admin-ui/app/models/.gitkeep diff --git a/src/api-umbrella/admin-ui/app/models/admin-group.js b/src/js/admin-ui/app/models/admin-group.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/admin-group.js rename to src/js/admin-ui/app/models/admin-group.js diff --git a/src/api-umbrella/admin-ui/app/models/admin-permission.js b/src/js/admin-ui/app/models/admin-permission.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/admin-permission.js rename to src/js/admin-ui/app/models/admin-permission.js diff --git a/src/api-umbrella/admin-ui/app/models/admin.js b/src/js/admin-ui/app/models/admin.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/admin.js rename to src/js/admin-ui/app/models/admin.js diff --git a/src/api-umbrella/admin-ui/app/models/api-scope.js b/src/js/admin-ui/app/models/api-scope.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api-scope.js rename to src/js/admin-ui/app/models/api-scope.js diff --git a/src/api-umbrella/admin-ui/app/models/api-user-role.js b/src/js/admin-ui/app/models/api-user-role.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api-user-role.js rename to src/js/admin-ui/app/models/api-user-role.js diff --git a/src/api-umbrella/admin-ui/app/models/api-user.js b/src/js/admin-ui/app/models/api-user.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api-user.js rename to src/js/admin-ui/app/models/api-user.js diff --git a/src/api-umbrella/admin-ui/app/models/api.js b/src/js/admin-ui/app/models/api.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api.js rename to src/js/admin-ui/app/models/api.js diff --git a/src/api-umbrella/admin-ui/app/models/api/rate-limit.js b/src/js/admin-ui/app/models/api/rate-limit.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api/rate-limit.js rename to src/js/admin-ui/app/models/api/rate-limit.js diff --git a/src/api-umbrella/admin-ui/app/models/api/rewrite.js b/src/js/admin-ui/app/models/api/rewrite.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api/rewrite.js rename to src/js/admin-ui/app/models/api/rewrite.js diff --git a/src/api-umbrella/admin-ui/app/models/api/server.js b/src/js/admin-ui/app/models/api/server.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api/server.js rename to src/js/admin-ui/app/models/api/server.js diff --git a/src/api-umbrella/admin-ui/app/models/api/settings.js b/src/js/admin-ui/app/models/api/settings.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api/settings.js rename to src/js/admin-ui/app/models/api/settings.js diff --git a/src/api-umbrella/admin-ui/app/models/api/sub-settings.js b/src/js/admin-ui/app/models/api/sub-settings.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api/sub-settings.js rename to src/js/admin-ui/app/models/api/sub-settings.js diff --git a/src/api-umbrella/admin-ui/app/models/api/url-match.js b/src/js/admin-ui/app/models/api/url-match.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/api/url-match.js rename to src/js/admin-ui/app/models/api/url-match.js diff --git a/src/api-umbrella/admin-ui/app/models/config-pending-changes.js b/src/js/admin-ui/app/models/config-pending-changes.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/config-pending-changes.js rename to src/js/admin-ui/app/models/config-pending-changes.js diff --git a/src/api-umbrella/admin-ui/app/models/stats/drilldown.js b/src/js/admin-ui/app/models/stats/drilldown.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/stats/drilldown.js rename to src/js/admin-ui/app/models/stats/drilldown.js diff --git a/src/api-umbrella/admin-ui/app/models/stats/logs.js b/src/js/admin-ui/app/models/stats/logs.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/stats/logs.js rename to src/js/admin-ui/app/models/stats/logs.js diff --git a/src/api-umbrella/admin-ui/app/models/stats/map.js b/src/js/admin-ui/app/models/stats/map.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/stats/map.js rename to src/js/admin-ui/app/models/stats/map.js diff --git a/src/api-umbrella/admin-ui/app/models/website-backend.js b/src/js/admin-ui/app/models/website-backend.js similarity index 100% rename from src/api-umbrella/admin-ui/app/models/website-backend.js rename to src/js/admin-ui/app/models/website-backend.js diff --git a/src/api-umbrella/admin-ui/app/resolver.js b/src/js/admin-ui/app/resolver.js similarity index 100% rename from src/api-umbrella/admin-ui/app/resolver.js rename to src/js/admin-ui/app/resolver.js diff --git a/src/api-umbrella/admin-ui/app/router.js b/src/js/admin-ui/app/router.js similarity index 100% rename from src/api-umbrella/admin-ui/app/router.js rename to src/js/admin-ui/app/router.js diff --git a/src/api-umbrella/admin-ui/app/routes/.gitkeep b/src/js/admin-ui/app/routes/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/.gitkeep rename to src/js/admin-ui/app/routes/.gitkeep diff --git a/src/api-umbrella/admin-ui/app/routes/admin-groups/base.js b/src/js/admin-ui/app/routes/admin-groups/base.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admin-groups/base.js rename to src/js/admin-ui/app/routes/admin-groups/base.js diff --git a/src/api-umbrella/admin-ui/app/routes/admin-groups/edit.js b/src/js/admin-ui/app/routes/admin-groups/edit.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admin-groups/edit.js rename to src/js/admin-ui/app/routes/admin-groups/edit.js diff --git a/src/api-umbrella/admin-ui/app/routes/admin-groups/form.js b/src/js/admin-ui/app/routes/admin-groups/form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admin-groups/form.js rename to src/js/admin-ui/app/routes/admin-groups/form.js diff --git a/src/api-umbrella/admin-ui/app/routes/admin-groups/index.js b/src/js/admin-ui/app/routes/admin-groups/index.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admin-groups/index.js rename to src/js/admin-ui/app/routes/admin-groups/index.js diff --git a/src/api-umbrella/admin-ui/app/routes/admin-groups/new.js b/src/js/admin-ui/app/routes/admin-groups/new.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admin-groups/new.js rename to src/js/admin-ui/app/routes/admin-groups/new.js diff --git a/src/api-umbrella/admin-ui/app/routes/admins/base.js b/src/js/admin-ui/app/routes/admins/base.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admins/base.js rename to src/js/admin-ui/app/routes/admins/base.js diff --git a/src/api-umbrella/admin-ui/app/routes/admins/edit.js b/src/js/admin-ui/app/routes/admins/edit.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admins/edit.js rename to src/js/admin-ui/app/routes/admins/edit.js diff --git a/src/api-umbrella/admin-ui/app/routes/admins/form.js b/src/js/admin-ui/app/routes/admins/form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admins/form.js rename to src/js/admin-ui/app/routes/admins/form.js diff --git a/src/api-umbrella/admin-ui/app/routes/admins/index.js b/src/js/admin-ui/app/routes/admins/index.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admins/index.js rename to src/js/admin-ui/app/routes/admins/index.js diff --git a/src/api-umbrella/admin-ui/app/routes/admins/new.js b/src/js/admin-ui/app/routes/admins/new.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/admins/new.js rename to src/js/admin-ui/app/routes/admins/new.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-scopes/base.js b/src/js/admin-ui/app/routes/api-scopes/base.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-scopes/base.js rename to src/js/admin-ui/app/routes/api-scopes/base.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-scopes/edit.js b/src/js/admin-ui/app/routes/api-scopes/edit.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-scopes/edit.js rename to src/js/admin-ui/app/routes/api-scopes/edit.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-scopes/form.js b/src/js/admin-ui/app/routes/api-scopes/form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-scopes/form.js rename to src/js/admin-ui/app/routes/api-scopes/form.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-scopes/index.js b/src/js/admin-ui/app/routes/api-scopes/index.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-scopes/index.js rename to src/js/admin-ui/app/routes/api-scopes/index.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-scopes/new.js b/src/js/admin-ui/app/routes/api-scopes/new.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-scopes/new.js rename to src/js/admin-ui/app/routes/api-scopes/new.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-users/base.js b/src/js/admin-ui/app/routes/api-users/base.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-users/base.js rename to src/js/admin-ui/app/routes/api-users/base.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-users/edit.js b/src/js/admin-ui/app/routes/api-users/edit.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-users/edit.js rename to src/js/admin-ui/app/routes/api-users/edit.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-users/form.js b/src/js/admin-ui/app/routes/api-users/form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-users/form.js rename to src/js/admin-ui/app/routes/api-users/form.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-users/index.js b/src/js/admin-ui/app/routes/api-users/index.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-users/index.js rename to src/js/admin-ui/app/routes/api-users/index.js diff --git a/src/api-umbrella/admin-ui/app/routes/api-users/new.js b/src/js/admin-ui/app/routes/api-users/new.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/api-users/new.js rename to src/js/admin-ui/app/routes/api-users/new.js diff --git a/src/api-umbrella/admin-ui/app/routes/apis/base.js b/src/js/admin-ui/app/routes/apis/base.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/apis/base.js rename to src/js/admin-ui/app/routes/apis/base.js diff --git a/src/api-umbrella/admin-ui/app/routes/apis/edit.js b/src/js/admin-ui/app/routes/apis/edit.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/apis/edit.js rename to src/js/admin-ui/app/routes/apis/edit.js diff --git a/src/api-umbrella/admin-ui/app/routes/apis/form.js b/src/js/admin-ui/app/routes/apis/form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/apis/form.js rename to src/js/admin-ui/app/routes/apis/form.js diff --git a/src/api-umbrella/admin-ui/app/routes/apis/index.js b/src/js/admin-ui/app/routes/apis/index.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/apis/index.js rename to src/js/admin-ui/app/routes/apis/index.js diff --git a/src/api-umbrella/admin-ui/app/routes/apis/new.js b/src/js/admin-ui/app/routes/apis/new.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/apis/new.js rename to src/js/admin-ui/app/routes/apis/new.js diff --git a/src/api-umbrella/admin-ui/app/routes/application.js b/src/js/admin-ui/app/routes/application.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/application.js rename to src/js/admin-ui/app/routes/application.js diff --git a/src/api-umbrella/admin-ui/app/routes/config/publish.js b/src/js/admin-ui/app/routes/config/publish.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/config/publish.js rename to src/js/admin-ui/app/routes/config/publish.js diff --git a/src/api-umbrella/admin-ui/app/routes/error.js b/src/js/admin-ui/app/routes/error.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/error.js rename to src/js/admin-ui/app/routes/error.js diff --git a/src/api-umbrella/admin-ui/app/routes/index.js b/src/js/admin-ui/app/routes/index.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/index.js rename to src/js/admin-ui/app/routes/index.js diff --git a/src/api-umbrella/admin-ui/app/routes/loading.js b/src/js/admin-ui/app/routes/loading.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/loading.js rename to src/js/admin-ui/app/routes/loading.js diff --git a/src/api-umbrella/admin-ui/app/routes/login.js b/src/js/admin-ui/app/routes/login.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/login.js rename to src/js/admin-ui/app/routes/login.js diff --git a/src/api-umbrella/admin-ui/app/routes/not-found.js b/src/js/admin-ui/app/routes/not-found.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/not-found.js rename to src/js/admin-ui/app/routes/not-found.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/base.js b/src/js/admin-ui/app/routes/stats/base.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/base.js rename to src/js/admin-ui/app/routes/stats/base.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/drilldown-legacy.js b/src/js/admin-ui/app/routes/stats/drilldown-legacy.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/drilldown-legacy.js rename to src/js/admin-ui/app/routes/stats/drilldown-legacy.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/drilldown.js b/src/js/admin-ui/app/routes/stats/drilldown.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/drilldown.js rename to src/js/admin-ui/app/routes/stats/drilldown.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/logs-legacy.js b/src/js/admin-ui/app/routes/stats/logs-legacy.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/logs-legacy.js rename to src/js/admin-ui/app/routes/stats/logs-legacy.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/logs.js b/src/js/admin-ui/app/routes/stats/logs.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/logs.js rename to src/js/admin-ui/app/routes/stats/logs.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/map-legacy.js b/src/js/admin-ui/app/routes/stats/map-legacy.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/map-legacy.js rename to src/js/admin-ui/app/routes/stats/map-legacy.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/map.js b/src/js/admin-ui/app/routes/stats/map.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/map.js rename to src/js/admin-ui/app/routes/stats/map.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/users-legacy.js b/src/js/admin-ui/app/routes/stats/users-legacy.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/users-legacy.js rename to src/js/admin-ui/app/routes/stats/users-legacy.js diff --git a/src/api-umbrella/admin-ui/app/routes/stats/users.js b/src/js/admin-ui/app/routes/stats/users.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/stats/users.js rename to src/js/admin-ui/app/routes/stats/users.js diff --git a/src/api-umbrella/admin-ui/app/routes/website-backends/base.js b/src/js/admin-ui/app/routes/website-backends/base.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/website-backends/base.js rename to src/js/admin-ui/app/routes/website-backends/base.js diff --git a/src/api-umbrella/admin-ui/app/routes/website-backends/edit.js b/src/js/admin-ui/app/routes/website-backends/edit.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/website-backends/edit.js rename to src/js/admin-ui/app/routes/website-backends/edit.js diff --git a/src/api-umbrella/admin-ui/app/routes/website-backends/form.js b/src/js/admin-ui/app/routes/website-backends/form.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/website-backends/form.js rename to src/js/admin-ui/app/routes/website-backends/form.js diff --git a/src/api-umbrella/admin-ui/app/routes/website-backends/index.js b/src/js/admin-ui/app/routes/website-backends/index.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/website-backends/index.js rename to src/js/admin-ui/app/routes/website-backends/index.js diff --git a/src/api-umbrella/admin-ui/app/routes/website-backends/new.js b/src/js/admin-ui/app/routes/website-backends/new.js similarity index 100% rename from src/api-umbrella/admin-ui/app/routes/website-backends/new.js rename to src/js/admin-ui/app/routes/website-backends/new.js diff --git a/src/api-umbrella/admin-ui/app/serializers/api-user.js b/src/js/admin-ui/app/serializers/api-user.js similarity index 100% rename from src/api-umbrella/admin-ui/app/serializers/api-user.js rename to src/js/admin-ui/app/serializers/api-user.js diff --git a/src/api-umbrella/admin-ui/app/serializers/api.js b/src/js/admin-ui/app/serializers/api.js similarity index 100% rename from src/api-umbrella/admin-ui/app/serializers/api.js rename to src/js/admin-ui/app/serializers/api.js diff --git a/src/api-umbrella/admin-ui/app/serializers/api/settings.js b/src/js/admin-ui/app/serializers/api/settings.js similarity index 100% rename from src/api-umbrella/admin-ui/app/serializers/api/settings.js rename to src/js/admin-ui/app/serializers/api/settings.js diff --git a/src/api-umbrella/admin-ui/app/serializers/api/sub-settings.js b/src/js/admin-ui/app/serializers/api/sub-settings.js similarity index 100% rename from src/api-umbrella/admin-ui/app/serializers/api/sub-settings.js rename to src/js/admin-ui/app/serializers/api/sub-settings.js diff --git a/src/api-umbrella/admin-ui/app/serializers/application.js b/src/js/admin-ui/app/serializers/application.js similarity index 100% rename from src/api-umbrella/admin-ui/app/serializers/application.js rename to src/js/admin-ui/app/serializers/application.js diff --git a/src/api-umbrella/admin-ui/app/services/busy.js b/src/js/admin-ui/app/services/busy.js similarity index 100% rename from src/api-umbrella/admin-ui/app/services/busy.js rename to src/js/admin-ui/app/services/busy.js diff --git a/src/api-umbrella/admin-ui/app/styles/_base.scss b/src/js/admin-ui/app/styles/_base.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_base.scss rename to src/js/admin-ui/app/styles/_base.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_busy-blocker.scss b/src/js/admin-ui/app/styles/_busy-blocker.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_busy-blocker.scss rename to src/js/admin-ui/app/styles/_busy-blocker.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_codemirror.scss b/src/js/admin-ui/app/styles/_codemirror.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_codemirror.scss rename to src/js/admin-ui/app/styles/_codemirror.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_forms.scss b/src/js/admin-ui/app/styles/_forms.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_forms.scss rename to src/js/admin-ui/app/styles/_forms.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_icons.scss b/src/js/admin-ui/app/styles/_icons.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_icons.scss rename to src/js/admin-ui/app/styles/_icons.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_noscript.scss b/src/js/admin-ui/app/styles/_noscript.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_noscript.scss rename to src/js/admin-ui/app/styles/_noscript.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_query-builder.scss b/src/js/admin-ui/app/styles/_query-builder.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_query-builder.scss rename to src/js/admin-ui/app/styles/_query-builder.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_selectize.scss b/src/js/admin-ui/app/styles/_selectize.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_selectize.scss rename to src/js/admin-ui/app/styles/_selectize.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_stats.scss b/src/js/admin-ui/app/styles/_stats.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_stats.scss rename to src/js/admin-ui/app/styles/_stats.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_tables.scss b/src/js/admin-ui/app/styles/_tables.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_tables.scss rename to src/js/admin-ui/app/styles/_tables.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_tooltips.scss b/src/js/admin-ui/app/styles/_tooltips.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_tooltips.scss rename to src/js/admin-ui/app/styles/_tooltips.scss diff --git a/src/api-umbrella/admin-ui/app/styles/_variables.scss b/src/js/admin-ui/app/styles/_variables.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/_variables.scss rename to src/js/admin-ui/app/styles/_variables.scss diff --git a/src/api-umbrella/admin-ui/app/styles/app.scss b/src/js/admin-ui/app/styles/app.scss similarity index 100% rename from src/api-umbrella/admin-ui/app/styles/app.scss rename to src/js/admin-ui/app/styles/app.scss diff --git a/src/api-umbrella/admin-ui/app/templates/.gitkeep b/src/js/admin-ui/app/templates/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/.gitkeep rename to src/js/admin-ui/app/templates/.gitkeep diff --git a/src/api-umbrella/admin-ui/app/templates/admin-groups/edit.hbs b/src/js/admin-ui/app/templates/admin-groups/edit.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/admin-groups/edit.hbs rename to src/js/admin-ui/app/templates/admin-groups/edit.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/admin-groups/index.hbs b/src/js/admin-ui/app/templates/admin-groups/index.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/admin-groups/index.hbs rename to src/js/admin-ui/app/templates/admin-groups/index.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/admin-groups/new.hbs b/src/js/admin-ui/app/templates/admin-groups/new.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/admin-groups/new.hbs rename to src/js/admin-ui/app/templates/admin-groups/new.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/admins/edit.hbs b/src/js/admin-ui/app/templates/admins/edit.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/admins/edit.hbs rename to src/js/admin-ui/app/templates/admins/edit.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/admins/index.hbs b/src/js/admin-ui/app/templates/admins/index.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/admins/index.hbs rename to src/js/admin-ui/app/templates/admins/index.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/admins/new.hbs b/src/js/admin-ui/app/templates/admins/new.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/admins/new.hbs rename to src/js/admin-ui/app/templates/admins/new.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/api-scopes/edit.hbs b/src/js/admin-ui/app/templates/api-scopes/edit.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/api-scopes/edit.hbs rename to src/js/admin-ui/app/templates/api-scopes/edit.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/api-scopes/index.hbs b/src/js/admin-ui/app/templates/api-scopes/index.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/api-scopes/index.hbs rename to src/js/admin-ui/app/templates/api-scopes/index.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/api-scopes/new.hbs b/src/js/admin-ui/app/templates/api-scopes/new.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/api-scopes/new.hbs rename to src/js/admin-ui/app/templates/api-scopes/new.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/api-users/edit.hbs b/src/js/admin-ui/app/templates/api-users/edit.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/api-users/edit.hbs rename to src/js/admin-ui/app/templates/api-users/edit.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/api-users/index.hbs b/src/js/admin-ui/app/templates/api-users/index.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/api-users/index.hbs rename to src/js/admin-ui/app/templates/api-users/index.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/api-users/new.hbs b/src/js/admin-ui/app/templates/api-users/new.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/api-users/new.hbs rename to src/js/admin-ui/app/templates/api-users/new.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/apis/edit.hbs b/src/js/admin-ui/app/templates/apis/edit.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/apis/edit.hbs rename to src/js/admin-ui/app/templates/apis/edit.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/apis/index.hbs b/src/js/admin-ui/app/templates/apis/index.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/apis/index.hbs rename to src/js/admin-ui/app/templates/apis/index.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/apis/new.hbs b/src/js/admin-ui/app/templates/apis/new.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/apis/new.hbs rename to src/js/admin-ui/app/templates/apis/new.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/application.hbs b/src/js/admin-ui/app/templates/application.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/application.hbs rename to src/js/admin-ui/app/templates/application.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/.gitkeep b/src/js/admin-ui/app/templates/components/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/.gitkeep rename to src/js/admin-ui/app/templates/components/.gitkeep diff --git a/src/api-umbrella/admin-ui/app/templates/components/admin-groups/index-table.hbs b/src/js/admin-ui/app/templates/components/admin-groups/index-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/admin-groups/index-table.hbs rename to src/js/admin-ui/app/templates/components/admin-groups/index-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/admin-groups/record-form.hbs b/src/js/admin-ui/app/templates/components/admin-groups/record-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/admin-groups/record-form.hbs rename to src/js/admin-ui/app/templates/components/admin-groups/record-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/admins/index-table.hbs b/src/js/admin-ui/app/templates/components/admins/index-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/admins/index-table.hbs rename to src/js/admin-ui/app/templates/components/admins/index-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/admins/record-form.hbs b/src/js/admin-ui/app/templates/components/admins/record-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/admins/record-form.hbs rename to src/js/admin-ui/app/templates/components/admins/record-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-scopes/index-table.hbs b/src/js/admin-ui/app/templates/components/api-scopes/index-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/api-scopes/index-table.hbs rename to src/js/admin-ui/app/templates/components/api-scopes/index-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-scopes/record-form.hbs b/src/js/admin-ui/app/templates/components/api-scopes/record-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/api-scopes/record-form.hbs rename to src/js/admin-ui/app/templates/components/api-scopes/record-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-users/index-table.hbs b/src/js/admin-ui/app/templates/components/api-users/index-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/api-users/index-table.hbs rename to src/js/admin-ui/app/templates/components/api-users/index-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/api-users/record-form.hbs b/src/js/admin-ui/app/templates/components/api-users/record-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/api-users/record-form.hbs rename to src/js/admin-ui/app/templates/components/api-users/record-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/index-table.hbs b/src/js/admin-ui/app/templates/components/apis/index-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/index-table.hbs rename to src/js/admin-ui/app/templates/components/apis/index-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/record-form.hbs b/src/js/admin-ui/app/templates/components/apis/record-form.hbs similarity index 96% rename from src/api-umbrella/admin-ui/app/templates/components/apis/record-form.hbs rename to src/js/admin-ui/app/templates/components/apis/record-form.hbs index c3257f48f..ec9f6ad69 100644 --- a/src/api-umbrella/admin-ui/app/templates/components/apis/record-form.hbs +++ b/src/js/admin-ui/app/templates/components/apis/record-form.hbs @@ -89,7 +89,7 @@ {{f.codemirror-field "api_key_invalid" label=(t "admin.api.settings.error_data_api_key_invalid") tooltip=(t "admin.api.settings.error_data_api_key_invalid_tooltip_markdown") mode="text/x-yaml"}} {{f.codemirror-field "api_key_disabled" label=(t "admin.api.settings.error_data_api_key_disabled") tooltip=(t "admin.api.settings.error_data_api_key_disabled_tooltip_markdown") mode="text/x-yaml"}} {{f.codemirror-field "api_key_unauthorized" label=(t "admin.api.settings.error_data_api_key_unauthorized") tooltip=(t "admin.api.settings.error_data_api_key_unauthorized_tooltip_markdown") mode="text/x-yaml"}} - {{f.codemirror-field "policy_validation_failed" label=(t "admin.api.settings.error_data_policy_validation_failed") tooltip=(t "admin.api.settings.error_data_policy_validation_failed_tooltip_markdown") mode="text/x-yaml"}} + {{f.codemirror-field "policy_validation_failed" label=(t "admin.api.settings.error_data_policy_validation_failed") tooltip=(t "admin.api.settings.error_data_policy_validation_failed_tooltip_markdown") mode="text/x-yaml"}} {{f.codemirror-field "over_rate_limit" label=(t "admin.api.settings.error_data_over_rate_limit") tooltip=(t "admin.api.settings.error_data_over_rate_limit_tooltip_markdown") mode="text/x-yaml"}} {{f.codemirror-field "https_required" label=(t "admin.api.settings.error_data_https_required") tooltip=(t "admin.api.settings.error_data_https_required_tooltip_markdown") mode="text/x-yaml"}} {{/fields-for}} diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-form.hbs b/src/js/admin-ui/app/templates/components/apis/rewrite-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-form.hbs rename to src/js/admin-ui/app/templates/components/apis/rewrite-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-table.hbs b/src/js/admin-ui/app/templates/components/apis/rewrite-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/rewrite-table.hbs rename to src/js/admin-ui/app/templates/components/apis/rewrite-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/server-form.hbs b/src/js/admin-ui/app/templates/components/apis/server-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/server-form.hbs rename to src/js/admin-ui/app/templates/components/apis/server-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/server-table.hbs b/src/js/admin-ui/app/templates/components/apis/server-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/server-table.hbs rename to src/js/admin-ui/app/templates/components/apis/server-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/allowed-ips-fields.hbs b/src/js/admin-ui/app/templates/components/apis/settings/allowed-ips-fields.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/settings/allowed-ips-fields.hbs rename to src/js/admin-ui/app/templates/components/apis/settings/allowed-ips-fields.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/allowed-referers-fields.hbs b/src/js/admin-ui/app/templates/components/apis/settings/allowed-referers-fields.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/settings/allowed-referers-fields.hbs rename to src/js/admin-ui/app/templates/components/apis/settings/allowed-referers-fields.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs b/src/js/admin-ui/app/templates/components/apis/settings/common-fields.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/settings/common-fields.hbs rename to src/js/admin-ui/app/templates/components/apis/settings/common-fields.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs b/src/js/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs rename to src/js/admin-ui/app/templates/components/apis/settings/rate-limit-fields.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-form.hbs b/src/js/admin-ui/app/templates/components/apis/sub-settings-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-form.hbs rename to src/js/admin-ui/app/templates/components/apis/sub-settings-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-table.hbs b/src/js/admin-ui/app/templates/components/apis/sub-settings-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/sub-settings-table.hbs rename to src/js/admin-ui/app/templates/components/apis/sub-settings-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-form.hbs b/src/js/admin-ui/app/templates/components/apis/url-match-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/url-match-form.hbs rename to src/js/admin-ui/app/templates/components/apis/url-match-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/apis/url-match-table.hbs b/src/js/admin-ui/app/templates/components/apis/url-match-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/apis/url-match-table.hbs rename to src/js/admin-ui/app/templates/components/apis/url-match-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/busy-blocker.hbs b/src/js/admin-ui/app/templates/components/busy-blocker.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/busy-blocker.hbs rename to src/js/admin-ui/app/templates/components/busy-blocker.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/config/publish-form-records.hbs b/src/js/admin-ui/app/templates/components/config/publish-form-records.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/config/publish-form-records.hbs rename to src/js/admin-ui/app/templates/components/config/publish-form-records.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/config/publish-form.hbs b/src/js/admin-ui/app/templates/components/config/publish-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/config/publish-form.hbs rename to src/js/admin-ui/app/templates/components/config/publish-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/error-messages.hbs b/src/js/admin-ui/app/templates/components/error-messages.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/error-messages.hbs rename to src/js/admin-ui/app/templates/components/error-messages.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/fields-for.hbs b/src/js/admin-ui/app/templates/components/fields-for.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/fields-for.hbs rename to src/js/admin-ui/app/templates/components/fields-for.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/ace-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/ace-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/ace-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/ace-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/base-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/base-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/base-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/base-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/checkbox-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/checkbox-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/checkbox-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/checkbox-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/checkboxes-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/checkboxes-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/checkboxes-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/checkboxes-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/codemirror-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/codemirror-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/codemirror-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/codemirror-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/error-messages.hbs b/src/js/admin-ui/app/templates/components/form-fields/error-messages.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/error-messages.hbs rename to src/js/admin-ui/app/templates/components/form-fields/error-messages.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/field-wrapper.hbs b/src/js/admin-ui/app/templates/components/form-fields/field-wrapper.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/field-wrapper.hbs rename to src/js/admin-ui/app/templates/components/form-fields/field-wrapper.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/hint.hbs b/src/js/admin-ui/app/templates/components/form-fields/hint.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/hint.hbs rename to src/js/admin-ui/app/templates/components/form-fields/hint.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/password-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/password-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/password-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/password-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/select-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/select-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/select-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/select-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/selectize-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/selectize-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/selectize-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/selectize-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/static-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/static-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/static-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/static-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/text-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/text-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/text-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/text-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/form-fields/textarea-field.hbs b/src/js/admin-ui/app/templates/components/form-fields/textarea-field.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/form-fields/textarea-field.hbs rename to src/js/admin-ui/app/templates/components/form-fields/textarea-field.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/help-tooltip.hbs b/src/js/admin-ui/app/templates/components/help-tooltip.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/help-tooltip.hbs rename to src/js/admin-ui/app/templates/components/help-tooltip.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/select-menu.hbs b/src/js/admin-ui/app/templates/components/select-menu.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/select-menu.hbs rename to src/js/admin-ui/app/templates/components/select-menu.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs b/src/js/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs rename to src/js/admin-ui/app/templates/components/stats/drilldown/results-breadcrumbs.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs b/src/js/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs rename to src/js/admin-ui/app/templates/components/stats/drilldown/results-chart.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-table.hbs b/src/js/admin-ui/app/templates/components/stats/drilldown/results-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/drilldown/results-table.hbs rename to src/js/admin-ui/app/templates/components/stats/drilldown/results-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-chart.hbs b/src/js/admin-ui/app/templates/components/stats/logs/results-chart.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-chart.hbs rename to src/js/admin-ui/app/templates/components/stats/logs/results-chart.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-facet-table.hbs b/src/js/admin-ui/app/templates/components/stats/logs/results-facet-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-facet-table.hbs rename to src/js/admin-ui/app/templates/components/stats/logs/results-facet-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-highlights.hbs b/src/js/admin-ui/app/templates/components/stats/logs/results-highlights.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-highlights.hbs rename to src/js/admin-ui/app/templates/components/stats/logs/results-highlights.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-table.hbs b/src/js/admin-ui/app/templates/components/stats/logs/results-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/logs/results-table.hbs rename to src/js/admin-ui/app/templates/components/stats/logs/results-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs b/src/js/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs rename to src/js/admin-ui/app/templates/components/stats/map/results-breadcrumbs.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-map.hbs b/src/js/admin-ui/app/templates/components/stats/map/results-map.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/map/results-map.hbs rename to src/js/admin-ui/app/templates/components/stats/map/results-map.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/map/results-table.hbs b/src/js/admin-ui/app/templates/components/stats/map/results-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/map/results-table.hbs rename to src/js/admin-ui/app/templates/components/stats/map/results-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs b/src/js/admin-ui/app/templates/components/stats/query-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/query-form.hbs rename to src/js/admin-ui/app/templates/components/stats/query-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/stats/users/results-table.hbs b/src/js/admin-ui/app/templates/components/stats/users/results-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/stats/users/results-table.hbs rename to src/js/admin-ui/app/templates/components/stats/users/results-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/website-backends/index-table.hbs b/src/js/admin-ui/app/templates/components/website-backends/index-table.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/website-backends/index-table.hbs rename to src/js/admin-ui/app/templates/components/website-backends/index-table.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/components/website-backends/record-form.hbs b/src/js/admin-ui/app/templates/components/website-backends/record-form.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/components/website-backends/record-form.hbs rename to src/js/admin-ui/app/templates/components/website-backends/record-form.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/config/publish.hbs b/src/js/admin-ui/app/templates/config/publish.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/config/publish.hbs rename to src/js/admin-ui/app/templates/config/publish.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/error.hbs b/src/js/admin-ui/app/templates/error.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/error.hbs rename to src/js/admin-ui/app/templates/error.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/login.hbs b/src/js/admin-ui/app/templates/login.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/login.hbs rename to src/js/admin-ui/app/templates/login.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/not-found.hbs b/src/js/admin-ui/app/templates/not-found.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/not-found.hbs rename to src/js/admin-ui/app/templates/not-found.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/stats/drilldown.hbs b/src/js/admin-ui/app/templates/stats/drilldown.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/stats/drilldown.hbs rename to src/js/admin-ui/app/templates/stats/drilldown.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/stats/logs.hbs b/src/js/admin-ui/app/templates/stats/logs.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/stats/logs.hbs rename to src/js/admin-ui/app/templates/stats/logs.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/stats/map.hbs b/src/js/admin-ui/app/templates/stats/map.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/stats/map.hbs rename to src/js/admin-ui/app/templates/stats/map.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/stats/users.hbs b/src/js/admin-ui/app/templates/stats/users.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/stats/users.hbs rename to src/js/admin-ui/app/templates/stats/users.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/website-backends/edit.hbs b/src/js/admin-ui/app/templates/website-backends/edit.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/website-backends/edit.hbs rename to src/js/admin-ui/app/templates/website-backends/edit.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/website-backends/index.hbs b/src/js/admin-ui/app/templates/website-backends/index.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/website-backends/index.hbs rename to src/js/admin-ui/app/templates/website-backends/index.hbs diff --git a/src/api-umbrella/admin-ui/app/templates/website-backends/new.hbs b/src/js/admin-ui/app/templates/website-backends/new.hbs similarity index 100% rename from src/api-umbrella/admin-ui/app/templates/website-backends/new.hbs rename to src/js/admin-ui/app/templates/website-backends/new.hbs diff --git a/src/api-umbrella/admin-ui/app/utils/data-tables-helpers.js b/src/js/admin-ui/app/utils/data-tables-helpers.js similarity index 100% rename from src/api-umbrella/admin-ui/app/utils/data-tables-helpers.js rename to src/js/admin-ui/app/utils/data-tables-helpers.js diff --git a/src/api-umbrella/admin-ui/app/utils/loading-button.js b/src/js/admin-ui/app/utils/loading-button.js similarity index 100% rename from src/api-umbrella/admin-ui/app/utils/loading-button.js rename to src/js/admin-ui/app/utils/loading-button.js diff --git a/src/api-umbrella/admin-ui/config/environment.js b/src/js/admin-ui/config/environment.js similarity index 100% rename from src/api-umbrella/admin-ui/config/environment.js rename to src/js/admin-ui/config/environment.js diff --git a/src/api-umbrella/admin-ui/config/optional-features.json b/src/js/admin-ui/config/optional-features.json similarity index 100% rename from src/api-umbrella/admin-ui/config/optional-features.json rename to src/js/admin-ui/config/optional-features.json diff --git a/src/api-umbrella/admin-ui/config/targets.js b/src/js/admin-ui/config/targets.js similarity index 100% rename from src/api-umbrella/admin-ui/config/targets.js rename to src/js/admin-ui/config/targets.js diff --git a/src/api-umbrella/admin-ui/ember-cli-build.js b/src/js/admin-ui/ember-cli-build.js similarity index 100% rename from src/api-umbrella/admin-ui/ember-cli-build.js rename to src/js/admin-ui/ember-cli-build.js diff --git a/src/api-umbrella/admin-ui/lib/.eslintrc.js b/src/js/admin-ui/lib/.eslintrc.js similarity index 100% rename from src/api-umbrella/admin-ui/lib/.eslintrc.js rename to src/js/admin-ui/lib/.eslintrc.js diff --git a/src/api-umbrella/admin-ui/lib/inject-live-reload-config/index.js b/src/js/admin-ui/lib/inject-live-reload-config/index.js similarity index 100% rename from src/api-umbrella/admin-ui/lib/inject-live-reload-config/index.js rename to src/js/admin-ui/lib/inject-live-reload-config/index.js diff --git a/src/api-umbrella/admin-ui/lib/inject-live-reload-config/package.json b/src/js/admin-ui/lib/inject-live-reload-config/package.json similarity index 100% rename from src/api-umbrella/admin-ui/lib/inject-live-reload-config/package.json rename to src/js/admin-ui/lib/inject-live-reload-config/package.json diff --git a/src/api-umbrella/admin-ui/package.json b/src/js/admin-ui/package.json similarity index 100% rename from src/api-umbrella/admin-ui/package.json rename to src/js/admin-ui/package.json diff --git a/src/api-umbrella/admin-ui/public/maps/AD.json b/src/js/admin-ui/public/maps/AD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AD.json rename to src/js/admin-ui/public/maps/AD.json diff --git a/src/api-umbrella/admin-ui/public/maps/AE.json b/src/js/admin-ui/public/maps/AE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AE.json rename to src/js/admin-ui/public/maps/AE.json diff --git a/src/api-umbrella/admin-ui/public/maps/AF.json b/src/js/admin-ui/public/maps/AF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AF.json rename to src/js/admin-ui/public/maps/AF.json diff --git a/src/api-umbrella/admin-ui/public/maps/AI.json b/src/js/admin-ui/public/maps/AI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AI.json rename to src/js/admin-ui/public/maps/AI.json diff --git a/src/api-umbrella/admin-ui/public/maps/AL.json b/src/js/admin-ui/public/maps/AL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AL.json rename to src/js/admin-ui/public/maps/AL.json diff --git a/src/api-umbrella/admin-ui/public/maps/AM.json b/src/js/admin-ui/public/maps/AM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AM.json rename to src/js/admin-ui/public/maps/AM.json diff --git a/src/api-umbrella/admin-ui/public/maps/AO.json b/src/js/admin-ui/public/maps/AO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AO.json rename to src/js/admin-ui/public/maps/AO.json diff --git a/src/api-umbrella/admin-ui/public/maps/AR.json b/src/js/admin-ui/public/maps/AR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AR.json rename to src/js/admin-ui/public/maps/AR.json diff --git a/src/api-umbrella/admin-ui/public/maps/AS.json b/src/js/admin-ui/public/maps/AS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AS.json rename to src/js/admin-ui/public/maps/AS.json diff --git a/src/api-umbrella/admin-ui/public/maps/AT.json b/src/js/admin-ui/public/maps/AT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AT.json rename to src/js/admin-ui/public/maps/AT.json diff --git a/src/api-umbrella/admin-ui/public/maps/AU.json b/src/js/admin-ui/public/maps/AU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AU.json rename to src/js/admin-ui/public/maps/AU.json diff --git a/src/api-umbrella/admin-ui/public/maps/AW.json b/src/js/admin-ui/public/maps/AW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AW.json rename to src/js/admin-ui/public/maps/AW.json diff --git a/src/api-umbrella/admin-ui/public/maps/AX.json b/src/js/admin-ui/public/maps/AX.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AX.json rename to src/js/admin-ui/public/maps/AX.json diff --git a/src/api-umbrella/admin-ui/public/maps/AZ.json b/src/js/admin-ui/public/maps/AZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/AZ.json rename to src/js/admin-ui/public/maps/AZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/BA.json b/src/js/admin-ui/public/maps/BA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BA.json rename to src/js/admin-ui/public/maps/BA.json diff --git a/src/api-umbrella/admin-ui/public/maps/BB.json b/src/js/admin-ui/public/maps/BB.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BB.json rename to src/js/admin-ui/public/maps/BB.json diff --git a/src/api-umbrella/admin-ui/public/maps/BD.json b/src/js/admin-ui/public/maps/BD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BD.json rename to src/js/admin-ui/public/maps/BD.json diff --git a/src/api-umbrella/admin-ui/public/maps/BE.json b/src/js/admin-ui/public/maps/BE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BE.json rename to src/js/admin-ui/public/maps/BE.json diff --git a/src/api-umbrella/admin-ui/public/maps/BF.json b/src/js/admin-ui/public/maps/BF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BF.json rename to src/js/admin-ui/public/maps/BF.json diff --git a/src/api-umbrella/admin-ui/public/maps/BG.json b/src/js/admin-ui/public/maps/BG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BG.json rename to src/js/admin-ui/public/maps/BG.json diff --git a/src/api-umbrella/admin-ui/public/maps/BH.json b/src/js/admin-ui/public/maps/BH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BH.json rename to src/js/admin-ui/public/maps/BH.json diff --git a/src/api-umbrella/admin-ui/public/maps/BI.json b/src/js/admin-ui/public/maps/BI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BI.json rename to src/js/admin-ui/public/maps/BI.json diff --git a/src/api-umbrella/admin-ui/public/maps/BJ.json b/src/js/admin-ui/public/maps/BJ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BJ.json rename to src/js/admin-ui/public/maps/BJ.json diff --git a/src/api-umbrella/admin-ui/public/maps/BL.json b/src/js/admin-ui/public/maps/BL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BL.json rename to src/js/admin-ui/public/maps/BL.json diff --git a/src/api-umbrella/admin-ui/public/maps/BM.json b/src/js/admin-ui/public/maps/BM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BM.json rename to src/js/admin-ui/public/maps/BM.json diff --git a/src/api-umbrella/admin-ui/public/maps/BN.json b/src/js/admin-ui/public/maps/BN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BN.json rename to src/js/admin-ui/public/maps/BN.json diff --git a/src/api-umbrella/admin-ui/public/maps/BO.json b/src/js/admin-ui/public/maps/BO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BO.json rename to src/js/admin-ui/public/maps/BO.json diff --git a/src/api-umbrella/admin-ui/public/maps/BQ.json b/src/js/admin-ui/public/maps/BQ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BQ.json rename to src/js/admin-ui/public/maps/BQ.json diff --git a/src/api-umbrella/admin-ui/public/maps/BR.json b/src/js/admin-ui/public/maps/BR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BR.json rename to src/js/admin-ui/public/maps/BR.json diff --git a/src/api-umbrella/admin-ui/public/maps/BS.json b/src/js/admin-ui/public/maps/BS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BS.json rename to src/js/admin-ui/public/maps/BS.json diff --git a/src/api-umbrella/admin-ui/public/maps/BT.json b/src/js/admin-ui/public/maps/BT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BT.json rename to src/js/admin-ui/public/maps/BT.json diff --git a/src/api-umbrella/admin-ui/public/maps/BW.json b/src/js/admin-ui/public/maps/BW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BW.json rename to src/js/admin-ui/public/maps/BW.json diff --git a/src/api-umbrella/admin-ui/public/maps/BY.json b/src/js/admin-ui/public/maps/BY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BY.json rename to src/js/admin-ui/public/maps/BY.json diff --git a/src/api-umbrella/admin-ui/public/maps/BZ.json b/src/js/admin-ui/public/maps/BZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/BZ.json rename to src/js/admin-ui/public/maps/BZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/CA.json b/src/js/admin-ui/public/maps/CA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CA.json rename to src/js/admin-ui/public/maps/CA.json diff --git a/src/api-umbrella/admin-ui/public/maps/CC.json b/src/js/admin-ui/public/maps/CC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CC.json rename to src/js/admin-ui/public/maps/CC.json diff --git a/src/api-umbrella/admin-ui/public/maps/CD.json b/src/js/admin-ui/public/maps/CD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CD.json rename to src/js/admin-ui/public/maps/CD.json diff --git a/src/api-umbrella/admin-ui/public/maps/CF.json b/src/js/admin-ui/public/maps/CF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CF.json rename to src/js/admin-ui/public/maps/CF.json diff --git a/src/api-umbrella/admin-ui/public/maps/CG.json b/src/js/admin-ui/public/maps/CG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CG.json rename to src/js/admin-ui/public/maps/CG.json diff --git a/src/api-umbrella/admin-ui/public/maps/CH.json b/src/js/admin-ui/public/maps/CH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CH.json rename to src/js/admin-ui/public/maps/CH.json diff --git a/src/api-umbrella/admin-ui/public/maps/CI.json b/src/js/admin-ui/public/maps/CI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CI.json rename to src/js/admin-ui/public/maps/CI.json diff --git a/src/api-umbrella/admin-ui/public/maps/CK.json b/src/js/admin-ui/public/maps/CK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CK.json rename to src/js/admin-ui/public/maps/CK.json diff --git a/src/api-umbrella/admin-ui/public/maps/CL.json b/src/js/admin-ui/public/maps/CL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CL.json rename to src/js/admin-ui/public/maps/CL.json diff --git a/src/api-umbrella/admin-ui/public/maps/CM.json b/src/js/admin-ui/public/maps/CM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CM.json rename to src/js/admin-ui/public/maps/CM.json diff --git a/src/api-umbrella/admin-ui/public/maps/CN.json b/src/js/admin-ui/public/maps/CN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CN.json rename to src/js/admin-ui/public/maps/CN.json diff --git a/src/api-umbrella/admin-ui/public/maps/CO.json b/src/js/admin-ui/public/maps/CO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CO.json rename to src/js/admin-ui/public/maps/CO.json diff --git a/src/api-umbrella/admin-ui/public/maps/CR.json b/src/js/admin-ui/public/maps/CR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CR.json rename to src/js/admin-ui/public/maps/CR.json diff --git a/src/api-umbrella/admin-ui/public/maps/CU.json b/src/js/admin-ui/public/maps/CU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CU.json rename to src/js/admin-ui/public/maps/CU.json diff --git a/src/api-umbrella/admin-ui/public/maps/CV.json b/src/js/admin-ui/public/maps/CV.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CV.json rename to src/js/admin-ui/public/maps/CV.json diff --git a/src/api-umbrella/admin-ui/public/maps/CW.json b/src/js/admin-ui/public/maps/CW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CW.json rename to src/js/admin-ui/public/maps/CW.json diff --git a/src/api-umbrella/admin-ui/public/maps/CX.json b/src/js/admin-ui/public/maps/CX.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CX.json rename to src/js/admin-ui/public/maps/CX.json diff --git a/src/api-umbrella/admin-ui/public/maps/CY.json b/src/js/admin-ui/public/maps/CY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CY.json rename to src/js/admin-ui/public/maps/CY.json diff --git a/src/api-umbrella/admin-ui/public/maps/CZ.json b/src/js/admin-ui/public/maps/CZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/CZ.json rename to src/js/admin-ui/public/maps/CZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/DE.json b/src/js/admin-ui/public/maps/DE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/DE.json rename to src/js/admin-ui/public/maps/DE.json diff --git a/src/api-umbrella/admin-ui/public/maps/DJ.json b/src/js/admin-ui/public/maps/DJ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/DJ.json rename to src/js/admin-ui/public/maps/DJ.json diff --git a/src/api-umbrella/admin-ui/public/maps/DK.json b/src/js/admin-ui/public/maps/DK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/DK.json rename to src/js/admin-ui/public/maps/DK.json diff --git a/src/api-umbrella/admin-ui/public/maps/DM.json b/src/js/admin-ui/public/maps/DM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/DM.json rename to src/js/admin-ui/public/maps/DM.json diff --git a/src/api-umbrella/admin-ui/public/maps/DO.json b/src/js/admin-ui/public/maps/DO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/DO.json rename to src/js/admin-ui/public/maps/DO.json diff --git a/src/api-umbrella/admin-ui/public/maps/DZ.json b/src/js/admin-ui/public/maps/DZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/DZ.json rename to src/js/admin-ui/public/maps/DZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/EC.json b/src/js/admin-ui/public/maps/EC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/EC.json rename to src/js/admin-ui/public/maps/EC.json diff --git a/src/api-umbrella/admin-ui/public/maps/EE.json b/src/js/admin-ui/public/maps/EE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/EE.json rename to src/js/admin-ui/public/maps/EE.json diff --git a/src/api-umbrella/admin-ui/public/maps/EG.json b/src/js/admin-ui/public/maps/EG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/EG.json rename to src/js/admin-ui/public/maps/EG.json diff --git a/src/api-umbrella/admin-ui/public/maps/EH.json b/src/js/admin-ui/public/maps/EH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/EH.json rename to src/js/admin-ui/public/maps/EH.json diff --git a/src/api-umbrella/admin-ui/public/maps/ER.json b/src/js/admin-ui/public/maps/ER.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ER.json rename to src/js/admin-ui/public/maps/ER.json diff --git a/src/api-umbrella/admin-ui/public/maps/ES.json b/src/js/admin-ui/public/maps/ES.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ES.json rename to src/js/admin-ui/public/maps/ES.json diff --git a/src/api-umbrella/admin-ui/public/maps/ET.json b/src/js/admin-ui/public/maps/ET.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ET.json rename to src/js/admin-ui/public/maps/ET.json diff --git a/src/api-umbrella/admin-ui/public/maps/FI.json b/src/js/admin-ui/public/maps/FI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/FI.json rename to src/js/admin-ui/public/maps/FI.json diff --git a/src/api-umbrella/admin-ui/public/maps/FJ.json b/src/js/admin-ui/public/maps/FJ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/FJ.json rename to src/js/admin-ui/public/maps/FJ.json diff --git a/src/api-umbrella/admin-ui/public/maps/FK.json b/src/js/admin-ui/public/maps/FK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/FK.json rename to src/js/admin-ui/public/maps/FK.json diff --git a/src/api-umbrella/admin-ui/public/maps/FM.json b/src/js/admin-ui/public/maps/FM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/FM.json rename to src/js/admin-ui/public/maps/FM.json diff --git a/src/api-umbrella/admin-ui/public/maps/FO.json b/src/js/admin-ui/public/maps/FO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/FO.json rename to src/js/admin-ui/public/maps/FO.json diff --git a/src/api-umbrella/admin-ui/public/maps/FR.json b/src/js/admin-ui/public/maps/FR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/FR.json rename to src/js/admin-ui/public/maps/FR.json diff --git a/src/api-umbrella/admin-ui/public/maps/GA.json b/src/js/admin-ui/public/maps/GA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GA.json rename to src/js/admin-ui/public/maps/GA.json diff --git a/src/api-umbrella/admin-ui/public/maps/GB.json b/src/js/admin-ui/public/maps/GB.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GB.json rename to src/js/admin-ui/public/maps/GB.json diff --git a/src/api-umbrella/admin-ui/public/maps/GD.json b/src/js/admin-ui/public/maps/GD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GD.json rename to src/js/admin-ui/public/maps/GD.json diff --git a/src/api-umbrella/admin-ui/public/maps/GE.json b/src/js/admin-ui/public/maps/GE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GE.json rename to src/js/admin-ui/public/maps/GE.json diff --git a/src/api-umbrella/admin-ui/public/maps/GF.json b/src/js/admin-ui/public/maps/GF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GF.json rename to src/js/admin-ui/public/maps/GF.json diff --git a/src/api-umbrella/admin-ui/public/maps/GG.json b/src/js/admin-ui/public/maps/GG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GG.json rename to src/js/admin-ui/public/maps/GG.json diff --git a/src/api-umbrella/admin-ui/public/maps/GH.json b/src/js/admin-ui/public/maps/GH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GH.json rename to src/js/admin-ui/public/maps/GH.json diff --git a/src/api-umbrella/admin-ui/public/maps/GL.json b/src/js/admin-ui/public/maps/GL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GL.json rename to src/js/admin-ui/public/maps/GL.json diff --git a/src/api-umbrella/admin-ui/public/maps/GM.json b/src/js/admin-ui/public/maps/GM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GM.json rename to src/js/admin-ui/public/maps/GM.json diff --git a/src/api-umbrella/admin-ui/public/maps/GN.json b/src/js/admin-ui/public/maps/GN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GN.json rename to src/js/admin-ui/public/maps/GN.json diff --git a/src/api-umbrella/admin-ui/public/maps/GP.json b/src/js/admin-ui/public/maps/GP.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GP.json rename to src/js/admin-ui/public/maps/GP.json diff --git a/src/api-umbrella/admin-ui/public/maps/GQ.json b/src/js/admin-ui/public/maps/GQ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GQ.json rename to src/js/admin-ui/public/maps/GQ.json diff --git a/src/api-umbrella/admin-ui/public/maps/GR.json b/src/js/admin-ui/public/maps/GR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GR.json rename to src/js/admin-ui/public/maps/GR.json diff --git a/src/api-umbrella/admin-ui/public/maps/GS.json b/src/js/admin-ui/public/maps/GS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GS.json rename to src/js/admin-ui/public/maps/GS.json diff --git a/src/api-umbrella/admin-ui/public/maps/GT.json b/src/js/admin-ui/public/maps/GT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GT.json rename to src/js/admin-ui/public/maps/GT.json diff --git a/src/api-umbrella/admin-ui/public/maps/GU.json b/src/js/admin-ui/public/maps/GU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GU.json rename to src/js/admin-ui/public/maps/GU.json diff --git a/src/api-umbrella/admin-ui/public/maps/GW.json b/src/js/admin-ui/public/maps/GW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GW.json rename to src/js/admin-ui/public/maps/GW.json diff --git a/src/api-umbrella/admin-ui/public/maps/GY.json b/src/js/admin-ui/public/maps/GY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/GY.json rename to src/js/admin-ui/public/maps/GY.json diff --git a/src/api-umbrella/admin-ui/public/maps/HK.json b/src/js/admin-ui/public/maps/HK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/HK.json rename to src/js/admin-ui/public/maps/HK.json diff --git a/src/api-umbrella/admin-ui/public/maps/HM.json b/src/js/admin-ui/public/maps/HM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/HM.json rename to src/js/admin-ui/public/maps/HM.json diff --git a/src/api-umbrella/admin-ui/public/maps/HN.json b/src/js/admin-ui/public/maps/HN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/HN.json rename to src/js/admin-ui/public/maps/HN.json diff --git a/src/api-umbrella/admin-ui/public/maps/HR.json b/src/js/admin-ui/public/maps/HR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/HR.json rename to src/js/admin-ui/public/maps/HR.json diff --git a/src/api-umbrella/admin-ui/public/maps/HT.json b/src/js/admin-ui/public/maps/HT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/HT.json rename to src/js/admin-ui/public/maps/HT.json diff --git a/src/api-umbrella/admin-ui/public/maps/HU.json b/src/js/admin-ui/public/maps/HU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/HU.json rename to src/js/admin-ui/public/maps/HU.json diff --git a/src/api-umbrella/admin-ui/public/maps/ID.json b/src/js/admin-ui/public/maps/ID.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ID.json rename to src/js/admin-ui/public/maps/ID.json diff --git a/src/api-umbrella/admin-ui/public/maps/IE.json b/src/js/admin-ui/public/maps/IE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IE.json rename to src/js/admin-ui/public/maps/IE.json diff --git a/src/api-umbrella/admin-ui/public/maps/IL.json b/src/js/admin-ui/public/maps/IL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IL.json rename to src/js/admin-ui/public/maps/IL.json diff --git a/src/api-umbrella/admin-ui/public/maps/IM.json b/src/js/admin-ui/public/maps/IM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IM.json rename to src/js/admin-ui/public/maps/IM.json diff --git a/src/api-umbrella/admin-ui/public/maps/IN.json b/src/js/admin-ui/public/maps/IN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IN.json rename to src/js/admin-ui/public/maps/IN.json diff --git a/src/api-umbrella/admin-ui/public/maps/IO.json b/src/js/admin-ui/public/maps/IO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IO.json rename to src/js/admin-ui/public/maps/IO.json diff --git a/src/api-umbrella/admin-ui/public/maps/IQ.json b/src/js/admin-ui/public/maps/IQ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IQ.json rename to src/js/admin-ui/public/maps/IQ.json diff --git a/src/api-umbrella/admin-ui/public/maps/IR.json b/src/js/admin-ui/public/maps/IR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IR.json rename to src/js/admin-ui/public/maps/IR.json diff --git a/src/api-umbrella/admin-ui/public/maps/IS.json b/src/js/admin-ui/public/maps/IS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IS.json rename to src/js/admin-ui/public/maps/IS.json diff --git a/src/api-umbrella/admin-ui/public/maps/IT.json b/src/js/admin-ui/public/maps/IT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/IT.json rename to src/js/admin-ui/public/maps/IT.json diff --git a/src/api-umbrella/admin-ui/public/maps/JE.json b/src/js/admin-ui/public/maps/JE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/JE.json rename to src/js/admin-ui/public/maps/JE.json diff --git a/src/api-umbrella/admin-ui/public/maps/JM.json b/src/js/admin-ui/public/maps/JM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/JM.json rename to src/js/admin-ui/public/maps/JM.json diff --git a/src/api-umbrella/admin-ui/public/maps/JO.json b/src/js/admin-ui/public/maps/JO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/JO.json rename to src/js/admin-ui/public/maps/JO.json diff --git a/src/api-umbrella/admin-ui/public/maps/JP.json b/src/js/admin-ui/public/maps/JP.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/JP.json rename to src/js/admin-ui/public/maps/JP.json diff --git a/src/api-umbrella/admin-ui/public/maps/KE.json b/src/js/admin-ui/public/maps/KE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KE.json rename to src/js/admin-ui/public/maps/KE.json diff --git a/src/api-umbrella/admin-ui/public/maps/KG.json b/src/js/admin-ui/public/maps/KG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KG.json rename to src/js/admin-ui/public/maps/KG.json diff --git a/src/api-umbrella/admin-ui/public/maps/KH.json b/src/js/admin-ui/public/maps/KH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KH.json rename to src/js/admin-ui/public/maps/KH.json diff --git a/src/api-umbrella/admin-ui/public/maps/KI.json b/src/js/admin-ui/public/maps/KI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KI.json rename to src/js/admin-ui/public/maps/KI.json diff --git a/src/api-umbrella/admin-ui/public/maps/KM.json b/src/js/admin-ui/public/maps/KM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KM.json rename to src/js/admin-ui/public/maps/KM.json diff --git a/src/api-umbrella/admin-ui/public/maps/KN.json b/src/js/admin-ui/public/maps/KN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KN.json rename to src/js/admin-ui/public/maps/KN.json diff --git a/src/api-umbrella/admin-ui/public/maps/KP.json b/src/js/admin-ui/public/maps/KP.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KP.json rename to src/js/admin-ui/public/maps/KP.json diff --git a/src/api-umbrella/admin-ui/public/maps/KR.json b/src/js/admin-ui/public/maps/KR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KR.json rename to src/js/admin-ui/public/maps/KR.json diff --git a/src/api-umbrella/admin-ui/public/maps/KW.json b/src/js/admin-ui/public/maps/KW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KW.json rename to src/js/admin-ui/public/maps/KW.json diff --git a/src/api-umbrella/admin-ui/public/maps/KY.json b/src/js/admin-ui/public/maps/KY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KY.json rename to src/js/admin-ui/public/maps/KY.json diff --git a/src/api-umbrella/admin-ui/public/maps/KZ.json b/src/js/admin-ui/public/maps/KZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/KZ.json rename to src/js/admin-ui/public/maps/KZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/LA.json b/src/js/admin-ui/public/maps/LA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LA.json rename to src/js/admin-ui/public/maps/LA.json diff --git a/src/api-umbrella/admin-ui/public/maps/LB.json b/src/js/admin-ui/public/maps/LB.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LB.json rename to src/js/admin-ui/public/maps/LB.json diff --git a/src/api-umbrella/admin-ui/public/maps/LC.json b/src/js/admin-ui/public/maps/LC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LC.json rename to src/js/admin-ui/public/maps/LC.json diff --git a/src/api-umbrella/admin-ui/public/maps/LI.json b/src/js/admin-ui/public/maps/LI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LI.json rename to src/js/admin-ui/public/maps/LI.json diff --git a/src/api-umbrella/admin-ui/public/maps/LK.json b/src/js/admin-ui/public/maps/LK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LK.json rename to src/js/admin-ui/public/maps/LK.json diff --git a/src/api-umbrella/admin-ui/public/maps/LR.json b/src/js/admin-ui/public/maps/LR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LR.json rename to src/js/admin-ui/public/maps/LR.json diff --git a/src/api-umbrella/admin-ui/public/maps/LS.json b/src/js/admin-ui/public/maps/LS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LS.json rename to src/js/admin-ui/public/maps/LS.json diff --git a/src/api-umbrella/admin-ui/public/maps/LT.json b/src/js/admin-ui/public/maps/LT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LT.json rename to src/js/admin-ui/public/maps/LT.json diff --git a/src/api-umbrella/admin-ui/public/maps/LU.json b/src/js/admin-ui/public/maps/LU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LU.json rename to src/js/admin-ui/public/maps/LU.json diff --git a/src/api-umbrella/admin-ui/public/maps/LV.json b/src/js/admin-ui/public/maps/LV.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LV.json rename to src/js/admin-ui/public/maps/LV.json diff --git a/src/api-umbrella/admin-ui/public/maps/LY.json b/src/js/admin-ui/public/maps/LY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/LY.json rename to src/js/admin-ui/public/maps/LY.json diff --git a/src/api-umbrella/admin-ui/public/maps/MA.json b/src/js/admin-ui/public/maps/MA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MA.json rename to src/js/admin-ui/public/maps/MA.json diff --git a/src/api-umbrella/admin-ui/public/maps/MC.json b/src/js/admin-ui/public/maps/MC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MC.json rename to src/js/admin-ui/public/maps/MC.json diff --git a/src/api-umbrella/admin-ui/public/maps/MD.json b/src/js/admin-ui/public/maps/MD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MD.json rename to src/js/admin-ui/public/maps/MD.json diff --git a/src/api-umbrella/admin-ui/public/maps/ME.json b/src/js/admin-ui/public/maps/ME.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ME.json rename to src/js/admin-ui/public/maps/ME.json diff --git a/src/api-umbrella/admin-ui/public/maps/MF.json b/src/js/admin-ui/public/maps/MF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MF.json rename to src/js/admin-ui/public/maps/MF.json diff --git a/src/api-umbrella/admin-ui/public/maps/MG.json b/src/js/admin-ui/public/maps/MG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MG.json rename to src/js/admin-ui/public/maps/MG.json diff --git a/src/api-umbrella/admin-ui/public/maps/MH.json b/src/js/admin-ui/public/maps/MH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MH.json rename to src/js/admin-ui/public/maps/MH.json diff --git a/src/api-umbrella/admin-ui/public/maps/MK.json b/src/js/admin-ui/public/maps/MK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MK.json rename to src/js/admin-ui/public/maps/MK.json diff --git a/src/api-umbrella/admin-ui/public/maps/ML.json b/src/js/admin-ui/public/maps/ML.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ML.json rename to src/js/admin-ui/public/maps/ML.json diff --git a/src/api-umbrella/admin-ui/public/maps/MM.json b/src/js/admin-ui/public/maps/MM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MM.json rename to src/js/admin-ui/public/maps/MM.json diff --git a/src/api-umbrella/admin-ui/public/maps/MN.json b/src/js/admin-ui/public/maps/MN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MN.json rename to src/js/admin-ui/public/maps/MN.json diff --git a/src/api-umbrella/admin-ui/public/maps/MO.json b/src/js/admin-ui/public/maps/MO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MO.json rename to src/js/admin-ui/public/maps/MO.json diff --git a/src/api-umbrella/admin-ui/public/maps/MP.json b/src/js/admin-ui/public/maps/MP.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MP.json rename to src/js/admin-ui/public/maps/MP.json diff --git a/src/api-umbrella/admin-ui/public/maps/MQ.json b/src/js/admin-ui/public/maps/MQ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MQ.json rename to src/js/admin-ui/public/maps/MQ.json diff --git a/src/api-umbrella/admin-ui/public/maps/MR.json b/src/js/admin-ui/public/maps/MR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MR.json rename to src/js/admin-ui/public/maps/MR.json diff --git a/src/api-umbrella/admin-ui/public/maps/MS.json b/src/js/admin-ui/public/maps/MS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MS.json rename to src/js/admin-ui/public/maps/MS.json diff --git a/src/api-umbrella/admin-ui/public/maps/MT.json b/src/js/admin-ui/public/maps/MT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MT.json rename to src/js/admin-ui/public/maps/MT.json diff --git a/src/api-umbrella/admin-ui/public/maps/MU.json b/src/js/admin-ui/public/maps/MU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MU.json rename to src/js/admin-ui/public/maps/MU.json diff --git a/src/api-umbrella/admin-ui/public/maps/MV.json b/src/js/admin-ui/public/maps/MV.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MV.json rename to src/js/admin-ui/public/maps/MV.json diff --git a/src/api-umbrella/admin-ui/public/maps/MW.json b/src/js/admin-ui/public/maps/MW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MW.json rename to src/js/admin-ui/public/maps/MW.json diff --git a/src/api-umbrella/admin-ui/public/maps/MX.json b/src/js/admin-ui/public/maps/MX.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MX.json rename to src/js/admin-ui/public/maps/MX.json diff --git a/src/api-umbrella/admin-ui/public/maps/MY.json b/src/js/admin-ui/public/maps/MY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MY.json rename to src/js/admin-ui/public/maps/MY.json diff --git a/src/api-umbrella/admin-ui/public/maps/MZ.json b/src/js/admin-ui/public/maps/MZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/MZ.json rename to src/js/admin-ui/public/maps/MZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/NA.json b/src/js/admin-ui/public/maps/NA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NA.json rename to src/js/admin-ui/public/maps/NA.json diff --git a/src/api-umbrella/admin-ui/public/maps/NC.json b/src/js/admin-ui/public/maps/NC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NC.json rename to src/js/admin-ui/public/maps/NC.json diff --git a/src/api-umbrella/admin-ui/public/maps/NE.json b/src/js/admin-ui/public/maps/NE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NE.json rename to src/js/admin-ui/public/maps/NE.json diff --git a/src/api-umbrella/admin-ui/public/maps/NF.json b/src/js/admin-ui/public/maps/NF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NF.json rename to src/js/admin-ui/public/maps/NF.json diff --git a/src/api-umbrella/admin-ui/public/maps/NG.json b/src/js/admin-ui/public/maps/NG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NG.json rename to src/js/admin-ui/public/maps/NG.json diff --git a/src/api-umbrella/admin-ui/public/maps/NI.json b/src/js/admin-ui/public/maps/NI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NI.json rename to src/js/admin-ui/public/maps/NI.json diff --git a/src/api-umbrella/admin-ui/public/maps/NL.json b/src/js/admin-ui/public/maps/NL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NL.json rename to src/js/admin-ui/public/maps/NL.json diff --git a/src/api-umbrella/admin-ui/public/maps/NO.json b/src/js/admin-ui/public/maps/NO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NO.json rename to src/js/admin-ui/public/maps/NO.json diff --git a/src/api-umbrella/admin-ui/public/maps/NP.json b/src/js/admin-ui/public/maps/NP.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NP.json rename to src/js/admin-ui/public/maps/NP.json diff --git a/src/api-umbrella/admin-ui/public/maps/NR.json b/src/js/admin-ui/public/maps/NR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NR.json rename to src/js/admin-ui/public/maps/NR.json diff --git a/src/api-umbrella/admin-ui/public/maps/NU.json b/src/js/admin-ui/public/maps/NU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NU.json rename to src/js/admin-ui/public/maps/NU.json diff --git a/src/api-umbrella/admin-ui/public/maps/NZ.json b/src/js/admin-ui/public/maps/NZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/NZ.json rename to src/js/admin-ui/public/maps/NZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/OM.json b/src/js/admin-ui/public/maps/OM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/OM.json rename to src/js/admin-ui/public/maps/OM.json diff --git a/src/api-umbrella/admin-ui/public/maps/PA.json b/src/js/admin-ui/public/maps/PA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PA.json rename to src/js/admin-ui/public/maps/PA.json diff --git a/src/api-umbrella/admin-ui/public/maps/PE.json b/src/js/admin-ui/public/maps/PE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PE.json rename to src/js/admin-ui/public/maps/PE.json diff --git a/src/api-umbrella/admin-ui/public/maps/PF.json b/src/js/admin-ui/public/maps/PF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PF.json rename to src/js/admin-ui/public/maps/PF.json diff --git a/src/api-umbrella/admin-ui/public/maps/PG.json b/src/js/admin-ui/public/maps/PG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PG.json rename to src/js/admin-ui/public/maps/PG.json diff --git a/src/api-umbrella/admin-ui/public/maps/PH.json b/src/js/admin-ui/public/maps/PH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PH.json rename to src/js/admin-ui/public/maps/PH.json diff --git a/src/api-umbrella/admin-ui/public/maps/PK.json b/src/js/admin-ui/public/maps/PK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PK.json rename to src/js/admin-ui/public/maps/PK.json diff --git a/src/api-umbrella/admin-ui/public/maps/PL.json b/src/js/admin-ui/public/maps/PL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PL.json rename to src/js/admin-ui/public/maps/PL.json diff --git a/src/api-umbrella/admin-ui/public/maps/PM.json b/src/js/admin-ui/public/maps/PM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PM.json rename to src/js/admin-ui/public/maps/PM.json diff --git a/src/api-umbrella/admin-ui/public/maps/PN.json b/src/js/admin-ui/public/maps/PN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PN.json rename to src/js/admin-ui/public/maps/PN.json diff --git a/src/api-umbrella/admin-ui/public/maps/PR.json b/src/js/admin-ui/public/maps/PR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PR.json rename to src/js/admin-ui/public/maps/PR.json diff --git a/src/api-umbrella/admin-ui/public/maps/PT.json b/src/js/admin-ui/public/maps/PT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PT.json rename to src/js/admin-ui/public/maps/PT.json diff --git a/src/api-umbrella/admin-ui/public/maps/PW.json b/src/js/admin-ui/public/maps/PW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PW.json rename to src/js/admin-ui/public/maps/PW.json diff --git a/src/api-umbrella/admin-ui/public/maps/PY.json b/src/js/admin-ui/public/maps/PY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/PY.json rename to src/js/admin-ui/public/maps/PY.json diff --git a/src/api-umbrella/admin-ui/public/maps/QA.json b/src/js/admin-ui/public/maps/QA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/QA.json rename to src/js/admin-ui/public/maps/QA.json diff --git a/src/api-umbrella/admin-ui/public/maps/RE.json b/src/js/admin-ui/public/maps/RE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/RE.json rename to src/js/admin-ui/public/maps/RE.json diff --git a/src/api-umbrella/admin-ui/public/maps/RO.json b/src/js/admin-ui/public/maps/RO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/RO.json rename to src/js/admin-ui/public/maps/RO.json diff --git a/src/api-umbrella/admin-ui/public/maps/RS.json b/src/js/admin-ui/public/maps/RS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/RS.json rename to src/js/admin-ui/public/maps/RS.json diff --git a/src/api-umbrella/admin-ui/public/maps/RU.json b/src/js/admin-ui/public/maps/RU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/RU.json rename to src/js/admin-ui/public/maps/RU.json diff --git a/src/api-umbrella/admin-ui/public/maps/RW.json b/src/js/admin-ui/public/maps/RW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/RW.json rename to src/js/admin-ui/public/maps/RW.json diff --git a/src/api-umbrella/admin-ui/public/maps/SA.json b/src/js/admin-ui/public/maps/SA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SA.json rename to src/js/admin-ui/public/maps/SA.json diff --git a/src/api-umbrella/admin-ui/public/maps/SB.json b/src/js/admin-ui/public/maps/SB.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SB.json rename to src/js/admin-ui/public/maps/SB.json diff --git a/src/api-umbrella/admin-ui/public/maps/SC.json b/src/js/admin-ui/public/maps/SC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SC.json rename to src/js/admin-ui/public/maps/SC.json diff --git a/src/api-umbrella/admin-ui/public/maps/SD.json b/src/js/admin-ui/public/maps/SD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SD.json rename to src/js/admin-ui/public/maps/SD.json diff --git a/src/api-umbrella/admin-ui/public/maps/SE.json b/src/js/admin-ui/public/maps/SE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SE.json rename to src/js/admin-ui/public/maps/SE.json diff --git a/src/api-umbrella/admin-ui/public/maps/SG.json b/src/js/admin-ui/public/maps/SG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SG.json rename to src/js/admin-ui/public/maps/SG.json diff --git a/src/api-umbrella/admin-ui/public/maps/SH.json b/src/js/admin-ui/public/maps/SH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SH.json rename to src/js/admin-ui/public/maps/SH.json diff --git a/src/api-umbrella/admin-ui/public/maps/SI.json b/src/js/admin-ui/public/maps/SI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SI.json rename to src/js/admin-ui/public/maps/SI.json diff --git a/src/api-umbrella/admin-ui/public/maps/SJ.json b/src/js/admin-ui/public/maps/SJ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SJ.json rename to src/js/admin-ui/public/maps/SJ.json diff --git a/src/api-umbrella/admin-ui/public/maps/SK.json b/src/js/admin-ui/public/maps/SK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SK.json rename to src/js/admin-ui/public/maps/SK.json diff --git a/src/api-umbrella/admin-ui/public/maps/SL.json b/src/js/admin-ui/public/maps/SL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SL.json rename to src/js/admin-ui/public/maps/SL.json diff --git a/src/api-umbrella/admin-ui/public/maps/SM.json b/src/js/admin-ui/public/maps/SM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SM.json rename to src/js/admin-ui/public/maps/SM.json diff --git a/src/api-umbrella/admin-ui/public/maps/SN.json b/src/js/admin-ui/public/maps/SN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SN.json rename to src/js/admin-ui/public/maps/SN.json diff --git a/src/api-umbrella/admin-ui/public/maps/SO.json b/src/js/admin-ui/public/maps/SO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SO.json rename to src/js/admin-ui/public/maps/SO.json diff --git a/src/api-umbrella/admin-ui/public/maps/SR.json b/src/js/admin-ui/public/maps/SR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SR.json rename to src/js/admin-ui/public/maps/SR.json diff --git a/src/api-umbrella/admin-ui/public/maps/SS.json b/src/js/admin-ui/public/maps/SS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SS.json rename to src/js/admin-ui/public/maps/SS.json diff --git a/src/api-umbrella/admin-ui/public/maps/ST.json b/src/js/admin-ui/public/maps/ST.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ST.json rename to src/js/admin-ui/public/maps/ST.json diff --git a/src/api-umbrella/admin-ui/public/maps/SV.json b/src/js/admin-ui/public/maps/SV.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SV.json rename to src/js/admin-ui/public/maps/SV.json diff --git a/src/api-umbrella/admin-ui/public/maps/SX.json b/src/js/admin-ui/public/maps/SX.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SX.json rename to src/js/admin-ui/public/maps/SX.json diff --git a/src/api-umbrella/admin-ui/public/maps/SY.json b/src/js/admin-ui/public/maps/SY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SY.json rename to src/js/admin-ui/public/maps/SY.json diff --git a/src/api-umbrella/admin-ui/public/maps/SZ.json b/src/js/admin-ui/public/maps/SZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/SZ.json rename to src/js/admin-ui/public/maps/SZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/TC.json b/src/js/admin-ui/public/maps/TC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TC.json rename to src/js/admin-ui/public/maps/TC.json diff --git a/src/api-umbrella/admin-ui/public/maps/TD.json b/src/js/admin-ui/public/maps/TD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TD.json rename to src/js/admin-ui/public/maps/TD.json diff --git a/src/api-umbrella/admin-ui/public/maps/TF.json b/src/js/admin-ui/public/maps/TF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TF.json rename to src/js/admin-ui/public/maps/TF.json diff --git a/src/api-umbrella/admin-ui/public/maps/TG.json b/src/js/admin-ui/public/maps/TG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TG.json rename to src/js/admin-ui/public/maps/TG.json diff --git a/src/api-umbrella/admin-ui/public/maps/TH.json b/src/js/admin-ui/public/maps/TH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TH.json rename to src/js/admin-ui/public/maps/TH.json diff --git a/src/api-umbrella/admin-ui/public/maps/TJ.json b/src/js/admin-ui/public/maps/TJ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TJ.json rename to src/js/admin-ui/public/maps/TJ.json diff --git a/src/api-umbrella/admin-ui/public/maps/TK.json b/src/js/admin-ui/public/maps/TK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TK.json rename to src/js/admin-ui/public/maps/TK.json diff --git a/src/api-umbrella/admin-ui/public/maps/TL.json b/src/js/admin-ui/public/maps/TL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TL.json rename to src/js/admin-ui/public/maps/TL.json diff --git a/src/api-umbrella/admin-ui/public/maps/TM.json b/src/js/admin-ui/public/maps/TM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TM.json rename to src/js/admin-ui/public/maps/TM.json diff --git a/src/api-umbrella/admin-ui/public/maps/TN.json b/src/js/admin-ui/public/maps/TN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TN.json rename to src/js/admin-ui/public/maps/TN.json diff --git a/src/api-umbrella/admin-ui/public/maps/TO.json b/src/js/admin-ui/public/maps/TO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TO.json rename to src/js/admin-ui/public/maps/TO.json diff --git a/src/api-umbrella/admin-ui/public/maps/TR.json b/src/js/admin-ui/public/maps/TR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TR.json rename to src/js/admin-ui/public/maps/TR.json diff --git a/src/api-umbrella/admin-ui/public/maps/TT.json b/src/js/admin-ui/public/maps/TT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TT.json rename to src/js/admin-ui/public/maps/TT.json diff --git a/src/api-umbrella/admin-ui/public/maps/TW.json b/src/js/admin-ui/public/maps/TW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TW.json rename to src/js/admin-ui/public/maps/TW.json diff --git a/src/api-umbrella/admin-ui/public/maps/TZ.json b/src/js/admin-ui/public/maps/TZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/TZ.json rename to src/js/admin-ui/public/maps/TZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/UA.json b/src/js/admin-ui/public/maps/UA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/UA.json rename to src/js/admin-ui/public/maps/UA.json diff --git a/src/api-umbrella/admin-ui/public/maps/UG.json b/src/js/admin-ui/public/maps/UG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/UG.json rename to src/js/admin-ui/public/maps/UG.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-AK.json b/src/js/admin-ui/public/maps/US-AK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-AK.json rename to src/js/admin-ui/public/maps/US-AK.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-AL.json b/src/js/admin-ui/public/maps/US-AL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-AL.json rename to src/js/admin-ui/public/maps/US-AL.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-AR.json b/src/js/admin-ui/public/maps/US-AR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-AR.json rename to src/js/admin-ui/public/maps/US-AR.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-AZ.json b/src/js/admin-ui/public/maps/US-AZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-AZ.json rename to src/js/admin-ui/public/maps/US-AZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-CA.json b/src/js/admin-ui/public/maps/US-CA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-CA.json rename to src/js/admin-ui/public/maps/US-CA.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-CO.json b/src/js/admin-ui/public/maps/US-CO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-CO.json rename to src/js/admin-ui/public/maps/US-CO.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-CT.json b/src/js/admin-ui/public/maps/US-CT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-CT.json rename to src/js/admin-ui/public/maps/US-CT.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-DC.json b/src/js/admin-ui/public/maps/US-DC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-DC.json rename to src/js/admin-ui/public/maps/US-DC.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-DE.json b/src/js/admin-ui/public/maps/US-DE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-DE.json rename to src/js/admin-ui/public/maps/US-DE.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-FL.json b/src/js/admin-ui/public/maps/US-FL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-FL.json rename to src/js/admin-ui/public/maps/US-FL.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-GA.json b/src/js/admin-ui/public/maps/US-GA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-GA.json rename to src/js/admin-ui/public/maps/US-GA.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-HI.json b/src/js/admin-ui/public/maps/US-HI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-HI.json rename to src/js/admin-ui/public/maps/US-HI.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-IA.json b/src/js/admin-ui/public/maps/US-IA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-IA.json rename to src/js/admin-ui/public/maps/US-IA.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-ID.json b/src/js/admin-ui/public/maps/US-ID.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-ID.json rename to src/js/admin-ui/public/maps/US-ID.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-IL.json b/src/js/admin-ui/public/maps/US-IL.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-IL.json rename to src/js/admin-ui/public/maps/US-IL.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-IN.json b/src/js/admin-ui/public/maps/US-IN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-IN.json rename to src/js/admin-ui/public/maps/US-IN.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-KS.json b/src/js/admin-ui/public/maps/US-KS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-KS.json rename to src/js/admin-ui/public/maps/US-KS.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-KY.json b/src/js/admin-ui/public/maps/US-KY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-KY.json rename to src/js/admin-ui/public/maps/US-KY.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-LA.json b/src/js/admin-ui/public/maps/US-LA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-LA.json rename to src/js/admin-ui/public/maps/US-LA.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-MA.json b/src/js/admin-ui/public/maps/US-MA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-MA.json rename to src/js/admin-ui/public/maps/US-MA.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-MD.json b/src/js/admin-ui/public/maps/US-MD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-MD.json rename to src/js/admin-ui/public/maps/US-MD.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-ME.json b/src/js/admin-ui/public/maps/US-ME.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-ME.json rename to src/js/admin-ui/public/maps/US-ME.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-MI.json b/src/js/admin-ui/public/maps/US-MI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-MI.json rename to src/js/admin-ui/public/maps/US-MI.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-MN.json b/src/js/admin-ui/public/maps/US-MN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-MN.json rename to src/js/admin-ui/public/maps/US-MN.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-MO.json b/src/js/admin-ui/public/maps/US-MO.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-MO.json rename to src/js/admin-ui/public/maps/US-MO.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-MS.json b/src/js/admin-ui/public/maps/US-MS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-MS.json rename to src/js/admin-ui/public/maps/US-MS.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-MT.json b/src/js/admin-ui/public/maps/US-MT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-MT.json rename to src/js/admin-ui/public/maps/US-MT.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-NC.json b/src/js/admin-ui/public/maps/US-NC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-NC.json rename to src/js/admin-ui/public/maps/US-NC.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-ND.json b/src/js/admin-ui/public/maps/US-ND.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-ND.json rename to src/js/admin-ui/public/maps/US-ND.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-NE.json b/src/js/admin-ui/public/maps/US-NE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-NE.json rename to src/js/admin-ui/public/maps/US-NE.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-NH.json b/src/js/admin-ui/public/maps/US-NH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-NH.json rename to src/js/admin-ui/public/maps/US-NH.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-NJ.json b/src/js/admin-ui/public/maps/US-NJ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-NJ.json rename to src/js/admin-ui/public/maps/US-NJ.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-NM.json b/src/js/admin-ui/public/maps/US-NM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-NM.json rename to src/js/admin-ui/public/maps/US-NM.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-NV.json b/src/js/admin-ui/public/maps/US-NV.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-NV.json rename to src/js/admin-ui/public/maps/US-NV.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-NY.json b/src/js/admin-ui/public/maps/US-NY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-NY.json rename to src/js/admin-ui/public/maps/US-NY.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-OH.json b/src/js/admin-ui/public/maps/US-OH.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-OH.json rename to src/js/admin-ui/public/maps/US-OH.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-OK.json b/src/js/admin-ui/public/maps/US-OK.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-OK.json rename to src/js/admin-ui/public/maps/US-OK.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-OR.json b/src/js/admin-ui/public/maps/US-OR.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-OR.json rename to src/js/admin-ui/public/maps/US-OR.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-PA.json b/src/js/admin-ui/public/maps/US-PA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-PA.json rename to src/js/admin-ui/public/maps/US-PA.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-RI.json b/src/js/admin-ui/public/maps/US-RI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-RI.json rename to src/js/admin-ui/public/maps/US-RI.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-SC.json b/src/js/admin-ui/public/maps/US-SC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-SC.json rename to src/js/admin-ui/public/maps/US-SC.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-SD.json b/src/js/admin-ui/public/maps/US-SD.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-SD.json rename to src/js/admin-ui/public/maps/US-SD.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-TN.json b/src/js/admin-ui/public/maps/US-TN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-TN.json rename to src/js/admin-ui/public/maps/US-TN.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-TX.json b/src/js/admin-ui/public/maps/US-TX.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-TX.json rename to src/js/admin-ui/public/maps/US-TX.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-UT.json b/src/js/admin-ui/public/maps/US-UT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-UT.json rename to src/js/admin-ui/public/maps/US-UT.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-VA.json b/src/js/admin-ui/public/maps/US-VA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-VA.json rename to src/js/admin-ui/public/maps/US-VA.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-VT.json b/src/js/admin-ui/public/maps/US-VT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-VT.json rename to src/js/admin-ui/public/maps/US-VT.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-WA.json b/src/js/admin-ui/public/maps/US-WA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-WA.json rename to src/js/admin-ui/public/maps/US-WA.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-WI.json b/src/js/admin-ui/public/maps/US-WI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-WI.json rename to src/js/admin-ui/public/maps/US-WI.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-WV.json b/src/js/admin-ui/public/maps/US-WV.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-WV.json rename to src/js/admin-ui/public/maps/US-WV.json diff --git a/src/api-umbrella/admin-ui/public/maps/US-WY.json b/src/js/admin-ui/public/maps/US-WY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US-WY.json rename to src/js/admin-ui/public/maps/US-WY.json diff --git a/src/api-umbrella/admin-ui/public/maps/US.json b/src/js/admin-ui/public/maps/US.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/US.json rename to src/js/admin-ui/public/maps/US.json diff --git a/src/api-umbrella/admin-ui/public/maps/UY.json b/src/js/admin-ui/public/maps/UY.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/UY.json rename to src/js/admin-ui/public/maps/UY.json diff --git a/src/api-umbrella/admin-ui/public/maps/UZ.json b/src/js/admin-ui/public/maps/UZ.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/UZ.json rename to src/js/admin-ui/public/maps/UZ.json diff --git a/src/api-umbrella/admin-ui/public/maps/VA.json b/src/js/admin-ui/public/maps/VA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/VA.json rename to src/js/admin-ui/public/maps/VA.json diff --git a/src/api-umbrella/admin-ui/public/maps/VC.json b/src/js/admin-ui/public/maps/VC.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/VC.json rename to src/js/admin-ui/public/maps/VC.json diff --git a/src/api-umbrella/admin-ui/public/maps/VE.json b/src/js/admin-ui/public/maps/VE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/VE.json rename to src/js/admin-ui/public/maps/VE.json diff --git a/src/api-umbrella/admin-ui/public/maps/VG.json b/src/js/admin-ui/public/maps/VG.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/VG.json rename to src/js/admin-ui/public/maps/VG.json diff --git a/src/api-umbrella/admin-ui/public/maps/VI.json b/src/js/admin-ui/public/maps/VI.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/VI.json rename to src/js/admin-ui/public/maps/VI.json diff --git a/src/api-umbrella/admin-ui/public/maps/VN.json b/src/js/admin-ui/public/maps/VN.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/VN.json rename to src/js/admin-ui/public/maps/VN.json diff --git a/src/api-umbrella/admin-ui/public/maps/VU.json b/src/js/admin-ui/public/maps/VU.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/VU.json rename to src/js/admin-ui/public/maps/VU.json diff --git a/src/api-umbrella/admin-ui/public/maps/WF.json b/src/js/admin-ui/public/maps/WF.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/WF.json rename to src/js/admin-ui/public/maps/WF.json diff --git a/src/api-umbrella/admin-ui/public/maps/WS.json b/src/js/admin-ui/public/maps/WS.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/WS.json rename to src/js/admin-ui/public/maps/WS.json diff --git a/src/api-umbrella/admin-ui/public/maps/YE.json b/src/js/admin-ui/public/maps/YE.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/YE.json rename to src/js/admin-ui/public/maps/YE.json diff --git a/src/api-umbrella/admin-ui/public/maps/YT.json b/src/js/admin-ui/public/maps/YT.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/YT.json rename to src/js/admin-ui/public/maps/YT.json diff --git a/src/api-umbrella/admin-ui/public/maps/ZA.json b/src/js/admin-ui/public/maps/ZA.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ZA.json rename to src/js/admin-ui/public/maps/ZA.json diff --git a/src/api-umbrella/admin-ui/public/maps/ZM.json b/src/js/admin-ui/public/maps/ZM.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ZM.json rename to src/js/admin-ui/public/maps/ZM.json diff --git a/src/api-umbrella/admin-ui/public/maps/ZW.json b/src/js/admin-ui/public/maps/ZW.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/ZW.json rename to src/js/admin-ui/public/maps/ZW.json diff --git a/src/api-umbrella/admin-ui/public/maps/world.json b/src/js/admin-ui/public/maps/world.json similarity index 100% rename from src/api-umbrella/admin-ui/public/maps/world.json rename to src/js/admin-ui/public/maps/world.json diff --git a/src/api-umbrella/admin-ui/testem.js b/src/js/admin-ui/testem.js similarity index 100% rename from src/api-umbrella/admin-ui/testem.js rename to src/js/admin-ui/testem.js diff --git a/src/api-umbrella/admin-ui/tests/helpers/.gitkeep b/src/js/admin-ui/tests/helpers/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/tests/helpers/.gitkeep rename to src/js/admin-ui/tests/helpers/.gitkeep diff --git a/src/api-umbrella/admin-ui/tests/index.html b/src/js/admin-ui/tests/index.html similarity index 100% rename from src/api-umbrella/admin-ui/tests/index.html rename to src/js/admin-ui/tests/index.html diff --git a/src/api-umbrella/admin-ui/tests/integration/.gitkeep b/src/js/admin-ui/tests/integration/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/tests/integration/.gitkeep rename to src/js/admin-ui/tests/integration/.gitkeep diff --git a/src/api-umbrella/admin-ui/tests/test-helper.js b/src/js/admin-ui/tests/test-helper.js similarity index 100% rename from src/api-umbrella/admin-ui/tests/test-helper.js rename to src/js/admin-ui/tests/test-helper.js diff --git a/src/api-umbrella/admin-ui/tests/unit/.gitkeep b/src/js/admin-ui/tests/unit/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/tests/unit/.gitkeep rename to src/js/admin-ui/tests/unit/.gitkeep diff --git a/src/api-umbrella/admin-ui/tests/unit/services/busy-test.js b/src/js/admin-ui/tests/unit/services/busy-test.js similarity index 100% rename from src/api-umbrella/admin-ui/tests/unit/services/busy-test.js rename to src/js/admin-ui/tests/unit/services/busy-test.js diff --git a/src/api-umbrella/admin-ui/vendor/.gitkeep b/src/js/admin-ui/vendor/.gitkeep similarity index 100% rename from src/api-umbrella/admin-ui/vendor/.gitkeep rename to src/js/admin-ui/vendor/.gitkeep diff --git a/src/api-umbrella/admin-ui/yarn.lock b/src/js/admin-ui/yarn.lock similarity index 100% rename from src/api-umbrella/admin-ui/yarn.lock rename to src/js/admin-ui/yarn.lock diff --git a/src/api-umbrella/auto-ssl/hooks/init.lua b/src/lua/auto-ssl/hooks/init.lua similarity index 100% rename from src/api-umbrella/auto-ssl/hooks/init.lua rename to src/lua/auto-ssl/hooks/init.lua diff --git a/src/api-umbrella/auto-ssl/hooks/init_worker.lua b/src/lua/auto-ssl/hooks/init_worker.lua similarity index 100% rename from src/api-umbrella/auto-ssl/hooks/init_worker.lua rename to src/lua/auto-ssl/hooks/init_worker.lua diff --git a/src/api-umbrella/auto-ssl/hooks/ssl_certificate.lua b/src/lua/auto-ssl/hooks/ssl_certificate.lua similarity index 100% rename from src/api-umbrella/auto-ssl/hooks/ssl_certificate.lua rename to src/lua/auto-ssl/hooks/ssl_certificate.lua diff --git a/src/api-umbrella/auto-ssl/storage_adapters/mongodb.lua b/src/lua/auto-ssl/storage_adapters/mongodb.lua similarity index 100% rename from src/api-umbrella/auto-ssl/storage_adapters/mongodb.lua rename to src/lua/auto-ssl/storage_adapters/mongodb.lua diff --git a/src/api-umbrella/cli.lua b/src/lua/cli.lua similarity index 100% rename from src/api-umbrella/cli.lua rename to src/lua/cli.lua diff --git a/src/api-umbrella/cli/health.lua b/src/lua/cli/health.lua similarity index 99% rename from src/api-umbrella/cli/health.lua rename to src/lua/cli/health.lua index a8943f7ef..f59aa7a6f 100644 --- a/src/api-umbrella/cli/health.lua +++ b/src/lua/cli/health.lua @@ -14,6 +14,7 @@ local function health(options, config) local httpc = http.new() local res, http_err = httpc:request_uri(url) + print(url) if not res then return status, exit_code, http_err elseif res.headers["Content-Type"] ~= "application/json" then diff --git a/src/api-umbrella/cli/processes.lua b/src/lua/cli/processes.lua similarity index 100% rename from src/api-umbrella/cli/processes.lua rename to src/lua/cli/processes.lua diff --git a/src/api-umbrella/cli/read_config.lua b/src/lua/cli/read_config.lua similarity index 100% rename from src/api-umbrella/cli/read_config.lua rename to src/lua/cli/read_config.lua diff --git a/src/api-umbrella/cli/reload.lua b/src/lua/cli/reload.lua similarity index 100% rename from src/api-umbrella/cli/reload.lua rename to src/lua/cli/reload.lua diff --git a/src/api-umbrella/cli/reopen_logs.lua b/src/lua/cli/reopen_logs.lua similarity index 100% rename from src/api-umbrella/cli/reopen_logs.lua rename to src/lua/cli/reopen_logs.lua diff --git a/src/api-umbrella/cli/run.lua b/src/lua/cli/run.lua similarity index 100% rename from src/api-umbrella/cli/run.lua rename to src/lua/cli/run.lua diff --git a/src/api-umbrella/cli/setup.lua b/src/lua/cli/setup.lua similarity index 89% rename from src/api-umbrella/cli/setup.lua rename to src/lua/cli/setup.lua index 9fef74818..4df8e5297 100644 --- a/src/api-umbrella/cli/setup.lua +++ b/src/lua/cli/setup.lua @@ -221,24 +221,24 @@ local function write_templates() end end -local function write_static_site_key() - local file_paths = { - path.join(config["static_site"]["build_dir"], "contact/index.html"), - path.join(config["static_site"]["build_dir"], "signup/index.html"), - } - for _, file_path in ipairs(file_paths) do - if not path.exists(file_path) then - print("File does not exist: " .. file_path) - os.exit(1) - end - - local content = file.read(file_path) - local new_content, replacements = string.gsub(content, "apiKey: '.-'", "apiKey: '" .. config["static_site"]["api_key"] .. "'") - if replacements > 0 then - file.write(file_path, new_content) - end - end -end +--local function write_static_site_key() +-- local file_paths = { +-- path.join(config["static_site"]["build_dir"], "contact/index.html"), +-- path.join(config["static_site"]["build_dir"], "signup/index.html"), +-- } +-- for _, file_path in ipairs(file_paths) do +-- if not path.exists(file_path) then +-- print("File does not exist: " .. file_path) +-- os.exit(1) +-- end +-- +-- local content = file.read(file_path) +-- local new_content, replacements = string.gsub(content, "apiKey: '.-'", "apiKey: '" .. config["static_site"]["api_key"] .. "'") +-- if replacements > 0 then +-- file.write(file_path, new_content) +-- end +-- end +--end local function set_permissions() chmod(config["tmp_dir"], tonumber("1777", 8)) @@ -255,14 +255,11 @@ local function set_permissions() if config["nginx"]["geoip"] == "on" then chown(path.join(config["db_dir"], "geoip"), nil, group) end - chown(path.join(config["etc_dir"], "elasticsearch"), nil, group) chown(path.join(config["etc_dir"], "nginx"), nil, group) chown(path.join(config["etc_dir"], "perp"), nil, group) - chown(path.join(config["etc_dir"], "trafficserver"), nil, group) if config["app_env"] == "test" then chown(path.join(config["etc_dir"], "test-env"), nil, group) - chown(path.join(config["etc_dir"], "test-env/mongo-orchestration"), nil, group) chown(path.join(config["etc_dir"], "test-env/nginx"), nil, group) chown(path.join(config["etc_dir"], "test-env/openldap"), nil, group) chown(path.join(config["etc_dir"], "test-env/unbound"), nil, group) @@ -284,12 +281,6 @@ local function activate_services() available_services = invert_table(available_services) local active_services = {} - if config["_service_general_db_enabled?"] then - active_services["mongod"] = 1 - end - if config["_service_log_db_enabled?"] then - active_services["elasticsearch"] = 1 - end if config["_service_elasticsearch_aws_signing_proxy_enabled?"] then active_services["elasticsearch-aws-signing-proxy"] = 1 end @@ -297,21 +288,11 @@ local function activate_services() if config["nginx"]["geoip"] == "on" then active_services["geoip-auto-updater"] = 1 end - active_services["mora"] = 1 active_services["nginx"] = 1 - active_services["rsyslog"] = 1 - active_services["trafficserver"] = 1 end if config["_service_auto_ssl_enabled?"] then active_services["nginx-auto-ssl"] = 1 end - if config["_service_web_enabled?"] then - active_services["web-delayed-job"] = 1 - active_services["web-puma"] = 1 - end - if config["app_env"] == "development" then - active_services["dev-env-ember-server"] = 1 - end if config["app_env"] == "test" then active_services["test-env-mailhog"] = 1 active_services["test-env-mongo-orchestration"] = 1 @@ -387,7 +368,7 @@ return function() generate_auto_ssl_fallback_cert() ensure_geoip_db() write_templates() - write_static_site_key() + --write_static_site_key() set_permissions() activate_services() diff --git a/src/api-umbrella/cli/status.lua b/src/lua/cli/status.lua similarity index 100% rename from src/api-umbrella/cli/status.lua rename to src/lua/cli/status.lua diff --git a/src/api-umbrella/cli/stop.lua b/src/lua/cli/stop.lua similarity index 100% rename from src/api-umbrella/cli/stop.lua rename to src/lua/cli/stop.lua diff --git a/src/conf.lua b/src/lua/conf.lua similarity index 100% rename from src/conf.lua rename to src/lua/conf.lua diff --git a/src/api-umbrella/elasticsearch-aws-signing-proxy/init.lua b/src/lua/elasticsearch-aws-signing-proxy/init.lua similarity index 100% rename from src/api-umbrella/elasticsearch-aws-signing-proxy/init.lua rename to src/lua/elasticsearch-aws-signing-proxy/init.lua diff --git a/src/api-umbrella/elasticsearch-aws-signing-proxy/proxy.lua b/src/lua/elasticsearch-aws-signing-proxy/proxy.lua similarity index 100% rename from src/api-umbrella/elasticsearch-aws-signing-proxy/proxy.lua rename to src/lua/elasticsearch-aws-signing-proxy/proxy.lua diff --git a/src/api-umbrella/http-api/health.lua b/src/lua/http-api/health.lua similarity index 99% rename from src/api-umbrella/http-api/health.lua rename to src/lua/http-api/health.lua index c289a5b7b..a6adcfa84 100644 --- a/src/api-umbrella/http-api/health.lua +++ b/src/lua/http-api/health.lua @@ -13,8 +13,6 @@ local function status_response(quick) }, } - - -- Check to see if the APIs have been loaded. if ngx.shared.active_config:get("db_config_last_fetched_at") then response["details"]["apis_config"] = "green" diff --git a/src/api-umbrella/http-api/state.lua b/src/lua/http-api/state.lua similarity index 100% rename from src/api-umbrella/http-api/state.lua rename to src/lua/http-api/state.lua diff --git a/src/api-umbrella/proxy/distributed_rate_limit_queue.lua b/src/lua/proxy/distributed_rate_limit_queue.lua similarity index 100% rename from src/api-umbrella/proxy/distributed_rate_limit_queue.lua rename to src/lua/proxy/distributed_rate_limit_queue.lua diff --git a/src/api-umbrella/proxy/elasticsearch_templates_data.lua b/src/lua/proxy/elasticsearch_templates_data.lua similarity index 100% rename from src/api-umbrella/proxy/elasticsearch_templates_data.lua rename to src/lua/proxy/elasticsearch_templates_data.lua diff --git a/src/api-umbrella/proxy/error_handler.lua b/src/lua/proxy/error_handler.lua similarity index 100% rename from src/api-umbrella/proxy/error_handler.lua rename to src/lua/proxy/error_handler.lua diff --git a/src/api-umbrella/proxy/hooks/access.lua b/src/lua/proxy/hooks/access.lua similarity index 100% rename from src/api-umbrella/proxy/hooks/access.lua rename to src/lua/proxy/hooks/access.lua diff --git a/src/api-umbrella/proxy/hooks/header_filter.lua b/src/lua/proxy/hooks/header_filter.lua similarity index 100% rename from src/api-umbrella/proxy/hooks/header_filter.lua rename to src/lua/proxy/hooks/header_filter.lua diff --git a/src/api-umbrella/proxy/hooks/init.lua b/src/lua/proxy/hooks/init.lua similarity index 100% rename from src/api-umbrella/proxy/hooks/init.lua rename to src/lua/proxy/hooks/init.lua diff --git a/src/api-umbrella/proxy/hooks/init_preload_modules.lua b/src/lua/proxy/hooks/init_preload_modules.lua similarity index 100% rename from src/api-umbrella/proxy/hooks/init_preload_modules.lua rename to src/lua/proxy/hooks/init_preload_modules.lua diff --git a/src/api-umbrella/proxy/hooks/init_worker.lua b/src/lua/proxy/hooks/init_worker.lua similarity index 100% rename from src/api-umbrella/proxy/hooks/init_worker.lua rename to src/lua/proxy/hooks/init_worker.lua diff --git a/src/api-umbrella/proxy/hooks/log_initial_proxy.lua b/src/lua/proxy/hooks/log_initial_proxy.lua similarity index 100% rename from src/api-umbrella/proxy/hooks/log_initial_proxy.lua rename to src/lua/proxy/hooks/log_initial_proxy.lua diff --git a/src/api-umbrella/proxy/hooks/rewrite.lua b/src/lua/proxy/hooks/rewrite.lua similarity index 100% rename from src/api-umbrella/proxy/hooks/rewrite.lua rename to src/lua/proxy/hooks/rewrite.lua diff --git a/src/api-umbrella/proxy/hooks/set_x_api_umbrella_request_id.lua b/src/lua/proxy/hooks/set_x_api_umbrella_request_id.lua similarity index 100% rename from src/api-umbrella/proxy/hooks/set_x_api_umbrella_request_id.lua rename to src/lua/proxy/hooks/set_x_api_umbrella_request_id.lua diff --git a/src/api-umbrella/proxy/jobs/distributed_rate_limit_puller.lua b/src/lua/proxy/jobs/distributed_rate_limit_puller.lua similarity index 100% rename from src/api-umbrella/proxy/jobs/distributed_rate_limit_puller.lua rename to src/lua/proxy/jobs/distributed_rate_limit_puller.lua diff --git a/src/api-umbrella/proxy/jobs/distributed_rate_limit_pusher.lua b/src/lua/proxy/jobs/distributed_rate_limit_pusher.lua similarity index 100% rename from src/api-umbrella/proxy/jobs/distributed_rate_limit_pusher.lua rename to src/lua/proxy/jobs/distributed_rate_limit_pusher.lua diff --git a/src/api-umbrella/proxy/jobs/elasticsearch_setup.lua b/src/lua/proxy/jobs/elasticsearch_setup.lua similarity index 100% rename from src/api-umbrella/proxy/jobs/elasticsearch_setup.lua rename to src/lua/proxy/jobs/elasticsearch_setup.lua diff --git a/src/api-umbrella/proxy/jobs/load_api_users.lua b/src/lua/proxy/jobs/load_api_users.lua similarity index 100% rename from src/api-umbrella/proxy/jobs/load_api_users.lua rename to src/lua/proxy/jobs/load_api_users.lua diff --git a/src/api-umbrella/proxy/jobs/load_db_config.lua b/src/lua/proxy/jobs/load_db_config.lua similarity index 100% rename from src/api-umbrella/proxy/jobs/load_db_config.lua rename to src/lua/proxy/jobs/load_db_config.lua diff --git a/src/api-umbrella/proxy/log_utils.lua b/src/lua/proxy/log_utils.lua similarity index 100% rename from src/api-umbrella/proxy/log_utils.lua rename to src/lua/proxy/log_utils.lua diff --git a/src/api-umbrella/proxy/middleware/api_key_validator.lua b/src/lua/proxy/middleware/api_key_validator.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/api_key_validator.lua rename to src/lua/proxy/middleware/api_key_validator.lua diff --git a/src/api-umbrella/proxy/middleware/api_matcher.lua b/src/lua/proxy/middleware/api_matcher.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/api_matcher.lua rename to src/lua/proxy/middleware/api_matcher.lua diff --git a/src/api-umbrella/proxy/middleware/api_settings.lua b/src/lua/proxy/middleware/api_settings.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/api_settings.lua rename to src/lua/proxy/middleware/api_settings.lua diff --git a/src/api-umbrella/proxy/middleware/https_transition_user_validator.lua b/src/lua/proxy/middleware/https_transition_user_validator.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/https_transition_user_validator.lua rename to src/lua/proxy/middleware/https_transition_user_validator.lua diff --git a/src/api-umbrella/proxy/middleware/https_validator.lua b/src/lua/proxy/middleware/https_validator.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/https_validator.lua rename to src/lua/proxy/middleware/https_validator.lua diff --git a/src/api-umbrella/proxy/middleware/ip_validator.lua b/src/lua/proxy/middleware/ip_validator.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/ip_validator.lua rename to src/lua/proxy/middleware/ip_validator.lua diff --git a/src/api-umbrella/proxy/middleware/policy_validator_cb_ishare_auto.lua b/src/lua/proxy/middleware/policy_validator_cb_ishare_auto.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/policy_validator_cb_ishare_auto.lua rename to src/lua/proxy/middleware/policy_validator_cb_ishare_auto.lua diff --git a/src/api-umbrella/proxy/middleware/rate_limit.lua b/src/lua/proxy/middleware/rate_limit.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/rate_limit.lua rename to src/lua/proxy/middleware/rate_limit.lua diff --git a/src/api-umbrella/proxy/middleware/referer_validator.lua b/src/lua/proxy/middleware/referer_validator.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/referer_validator.lua rename to src/lua/proxy/middleware/referer_validator.lua diff --git a/src/api-umbrella/proxy/middleware/resolve_api_key.lua b/src/lua/proxy/middleware/resolve_api_key.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/resolve_api_key.lua rename to src/lua/proxy/middleware/resolve_api_key.lua diff --git a/src/api-umbrella/proxy/middleware/rewrite_request.lua b/src/lua/proxy/middleware/rewrite_request.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/rewrite_request.lua rename to src/lua/proxy/middleware/rewrite_request.lua diff --git a/src/api-umbrella/proxy/middleware/rewrite_response.lua b/src/lua/proxy/middleware/rewrite_response.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/rewrite_response.lua rename to src/lua/proxy/middleware/rewrite_response.lua diff --git a/src/api-umbrella/proxy/middleware/role_validator.lua b/src/lua/proxy/middleware/role_validator.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/role_validator.lua rename to src/lua/proxy/middleware/role_validator.lua diff --git a/src/api-umbrella/proxy/middleware/user_settings.lua b/src/lua/proxy/middleware/user_settings.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/user_settings.lua rename to src/lua/proxy/middleware/user_settings.lua diff --git a/src/api-umbrella/proxy/middleware/website_matcher.lua b/src/lua/proxy/middleware/website_matcher.lua similarity index 100% rename from src/api-umbrella/proxy/middleware/website_matcher.lua rename to src/lua/proxy/middleware/website_matcher.lua diff --git a/src/api-umbrella/proxy/models/active_config.lua b/src/lua/proxy/models/active_config.lua similarity index 100% rename from src/api-umbrella/proxy/models/active_config.lua rename to src/lua/proxy/models/active_config.lua diff --git a/src/api-umbrella/proxy/models/db_config.lua b/src/lua/proxy/models/db_config.lua similarity index 100% rename from src/api-umbrella/proxy/models/db_config.lua rename to src/lua/proxy/models/db_config.lua diff --git a/src/api-umbrella/proxy/models/file_config.lua b/src/lua/proxy/models/file_config.lua similarity index 100% rename from src/api-umbrella/proxy/models/file_config.lua rename to src/lua/proxy/models/file_config.lua diff --git a/src/api-umbrella/proxy/startup/seed_database.lua b/src/lua/proxy/startup/seed_database.lua similarity index 100% rename from src/api-umbrella/proxy/startup/seed_database.lua rename to src/lua/proxy/startup/seed_database.lua diff --git a/src/api-umbrella/proxy/user_agent_parser.lua b/src/lua/proxy/user_agent_parser.lua similarity index 100% rename from src/api-umbrella/proxy/user_agent_parser.lua rename to src/lua/proxy/user_agent_parser.lua diff --git a/src/api-umbrella/proxy/user_agent_parser_data.lua b/src/lua/proxy/user_agent_parser_data.lua similarity index 100% rename from src/api-umbrella/proxy/user_agent_parser_data.lua rename to src/lua/proxy/user_agent_parser_data.lua diff --git a/src/api-umbrella/proxy/user_store.lua b/src/lua/proxy/user_store.lua similarity index 100% rename from src/api-umbrella/proxy/user_store.lua rename to src/lua/proxy/user_store.lua diff --git a/src/api-umbrella/proxy/utils.lua b/src/lua/proxy/utils.lua similarity index 100% rename from src/api-umbrella/proxy/utils.lua rename to src/lua/proxy/utils.lua diff --git a/src/api-umbrella/utils/admin.lua b/src/lua/utils/admin.lua similarity index 100% rename from src/api-umbrella/utils/admin.lua rename to src/lua/utils/admin.lua diff --git a/src/api-umbrella/utils/array_includes.lua b/src/lua/utils/array_includes.lua similarity index 100% rename from src/api-umbrella/utils/array_includes.lua rename to src/lua/utils/array_includes.lua diff --git a/src/api-umbrella/utils/array_last.lua b/src/lua/utils/array_last.lua similarity index 100% rename from src/api-umbrella/utils/array_last.lua rename to src/lua/utils/array_last.lua diff --git a/src/api-umbrella/utils/aws_signing_v4.lua b/src/lua/utils/aws_signing_v4.lua similarity index 100% rename from src/api-umbrella/utils/aws_signing_v4.lua rename to src/lua/utils/aws_signing_v4.lua diff --git a/src/api-umbrella/utils/deep_defaults.lua b/src/lua/utils/deep_defaults.lua similarity index 100% rename from src/api-umbrella/utils/deep_defaults.lua rename to src/lua/utils/deep_defaults.lua diff --git a/src/api-umbrella/utils/deep_merge_overwrite_arrays.lua b/src/lua/utils/deep_merge_overwrite_arrays.lua similarity index 100% rename from src/api-umbrella/utils/deep_merge_overwrite_arrays.lua rename to src/lua/utils/deep_merge_overwrite_arrays.lua diff --git a/src/api-umbrella/utils/elasticsearch.lua b/src/lua/utils/elasticsearch.lua similarity index 100% rename from src/api-umbrella/utils/elasticsearch.lua rename to src/lua/utils/elasticsearch.lua diff --git a/src/api-umbrella/utils/escape_regex.lua b/src/lua/utils/escape_regex.lua similarity index 100% rename from src/api-umbrella/utils/escape_regex.lua rename to src/lua/utils/escape_regex.lua diff --git a/src/api-umbrella/utils/escape_uri_non_ascii.lua b/src/lua/utils/escape_uri_non_ascii.lua similarity index 100% rename from src/api-umbrella/utils/escape_uri_non_ascii.lua rename to src/lua/utils/escape_uri_non_ascii.lua diff --git a/src/api-umbrella/utils/flatten_headers.lua b/src/lua/utils/flatten_headers.lua similarity index 100% rename from src/api-umbrella/utils/flatten_headers.lua rename to src/lua/utils/flatten_headers.lua diff --git a/src/api-umbrella/utils/get_api_umbrella_version.lua b/src/lua/utils/get_api_umbrella_version.lua similarity index 100% rename from src/api-umbrella/utils/get_api_umbrella_version.lua rename to src/lua/utils/get_api_umbrella_version.lua diff --git a/src/api-umbrella/utils/host_normalize.lua b/src/lua/utils/host_normalize.lua similarity index 100% rename from src/api-umbrella/utils/host_normalize.lua rename to src/lua/utils/host_normalize.lua diff --git a/src/api-umbrella/utils/httpsify_current_url.lua b/src/lua/utils/httpsify_current_url.lua similarity index 100% rename from src/api-umbrella/utils/httpsify_current_url.lua rename to src/lua/utils/httpsify_current_url.lua diff --git a/src/api-umbrella/utils/idp.lua b/src/lua/utils/idp.lua similarity index 100% rename from src/api-umbrella/utils/idp.lua rename to src/lua/utils/idp.lua diff --git a/src/api-umbrella/utils/interval_lock.lua b/src/lua/utils/interval_lock.lua similarity index 100% rename from src/api-umbrella/utils/interval_lock.lua rename to src/lua/utils/interval_lock.lua diff --git a/src/api-umbrella/utils/invert_table.lua b/src/lua/utils/invert_table.lua similarity index 100% rename from src/api-umbrella/utils/invert_table.lua rename to src/lua/utils/invert_table.lua diff --git a/src/api-umbrella/utils/is_array.lua b/src/lua/utils/is_array.lua similarity index 100% rename from src/api-umbrella/utils/is_array.lua rename to src/lua/utils/is_array.lua diff --git a/src/api-umbrella/utils/is_hash.lua b/src/lua/utils/is_hash.lua similarity index 100% rename from src/api-umbrella/utils/is_hash.lua rename to src/lua/utils/is_hash.lua diff --git a/src/api-umbrella/utils/json_encode.lua b/src/lua/utils/json_encode.lua similarity index 100% rename from src/api-umbrella/utils/json_encode.lua rename to src/lua/utils/json_encode.lua diff --git a/src/api-umbrella/utils/matches_hostname.lua b/src/lua/utils/matches_hostname.lua similarity index 100% rename from src/api-umbrella/utils/matches_hostname.lua rename to src/lua/utils/matches_hostname.lua diff --git a/src/api-umbrella/utils/mongo.lua b/src/lua/utils/mongo.lua similarity index 100% rename from src/api-umbrella/utils/mongo.lua rename to src/lua/utils/mongo.lua diff --git a/src/api-umbrella/utils/mustache_unescape.lua b/src/lua/utils/mustache_unescape.lua similarity index 100% rename from src/api-umbrella/utils/mustache_unescape.lua rename to src/lua/utils/mustache_unescape.lua diff --git a/src/api-umbrella/utils/nillify_json_nulls.lua b/src/lua/utils/nillify_json_nulls.lua similarity index 100% rename from src/api-umbrella/utils/nillify_json_nulls.lua rename to src/lua/utils/nillify_json_nulls.lua diff --git a/src/api-umbrella/utils/nillify_yaml_nulls.lua b/src/lua/utils/nillify_yaml_nulls.lua similarity index 100% rename from src/api-umbrella/utils/nillify_yaml_nulls.lua rename to src/lua/utils/nillify_yaml_nulls.lua diff --git a/src/api-umbrella/utils/packed_shared_dict.lua b/src/lua/utils/packed_shared_dict.lua similarity index 100% rename from src/api-umbrella/utils/packed_shared_dict.lua rename to src/lua/utils/packed_shared_dict.lua diff --git a/src/api-umbrella/utils/random_num.lua b/src/lua/utils/random_num.lua similarity index 100% rename from src/api-umbrella/utils/random_num.lua rename to src/lua/utils/random_num.lua diff --git a/src/api-umbrella/utils/random_seed.lua b/src/lua/utils/random_seed.lua similarity index 100% rename from src/api-umbrella/utils/random_seed.lua rename to src/lua/utils/random_seed.lua diff --git a/src/api-umbrella/utils/random_token.lua b/src/lua/utils/random_token.lua similarity index 100% rename from src/api-umbrella/utils/random_token.lua rename to src/lua/utils/random_token.lua diff --git a/src/api-umbrella/utils/redirect_matches_to_https.lua b/src/lua/utils/redirect_matches_to_https.lua similarity index 100% rename from src/api-umbrella/utils/redirect_matches_to_https.lua rename to src/lua/utils/redirect_matches_to_https.lua diff --git a/src/api-umbrella/utils/round.lua b/src/lua/utils/round.lua similarity index 100% rename from src/api-umbrella/utils/round.lua rename to src/lua/utils/round.lua diff --git a/src/api-umbrella/utils/run_command.lua b/src/lua/utils/run_command.lua similarity index 100% rename from src/api-umbrella/utils/run_command.lua rename to src/lua/utils/run_command.lua diff --git a/src/api-umbrella/utils/xpcall_error_handler.lua b/src/lua/utils/xpcall_error_handler.lua similarity index 100% rename from src/api-umbrella/utils/xpcall_error_handler.lua rename to src/lua/utils/xpcall_error_handler.lua diff --git a/src/api-umbrella/web-app/.gitignore b/src/ruby/web-app/.gitignore similarity index 100% rename from src/api-umbrella/web-app/.gitignore rename to src/ruby/web-app/.gitignore diff --git a/src/api-umbrella/web-app/.gitmodules b/src/ruby/web-app/.gitmodules similarity index 100% rename from src/api-umbrella/web-app/.gitmodules rename to src/ruby/web-app/.gitmodules diff --git a/src/api-umbrella/web-app/.rspec b/src/ruby/web-app/.rspec similarity index 100% rename from src/api-umbrella/web-app/.rspec rename to src/ruby/web-app/.rspec diff --git a/src/api-umbrella/web-app/.yardopts b/src/ruby/web-app/.yardopts similarity index 100% rename from src/api-umbrella/web-app/.yardopts rename to src/ruby/web-app/.yardopts diff --git a/src/api-umbrella/web-app/Gemfile b/src/ruby/web-app/Gemfile similarity index 100% rename from src/api-umbrella/web-app/Gemfile rename to src/ruby/web-app/Gemfile diff --git a/src/api-umbrella/web-app/Gemfile.lock b/src/ruby/web-app/Gemfile.lock similarity index 100% rename from src/api-umbrella/web-app/Gemfile.lock rename to src/ruby/web-app/Gemfile.lock diff --git a/src/api-umbrella/web-app/LICENSE.txt b/src/ruby/web-app/LICENSE.txt similarity index 100% rename from src/api-umbrella/web-app/LICENSE.txt rename to src/ruby/web-app/LICENSE.txt diff --git a/src/api-umbrella/web-app/README.md b/src/ruby/web-app/README.md similarity index 100% rename from src/api-umbrella/web-app/README.md rename to src/ruby/web-app/README.md diff --git a/src/api-umbrella/web-app/Rakefile b/src/ruby/web-app/Rakefile similarity index 100% rename from src/api-umbrella/web-app/Rakefile rename to src/ruby/web-app/Rakefile diff --git a/src/api-umbrella/web-app/app/assets/stylesheets/admin/login.scss b/src/ruby/web-app/app/assets/stylesheets/admin/login.scss similarity index 100% rename from src/api-umbrella/web-app/app/assets/stylesheets/admin/login.scss rename to src/ruby/web-app/app/assets/stylesheets/admin/login.scss diff --git a/src/api-umbrella/web-app/app/controllers/admin/admins/omniauth_callbacks_controller.rb b/src/ruby/web-app/app/controllers/admin/admins/omniauth_callbacks_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/admin/admins/omniauth_callbacks_controller.rb rename to src/ruby/web-app/app/controllers/admin/admins/omniauth_callbacks_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/admin/admins/omniauth_custom_forms_controller.rb b/src/ruby/web-app/app/controllers/admin/admins/omniauth_custom_forms_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/admin/admins/omniauth_custom_forms_controller.rb rename to src/ruby/web-app/app/controllers/admin/admins/omniauth_custom_forms_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/admin/base_controller.rb b/src/ruby/web-app/app/controllers/admin/base_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/admin/base_controller.rb rename to src/ruby/web-app/app/controllers/admin/base_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/admin/registrations_controller.rb b/src/ruby/web-app/app/controllers/admin/registrations_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/admin/registrations_controller.rb rename to src/ruby/web-app/app/controllers/admin/registrations_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/admin/sessions_controller.rb b/src/ruby/web-app/app/controllers/admin/sessions_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/admin/sessions_controller.rb rename to src/ruby/web-app/app/controllers/admin/sessions_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/admin/stats_controller.rb b/src/ruby/web-app/app/controllers/admin/stats_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/admin/stats_controller.rb rename to src/ruby/web-app/app/controllers/admin/stats_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/api_users_controller.rb b/src/ruby/web-app/app/controllers/api/api_users_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/api_users_controller.rb rename to src/ruby/web-app/app/controllers/api/api_users_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/health_checks_controller.rb b/src/ruby/web-app/app/controllers/api/health_checks_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/health_checks_controller.rb rename to src/ruby/web-app/app/controllers/api/health_checks_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v0/analytics_controller.rb b/src/ruby/web-app/app/controllers/api/v0/analytics_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v0/analytics_controller.rb rename to src/ruby/web-app/app/controllers/api/v0/analytics_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/admin_groups_controller.rb b/src/ruby/web-app/app/controllers/api/v1/admin_groups_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/admin_groups_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/admin_groups_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/admin_permissions_controller.rb b/src/ruby/web-app/app/controllers/api/v1/admin_permissions_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/admin_permissions_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/admin_permissions_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/admins_controller.rb b/src/ruby/web-app/app/controllers/api/v1/admins_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/admins_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/admins_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/analytics_controller.rb b/src/ruby/web-app/app/controllers/api/v1/analytics_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/analytics_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/analytics_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/api_scopes_controller.rb b/src/ruby/web-app/app/controllers/api/v1/api_scopes_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/api_scopes_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/api_scopes_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/apis_controller.rb b/src/ruby/web-app/app/controllers/api/v1/apis_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/apis_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/apis_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/base_controller.rb b/src/ruby/web-app/app/controllers/api/v1/base_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/base_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/base_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/config_controller.rb b/src/ruby/web-app/app/controllers/api/v1/config_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/config_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/config_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/contacts_controller.rb b/src/ruby/web-app/app/controllers/api/v1/contacts_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/contacts_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/contacts_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/idps_controller.rb b/src/ruby/web-app/app/controllers/api/v1/idps_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/idps_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/idps_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/user_roles_controller.rb b/src/ruby/web-app/app/controllers/api/v1/user_roles_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/user_roles_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/user_roles_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/users_controller.rb b/src/ruby/web-app/app/controllers/api/v1/users_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/users_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/users_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/api/v1/website_backends_controller.rb b/src/ruby/web-app/app/controllers/api/v1/website_backends_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/api/v1/website_backends_controller.rb rename to src/ruby/web-app/app/controllers/api/v1/website_backends_controller.rb diff --git a/src/api-umbrella/web-app/app/controllers/application_controller.rb b/src/ruby/web-app/app/controllers/application_controller.rb similarity index 100% rename from src/api-umbrella/web-app/app/controllers/application_controller.rb rename to src/ruby/web-app/app/controllers/application_controller.rb diff --git a/src/api-umbrella/web-app/app/helpers/accounts_helper.rb b/src/ruby/web-app/app/helpers/accounts_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/accounts_helper.rb rename to src/ruby/web-app/app/helpers/accounts_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/admin/admins/omniauth_callbacks_helper.rb b/src/ruby/web-app/app/helpers/admin/admins/omniauth_callbacks_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/admin/admins/omniauth_callbacks_helper.rb rename to src/ruby/web-app/app/helpers/admin/admins/omniauth_callbacks_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/admin/admins_helper.rb b/src/ruby/web-app/app/helpers/admin/admins_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/admin/admins_helper.rb rename to src/ruby/web-app/app/helpers/admin/admins_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/admin/api_users_helper.rb b/src/ruby/web-app/app/helpers/admin/api_users_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/admin/api_users_helper.rb rename to src/ruby/web-app/app/helpers/admin/api_users_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/admin/apis_helper.rb b/src/ruby/web-app/app/helpers/admin/apis_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/admin/apis_helper.rb rename to src/ruby/web-app/app/helpers/admin/apis_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/admin/base_helper.rb b/src/ruby/web-app/app/helpers/admin/base_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/admin/base_helper.rb rename to src/ruby/web-app/app/helpers/admin/base_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/admin/sessions_helper.rb b/src/ruby/web-app/app/helpers/admin/sessions_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/admin/sessions_helper.rb rename to src/ruby/web-app/app/helpers/admin/sessions_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/admin/stats_helper.rb b/src/ruby/web-app/app/helpers/admin/stats_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/admin/stats_helper.rb rename to src/ruby/web-app/app/helpers/admin/stats_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/api/api_users_helper.rb b/src/ruby/web-app/app/helpers/api/api_users_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/api/api_users_helper.rb rename to src/ruby/web-app/app/helpers/api/api_users_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/api/health_checks_helper.rb b/src/ruby/web-app/app/helpers/api/health_checks_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/api/health_checks_helper.rb rename to src/ruby/web-app/app/helpers/api/health_checks_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/api/v1/admins_helper.rb b/src/ruby/web-app/app/helpers/api/v1/admins_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/api/v1/admins_helper.rb rename to src/ruby/web-app/app/helpers/api/v1/admins_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/api/v1/apis_helper.rb b/src/ruby/web-app/app/helpers/api/v1/apis_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/api/v1/apis_helper.rb rename to src/ruby/web-app/app/helpers/api/v1/apis_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/api/v1/base_helper.rb b/src/ruby/web-app/app/helpers/api/v1/base_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/api/v1/base_helper.rb rename to src/ruby/web-app/app/helpers/api/v1/base_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/api/v1/users_helper.rb b/src/ruby/web-app/app/helpers/api/v1/users_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/api/v1/users_helper.rb rename to src/ruby/web-app/app/helpers/api/v1/users_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/application_helper.rb b/src/ruby/web-app/app/helpers/application_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/application_helper.rb rename to src/ruby/web-app/app/helpers/application_helper.rb diff --git a/src/api-umbrella/web-app/app/helpers/datatables_helper.rb b/src/ruby/web-app/app/helpers/datatables_helper.rb similarity index 100% rename from src/api-umbrella/web-app/app/helpers/datatables_helper.rb rename to src/ruby/web-app/app/helpers/datatables_helper.rb diff --git a/src/api-umbrella/web-app/app/mailers/admin_mailer.rb b/src/ruby/web-app/app/mailers/admin_mailer.rb similarity index 100% rename from src/api-umbrella/web-app/app/mailers/admin_mailer.rb rename to src/ruby/web-app/app/mailers/admin_mailer.rb diff --git a/src/api-umbrella/web-app/app/mailers/api_user_mailer.rb b/src/ruby/web-app/app/mailers/api_user_mailer.rb similarity index 100% rename from src/api-umbrella/web-app/app/mailers/api_user_mailer.rb rename to src/ruby/web-app/app/mailers/api_user_mailer.rb diff --git a/src/api-umbrella/web-app/app/mailers/contact_mailer.rb b/src/ruby/web-app/app/mailers/contact_mailer.rb similarity index 100% rename from src/api-umbrella/web-app/app/mailers/contact_mailer.rb rename to src/ruby/web-app/app/mailers/contact_mailer.rb diff --git a/src/api-umbrella/web-app/app/models/admin.rb b/src/ruby/web-app/app/models/admin.rb similarity index 98% rename from src/api-umbrella/web-app/app/models/admin.rb rename to src/ruby/web-app/app/models/admin.rb index 7afde6b90..788364432 100644 --- a/src/api-umbrella/web-app/app/models/admin.rb +++ b/src/ruby/web-app/app/models/admin.rb @@ -97,7 +97,7 @@ def self.sorted end def self.needs_first_account? - ApiUmbrellaConfig[:web][:admin][:auth_strategies][:_enabled][:local] && self.unscoped.count == 0 + ApiUmbrellaConfig[:web][:admin][:auth_strategies][:enabled].include?("local") && self.unscoped.count == 0 end def group_names diff --git a/src/api-umbrella/web-app/app/models/admin_group.rb b/src/ruby/web-app/app/models/admin_group.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/admin_group.rb rename to src/ruby/web-app/app/models/admin_group.rb diff --git a/src/api-umbrella/web-app/app/models/admin_permission.rb b/src/ruby/web-app/app/models/admin_permission.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/admin_permission.rb rename to src/ruby/web-app/app/models/admin_permission.rb diff --git a/src/api-umbrella/web-app/app/models/api.rb b/src/ruby/web-app/app/models/api.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api.rb rename to src/ruby/web-app/app/models/api.rb diff --git a/src/api-umbrella/web-app/app/models/api/header.rb b/src/ruby/web-app/app/models/api/header.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api/header.rb rename to src/ruby/web-app/app/models/api/header.rb diff --git a/src/api-umbrella/web-app/app/models/api/rate_limit.rb b/src/ruby/web-app/app/models/api/rate_limit.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api/rate_limit.rb rename to src/ruby/web-app/app/models/api/rate_limit.rb diff --git a/src/api-umbrella/web-app/app/models/api/rewrite.rb b/src/ruby/web-app/app/models/api/rewrite.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api/rewrite.rb rename to src/ruby/web-app/app/models/api/rewrite.rb diff --git a/src/api-umbrella/web-app/app/models/api/route.rb b/src/ruby/web-app/app/models/api/route.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api/route.rb rename to src/ruby/web-app/app/models/api/route.rb diff --git a/src/api-umbrella/web-app/app/models/api/server.rb b/src/ruby/web-app/app/models/api/server.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api/server.rb rename to src/ruby/web-app/app/models/api/server.rb diff --git a/src/api-umbrella/web-app/app/models/api/settings.rb b/src/ruby/web-app/app/models/api/settings.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api/settings.rb rename to src/ruby/web-app/app/models/api/settings.rb diff --git a/src/api-umbrella/web-app/app/models/api/sub_settings.rb b/src/ruby/web-app/app/models/api/sub_settings.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api/sub_settings.rb rename to src/ruby/web-app/app/models/api/sub_settings.rb diff --git a/src/api-umbrella/web-app/app/models/api/url_match.rb b/src/ruby/web-app/app/models/api/url_match.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api/url_match.rb rename to src/ruby/web-app/app/models/api/url_match.rb diff --git a/src/api-umbrella/web-app/app/models/api_scope.rb b/src/ruby/web-app/app/models/api_scope.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api_scope.rb rename to src/ruby/web-app/app/models/api_scope.rb diff --git a/src/api-umbrella/web-app/app/models/api_user.rb b/src/ruby/web-app/app/models/api_user.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api_user.rb rename to src/ruby/web-app/app/models/api_user.rb diff --git a/src/api-umbrella/web-app/app/models/api_user_role.rb b/src/ruby/web-app/app/models/api_user_role.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/api_user_role.rb rename to src/ruby/web-app/app/models/api_user_role.rb diff --git a/src/api-umbrella/web-app/app/models/config_version.rb b/src/ruby/web-app/app/models/config_version.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/config_version.rb rename to src/ruby/web-app/app/models/config_version.rb diff --git a/src/api-umbrella/web-app/app/models/contact.rb b/src/ruby/web-app/app/models/contact.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/contact.rb rename to src/ruby/web-app/app/models/contact.rb diff --git a/src/api-umbrella/web-app/app/models/idp.rb b/src/ruby/web-app/app/models/idp.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/idp.rb rename to src/ruby/web-app/app/models/idp.rb diff --git a/src/api-umbrella/web-app/app/models/log_city_location.rb b/src/ruby/web-app/app/models/log_city_location.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/log_city_location.rb rename to src/ruby/web-app/app/models/log_city_location.rb diff --git a/src/api-umbrella/web-app/app/models/log_result.rb b/src/ruby/web-app/app/models/log_result.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/log_result.rb rename to src/ruby/web-app/app/models/log_result.rb diff --git a/src/api-umbrella/web-app/app/models/log_result/base.rb b/src/ruby/web-app/app/models/log_result/base.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/log_result/base.rb rename to src/ruby/web-app/app/models/log_result/base.rb diff --git a/src/api-umbrella/web-app/app/models/log_result/elastic_search.rb b/src/ruby/web-app/app/models/log_result/elastic_search.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/log_result/elastic_search.rb rename to src/ruby/web-app/app/models/log_result/elastic_search.rb diff --git a/src/api-umbrella/web-app/app/models/log_search.rb b/src/ruby/web-app/app/models/log_search.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/log_search.rb rename to src/ruby/web-app/app/models/log_search.rb diff --git a/src/api-umbrella/web-app/app/models/log_search/base.rb b/src/ruby/web-app/app/models/log_search/base.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/log_search/base.rb rename to src/ruby/web-app/app/models/log_search/base.rb diff --git a/src/api-umbrella/web-app/app/models/log_search/elastic_search.rb b/src/ruby/web-app/app/models/log_search/elastic_search.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/log_search/elastic_search.rb rename to src/ruby/web-app/app/models/log_search/elastic_search.rb diff --git a/src/api-umbrella/web-app/app/models/website_backend.rb b/src/ruby/web-app/app/models/website_backend.rb similarity index 100% rename from src/api-umbrella/web-app/app/models/website_backend.rb rename to src/ruby/web-app/app/models/website_backend.rb diff --git a/src/api-umbrella/web-app/app/policies/admin_group_policy.rb b/src/ruby/web-app/app/policies/admin_group_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/admin_group_policy.rb rename to src/ruby/web-app/app/policies/admin_group_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/admin_policy.rb b/src/ruby/web-app/app/policies/admin_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/admin_policy.rb rename to src/ruby/web-app/app/policies/admin_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/api_policy.rb b/src/ruby/web-app/app/policies/api_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/api_policy.rb rename to src/ruby/web-app/app/policies/api_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/api_scope_policy.rb b/src/ruby/web-app/app/policies/api_scope_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/api_scope_policy.rb rename to src/ruby/web-app/app/policies/api_scope_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/api_user_policy.rb b/src/ruby/web-app/app/policies/api_user_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/api_user_policy.rb rename to src/ruby/web-app/app/policies/api_user_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/api_user_role_policy.rb b/src/ruby/web-app/app/policies/api_user_role_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/api_user_role_policy.rb rename to src/ruby/web-app/app/policies/api_user_role_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/application_policy.rb b/src/ruby/web-app/app/policies/application_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/application_policy.rb rename to src/ruby/web-app/app/policies/application_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/idp_policy.rb b/src/ruby/web-app/app/policies/idp_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/idp_policy.rb rename to src/ruby/web-app/app/policies/idp_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/log_search_policy.rb b/src/ruby/web-app/app/policies/log_search_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/log_search_policy.rb rename to src/ruby/web-app/app/policies/log_search_policy.rb diff --git a/src/api-umbrella/web-app/app/policies/website_backend_policy.rb b/src/ruby/web-app/app/policies/website_backend_policy.rb similarity index 100% rename from src/api-umbrella/web-app/app/policies/website_backend_policy.rb rename to src/ruby/web-app/app/policies/website_backend_policy.rb diff --git a/src/api-umbrella/web-app/app/views/admin/admins/omniauth_custom_forms/developer.html.erb b/src/ruby/web-app/app/views/admin/admins/omniauth_custom_forms/developer.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/admin/admins/omniauth_custom_forms/developer.html.erb rename to src/ruby/web-app/app/views/admin/admins/omniauth_custom_forms/developer.html.erb diff --git a/src/api-umbrella/web-app/app/views/admin/admins/omniauth_custom_forms/ldap.html.erb b/src/ruby/web-app/app/views/admin/admins/omniauth_custom_forms/ldap.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/admin/admins/omniauth_custom_forms/ldap.html.erb rename to src/ruby/web-app/app/views/admin/admins/omniauth_custom_forms/ldap.html.erb diff --git a/src/api-umbrella/web-app/app/views/admin/stats/_hits_over_time.rabl b/src/ruby/web-app/app/views/admin/stats/_hits_over_time.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/admin/stats/_hits_over_time.rabl rename to src/ruby/web-app/app/views/admin/stats/_hits_over_time.rabl diff --git a/src/api-umbrella/web-app/app/views/admin/stats/map.csv.csvbuilder b/src/ruby/web-app/app/views/admin/stats/map.csv.csvbuilder similarity index 100% rename from src/api-umbrella/web-app/app/views/admin/stats/map.csv.csvbuilder rename to src/ruby/web-app/app/views/admin/stats/map.csv.csvbuilder diff --git a/src/api-umbrella/web-app/app/views/admin/stats/map.rabl b/src/ruby/web-app/app/views/admin/stats/map.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/admin/stats/map.rabl rename to src/ruby/web-app/app/views/admin/stats/map.rabl diff --git a/src/api-umbrella/web-app/app/views/admin/stats/search.rabl b/src/ruby/web-app/app/views/admin/stats/search.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/admin/stats/search.rabl rename to src/ruby/web-app/app/views/admin/stats/search.rabl diff --git a/src/api-umbrella/web-app/app/views/admin/stats/users.csv.csvbuilder b/src/ruby/web-app/app/views/admin/stats/users.csv.csvbuilder similarity index 100% rename from src/api-umbrella/web-app/app/views/admin/stats/users.csv.csvbuilder rename to src/ruby/web-app/app/views/admin/stats/users.csv.csvbuilder diff --git a/src/api-umbrella/web-app/app/views/admin/stats/users.rabl b/src/ruby/web-app/app/views/admin/stats/users.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/admin/stats/users.rabl rename to src/ruby/web-app/app/views/admin/stats/users.rabl diff --git a/src/api-umbrella/web-app/app/views/admin_mailer/invite.html.erb b/src/ruby/web-app/app/views/admin_mailer/invite.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/admin_mailer/invite.html.erb rename to src/ruby/web-app/app/views/admin_mailer/invite.html.erb diff --git a/src/api-umbrella/web-app/app/views/api/v1/admin_groups/index.rabl b/src/ruby/web-app/app/views/api/v1/admin_groups/index.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/admin_groups/index.rabl rename to src/ruby/web-app/app/views/api/v1/admin_groups/index.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/admin_groups/show.rabl b/src/ruby/web-app/app/views/api/v1/admin_groups/show.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/admin_groups/show.rabl rename to src/ruby/web-app/app/views/api/v1/admin_groups/show.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/admins/index.rabl b/src/ruby/web-app/app/views/api/v1/admins/index.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/admins/index.rabl rename to src/ruby/web-app/app/views/api/v1/admins/index.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/admins/show.rabl b/src/ruby/web-app/app/views/api/v1/admins/show.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/admins/show.rabl rename to src/ruby/web-app/app/views/api/v1/admins/show.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/analytics/drilldown.csv.csvbuilder b/src/ruby/web-app/app/views/api/v1/analytics/drilldown.csv.csvbuilder similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/analytics/drilldown.csv.csvbuilder rename to src/ruby/web-app/app/views/api/v1/analytics/drilldown.csv.csvbuilder diff --git a/src/api-umbrella/web-app/app/views/api/v1/analytics/drilldown.json.jbuilder b/src/ruby/web-app/app/views/api/v1/analytics/drilldown.json.jbuilder similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/analytics/drilldown.json.jbuilder rename to src/ruby/web-app/app/views/api/v1/analytics/drilldown.json.jbuilder diff --git a/src/api-umbrella/web-app/app/views/api/v1/analytics/logs.rabl b/src/ruby/web-app/app/views/api/v1/analytics/logs.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/analytics/logs.rabl rename to src/ruby/web-app/app/views/api/v1/analytics/logs.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/api_scopes/index.rabl b/src/ruby/web-app/app/views/api/v1/api_scopes/index.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/api_scopes/index.rabl rename to src/ruby/web-app/app/views/api/v1/api_scopes/index.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/api_scopes/show.rabl b/src/ruby/web-app/app/views/api/v1/api_scopes/show.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/api_scopes/show.rabl rename to src/ruby/web-app/app/views/api/v1/api_scopes/show.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/apis/index.rabl b/src/ruby/web-app/app/views/api/v1/apis/index.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/apis/index.rabl rename to src/ruby/web-app/app/views/api/v1/apis/index.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/config/pending_changes.json.jbuilder b/src/ruby/web-app/app/views/api/v1/config/pending_changes.json.jbuilder similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/config/pending_changes.json.jbuilder rename to src/ruby/web-app/app/views/api/v1/config/pending_changes.json.jbuilder diff --git a/src/api-umbrella/web-app/app/views/api/v1/idps/index.rabl b/src/ruby/web-app/app/views/api/v1/idps/index.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/idps/index.rabl rename to src/ruby/web-app/app/views/api/v1/idps/index.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/idps/show.rabl b/src/ruby/web-app/app/views/api/v1/idps/show.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/idps/show.rabl rename to src/ruby/web-app/app/views/api/v1/idps/show.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/users/index.rabl b/src/ruby/web-app/app/views/api/v1/users/index.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/users/index.rabl rename to src/ruby/web-app/app/views/api/v1/users/index.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/users/show.rabl b/src/ruby/web-app/app/views/api/v1/users/show.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/users/show.rabl rename to src/ruby/web-app/app/views/api/v1/users/show.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/website_backends/index.rabl b/src/ruby/web-app/app/views/api/v1/website_backends/index.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/website_backends/index.rabl rename to src/ruby/web-app/app/views/api/v1/website_backends/index.rabl diff --git a/src/api-umbrella/web-app/app/views/api/v1/website_backends/show.rabl b/src/ruby/web-app/app/views/api/v1/website_backends/show.rabl similarity index 100% rename from src/api-umbrella/web-app/app/views/api/v1/website_backends/show.rabl rename to src/ruby/web-app/app/views/api/v1/website_backends/show.rabl diff --git a/src/api-umbrella/web-app/app/views/api_user_mailer/_welcome.html.erb b/src/ruby/web-app/app/views/api_user_mailer/_welcome.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/api_user_mailer/_welcome.html.erb rename to src/ruby/web-app/app/views/api_user_mailer/_welcome.html.erb diff --git a/src/api-umbrella/web-app/app/views/api_user_mailer/notify_api_admin.erb b/src/ruby/web-app/app/views/api_user_mailer/notify_api_admin.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/api_user_mailer/notify_api_admin.erb rename to src/ruby/web-app/app/views/api_user_mailer/notify_api_admin.erb diff --git a/src/api-umbrella/web-app/app/views/api_user_mailer/signup_email.html.erb b/src/ruby/web-app/app/views/api_user_mailer/signup_email.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/api_user_mailer/signup_email.html.erb rename to src/ruby/web-app/app/views/api_user_mailer/signup_email.html.erb diff --git a/src/api-umbrella/web-app/app/views/contact_mailer/contact_email.text.erb b/src/ruby/web-app/app/views/contact_mailer/contact_email.text.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/contact_mailer/contact_email.text.erb rename to src/ruby/web-app/app/views/contact_mailer/contact_email.text.erb diff --git a/src/api-umbrella/web-app/app/views/devise/mailer/confirmation_instructions.html.erb b/src/ruby/web-app/app/views/devise/mailer/confirmation_instructions.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/mailer/confirmation_instructions.html.erb rename to src/ruby/web-app/app/views/devise/mailer/confirmation_instructions.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/mailer/password_change.html.erb b/src/ruby/web-app/app/views/devise/mailer/password_change.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/mailer/password_change.html.erb rename to src/ruby/web-app/app/views/devise/mailer/password_change.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/mailer/reset_password_instructions.html.erb b/src/ruby/web-app/app/views/devise/mailer/reset_password_instructions.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/mailer/reset_password_instructions.html.erb rename to src/ruby/web-app/app/views/devise/mailer/reset_password_instructions.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/mailer/unlock_instructions.html.erb b/src/ruby/web-app/app/views/devise/mailer/unlock_instructions.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/mailer/unlock_instructions.html.erb rename to src/ruby/web-app/app/views/devise/mailer/unlock_instructions.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/passwords/edit.html.erb b/src/ruby/web-app/app/views/devise/passwords/edit.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/passwords/edit.html.erb rename to src/ruby/web-app/app/views/devise/passwords/edit.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/passwords/new.html.erb b/src/ruby/web-app/app/views/devise/passwords/new.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/passwords/new.html.erb rename to src/ruby/web-app/app/views/devise/passwords/new.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/registrations/new.html.erb b/src/ruby/web-app/app/views/devise/registrations/new.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/registrations/new.html.erb rename to src/ruby/web-app/app/views/devise/registrations/new.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/sessions/_ldap_login_form.html.erb b/src/ruby/web-app/app/views/devise/sessions/_ldap_login_form.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/sessions/_ldap_login_form.html.erb rename to src/ruby/web-app/app/views/devise/sessions/_ldap_login_form.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/sessions/_local_login_form.html.erb b/src/ruby/web-app/app/views/devise/sessions/_local_login_form.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/sessions/_local_login_form.html.erb rename to src/ruby/web-app/app/views/devise/sessions/_local_login_form.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/sessions/_omniauth_provider_buttons.html.erb b/src/ruby/web-app/app/views/devise/sessions/_omniauth_provider_buttons.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/sessions/_omniauth_provider_buttons.html.erb rename to src/ruby/web-app/app/views/devise/sessions/_omniauth_provider_buttons.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/sessions/new.html.erb b/src/ruby/web-app/app/views/devise/sessions/new.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/sessions/new.html.erb rename to src/ruby/web-app/app/views/devise/sessions/new.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/shared/_links.html.erb b/src/ruby/web-app/app/views/devise/shared/_links.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/shared/_links.html.erb rename to src/ruby/web-app/app/views/devise/shared/_links.html.erb diff --git a/src/api-umbrella/web-app/app/views/devise/unlocks/new.html.erb b/src/ruby/web-app/app/views/devise/unlocks/new.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/devise/unlocks/new.html.erb rename to src/ruby/web-app/app/views/devise/unlocks/new.html.erb diff --git a/src/api-umbrella/web-app/app/views/layouts/application.html.erb b/src/ruby/web-app/app/views/layouts/application.html.erb similarity index 100% rename from src/api-umbrella/web-app/app/views/layouts/application.html.erb rename to src/ruby/web-app/app/views/layouts/application.html.erb diff --git a/src/api-umbrella/web-app/bin/bundle b/src/ruby/web-app/bin/bundle similarity index 100% rename from src/api-umbrella/web-app/bin/bundle rename to src/ruby/web-app/bin/bundle diff --git a/src/api-umbrella/web-app/bin/delayed_job b/src/ruby/web-app/bin/delayed_job similarity index 100% rename from src/api-umbrella/web-app/bin/delayed_job rename to src/ruby/web-app/bin/delayed_job diff --git a/src/api-umbrella/web-app/bin/rails b/src/ruby/web-app/bin/rails similarity index 100% rename from src/api-umbrella/web-app/bin/rails rename to src/ruby/web-app/bin/rails diff --git a/src/api-umbrella/web-app/bin/rake b/src/ruby/web-app/bin/rake similarity index 100% rename from src/api-umbrella/web-app/bin/rake rename to src/ruby/web-app/bin/rake diff --git a/src/api-umbrella/web-app/bin/setup b/src/ruby/web-app/bin/setup similarity index 100% rename from src/api-umbrella/web-app/bin/setup rename to src/ruby/web-app/bin/setup diff --git a/src/api-umbrella/web-app/bin/spring b/src/ruby/web-app/bin/spring similarity index 100% rename from src/api-umbrella/web-app/bin/spring rename to src/ruby/web-app/bin/spring diff --git a/src/api-umbrella/web-app/config.ru b/src/ruby/web-app/config.ru similarity index 100% rename from src/api-umbrella/web-app/config.ru rename to src/ruby/web-app/config.ru diff --git a/src/api-umbrella/web-app/config/application.rb b/src/ruby/web-app/config/application.rb similarity index 100% rename from src/api-umbrella/web-app/config/application.rb rename to src/ruby/web-app/config/application.rb diff --git a/src/api-umbrella/web-app/config/boot.rb b/src/ruby/web-app/config/boot.rb similarity index 100% rename from src/api-umbrella/web-app/config/boot.rb rename to src/ruby/web-app/config/boot.rb diff --git a/src/api-umbrella/web-app/config/environment.rb b/src/ruby/web-app/config/environment.rb similarity index 100% rename from src/api-umbrella/web-app/config/environment.rb rename to src/ruby/web-app/config/environment.rb diff --git a/src/api-umbrella/web-app/config/environments/development.rb b/src/ruby/web-app/config/environments/development.rb similarity index 100% rename from src/api-umbrella/web-app/config/environments/development.rb rename to src/ruby/web-app/config/environments/development.rb diff --git a/src/api-umbrella/web-app/config/environments/production.rb b/src/ruby/web-app/config/environments/production.rb similarity index 100% rename from src/api-umbrella/web-app/config/environments/production.rb rename to src/ruby/web-app/config/environments/production.rb diff --git a/src/api-umbrella/web-app/config/environments/test.rb b/src/ruby/web-app/config/environments/test.rb similarity index 100% rename from src/api-umbrella/web-app/config/environments/test.rb rename to src/ruby/web-app/config/environments/test.rb diff --git a/src/api-umbrella/web-app/config/initializers/api_umbrella_version.rb b/src/ruby/web-app/config/initializers/api_umbrella_version.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/api_umbrella_version.rb rename to src/ruby/web-app/config/initializers/api_umbrella_version.rb diff --git a/src/api-umbrella/web-app/config/initializers/assets.rb b/src/ruby/web-app/config/initializers/assets.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/assets.rb rename to src/ruby/web-app/config/initializers/assets.rb diff --git a/src/api-umbrella/web-app/config/initializers/awesome_print.rb b/src/ruby/web-app/config/initializers/awesome_print.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/awesome_print.rb rename to src/ruby/web-app/config/initializers/awesome_print.rb diff --git a/src/api-umbrella/web-app/config/initializers/backtrace_silencers.rb b/src/ruby/web-app/config/initializers/backtrace_silencers.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/backtrace_silencers.rb rename to src/ruby/web-app/config/initializers/backtrace_silencers.rb diff --git a/src/api-umbrella/web-app/config/initializers/cookies_serializer.rb b/src/ruby/web-app/config/initializers/cookies_serializer.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/cookies_serializer.rb rename to src/ruby/web-app/config/initializers/cookies_serializer.rb diff --git a/src/api-umbrella/web-app/config/initializers/delayed_job.rb b/src/ruby/web-app/config/initializers/delayed_job.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/delayed_job.rb rename to src/ruby/web-app/config/initializers/delayed_job.rb diff --git a/src/api-umbrella/web-app/config/initializers/devise.rb b/src/ruby/web-app/config/initializers/devise.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/devise.rb rename to src/ruby/web-app/config/initializers/devise.rb diff --git a/src/api-umbrella/web-app/config/initializers/filter_parameter_logging.rb b/src/ruby/web-app/config/initializers/filter_parameter_logging.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/filter_parameter_logging.rb rename to src/ruby/web-app/config/initializers/filter_parameter_logging.rb diff --git a/src/api-umbrella/web-app/config/initializers/i18n.rb b/src/ruby/web-app/config/initializers/i18n.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/i18n.rb rename to src/ruby/web-app/config/initializers/i18n.rb diff --git a/src/api-umbrella/web-app/config/initializers/inflections.rb b/src/ruby/web-app/config/initializers/inflections.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/inflections.rb rename to src/ruby/web-app/config/initializers/inflections.rb diff --git a/src/api-umbrella/web-app/config/initializers/json.rb b/src/ruby/web-app/config/initializers/json.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/json.rb rename to src/ruby/web-app/config/initializers/json.rb diff --git a/src/api-umbrella/web-app/config/initializers/mime_types.rb b/src/ruby/web-app/config/initializers/mime_types.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/mime_types.rb rename to src/ruby/web-app/config/initializers/mime_types.rb diff --git a/src/api-umbrella/web-app/config/initializers/mongoid_serializable_id.rb b/src/ruby/web-app/config/initializers/mongoid_serializable_id.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/mongoid_serializable_id.rb rename to src/ruby/web-app/config/initializers/mongoid_serializable_id.rb diff --git a/src/api-umbrella/web-app/config/initializers/rollbar.rb b/src/ruby/web-app/config/initializers/rollbar.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/rollbar.rb rename to src/ruby/web-app/config/initializers/rollbar.rb diff --git a/src/api-umbrella/web-app/config/initializers/session_store.rb b/src/ruby/web-app/config/initializers/session_store.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/session_store.rb rename to src/ruby/web-app/config/initializers/session_store.rb diff --git a/src/api-umbrella/web-app/config/initializers/simple_form.rb b/src/ruby/web-app/config/initializers/simple_form.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/simple_form.rb rename to src/ruby/web-app/config/initializers/simple_form.rb diff --git a/src/api-umbrella/web-app/config/initializers/simple_form_bootstrap.rb b/src/ruby/web-app/config/initializers/simple_form_bootstrap.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/simple_form_bootstrap.rb rename to src/ruby/web-app/config/initializers/simple_form_bootstrap.rb diff --git a/src/api-umbrella/web-app/config/initializers/timeout.rb b/src/ruby/web-app/config/initializers/timeout.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/timeout.rb rename to src/ruby/web-app/config/initializers/timeout.rb diff --git a/src/api-umbrella/web-app/config/initializers/to_time_preserves_timezone.rb b/src/ruby/web-app/config/initializers/to_time_preserves_timezone.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/to_time_preserves_timezone.rb rename to src/ruby/web-app/config/initializers/to_time_preserves_timezone.rb diff --git a/src/api-umbrella/web-app/config/initializers/wrap_parameters.rb b/src/ruby/web-app/config/initializers/wrap_parameters.rb similarity index 100% rename from src/api-umbrella/web-app/config/initializers/wrap_parameters.rb rename to src/ruby/web-app/config/initializers/wrap_parameters.rb diff --git a/src/api-umbrella/web-app/config/locales/de.yml b/src/ruby/web-app/config/locales/de.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/de.yml rename to src/ruby/web-app/config/locales/de.yml diff --git a/src/api-umbrella/web-app/config/locales/en.yml b/src/ruby/web-app/config/locales/en.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/en.yml rename to src/ruby/web-app/config/locales/en.yml diff --git a/src/api-umbrella/web-app/config/locales/es-419.yml b/src/ruby/web-app/config/locales/es-419.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/es-419.yml rename to src/ruby/web-app/config/locales/es-419.yml diff --git a/src/api-umbrella/web-app/config/locales/fi.yml b/src/ruby/web-app/config/locales/fi.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/fi.yml rename to src/ruby/web-app/config/locales/fi.yml diff --git a/src/api-umbrella/web-app/config/locales/fr.yml b/src/ruby/web-app/config/locales/fr.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/fr.yml rename to src/ruby/web-app/config/locales/fr.yml diff --git a/src/api-umbrella/web-app/config/locales/it.yml b/src/ruby/web-app/config/locales/it.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/it.yml rename to src/ruby/web-app/config/locales/it.yml diff --git a/src/api-umbrella/web-app/config/locales/ru.yml b/src/ruby/web-app/config/locales/ru.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/ru.yml rename to src/ruby/web-app/config/locales/ru.yml diff --git a/src/api-umbrella/web-app/config/locales/simple_form.en.yml b/src/ruby/web-app/config/locales/simple_form.en.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/simple_form.en.yml rename to src/ruby/web-app/config/locales/simple_form.en.yml diff --git a/src/api-umbrella/web-app/config/locales/zy.yml b/src/ruby/web-app/config/locales/zy.yml similarity index 100% rename from src/api-umbrella/web-app/config/locales/zy.yml rename to src/ruby/web-app/config/locales/zy.yml diff --git a/src/api-umbrella/web-app/config/routes.rb b/src/ruby/web-app/config/routes.rb similarity index 100% rename from src/api-umbrella/web-app/config/routes.rb rename to src/ruby/web-app/config/routes.rb diff --git a/src/api-umbrella/web-app/config/secrets.yml b/src/ruby/web-app/config/secrets.yml similarity index 100% rename from src/api-umbrella/web-app/config/secrets.yml rename to src/ruby/web-app/config/secrets.yml diff --git a/src/api-umbrella/web-app/db/migrate/20131020035658_user_uuids.rb b/src/ruby/web-app/db/migrate/20131020035658_user_uuids.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20131020035658_user_uuids.rb rename to src/ruby/web-app/db/migrate/20131020035658_user_uuids.rb diff --git a/src/api-umbrella/web-app/db/migrate/20131107231237_api_uuids.rb b/src/ruby/web-app/db/migrate/20131107231237_api_uuids.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20131107231237_api_uuids.rb rename to src/ruby/web-app/db/migrate/20131107231237_api_uuids.rb diff --git a/src/api-umbrella/web-app/db/migrate/20131107233429_admin_uuids.rb b/src/ruby/web-app/db/migrate/20131107233429_admin_uuids.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20131107233429_admin_uuids.rb rename to src/ruby/web-app/db/migrate/20131107233429_admin_uuids.rb diff --git a/src/api-umbrella/web-app/db/migrate/20131108001405_remove_legacy_ids.rb b/src/ruby/web-app/db/migrate/20131108001405_remove_legacy_ids.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20131108001405_remove_legacy_ids.rb rename to src/ruby/web-app/db/migrate/20131108001405_remove_legacy_ids.rb diff --git a/src/api-umbrella/web-app/db/migrate/20131127043301_custom_rate_limits.rb b/src/ruby/web-app/db/migrate/20131127043301_custom_rate_limits.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20131127043301_custom_rate_limits.rb rename to src/ruby/web-app/db/migrate/20131127043301_custom_rate_limits.rb diff --git a/src/api-umbrella/web-app/db/migrate/20131127063456_create_delayed_job_indexes.rb b/src/ruby/web-app/db/migrate/20131127063456_create_delayed_job_indexes.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20131127063456_create_delayed_job_indexes.rb rename to src/ruby/web-app/db/migrate/20131127063456_create_delayed_job_indexes.rb diff --git a/src/api-umbrella/web-app/db/migrate/20131127185950_fix_custom_rate_limits.rb b/src/ruby/web-app/db/migrate/20131127185950_fix_custom_rate_limits.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20131127185950_fix_custom_rate_limits.rb rename to src/ruby/web-app/db/migrate/20131127185950_fix_custom_rate_limits.rb diff --git a/src/api-umbrella/web-app/db/migrate/20140103144751_add_user_register_source.rb b/src/ruby/web-app/db/migrate/20140103144751_add_user_register_source.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20140103144751_add_user_register_source.rb rename to src/ruby/web-app/db/migrate/20140103144751_add_user_register_source.rb diff --git a/src/api-umbrella/web-app/db/migrate/20140323163150_generate_admin_authentication_tokens.rb b/src/ruby/web-app/db/migrate/20140323163150_generate_admin_authentication_tokens.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20140323163150_generate_admin_authentication_tokens.rb rename to src/ruby/web-app/db/migrate/20140323163150_generate_admin_authentication_tokens.rb diff --git a/src/api-umbrella/web-app/db/migrate/20140325061951_api_sort_orders.rb b/src/ruby/web-app/db/migrate/20140325061951_api_sort_orders.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20140325061951_api_sort_orders.rb rename to src/ruby/web-app/db/migrate/20140325061951_api_sort_orders.rb diff --git a/src/api-umbrella/web-app/db/migrate/20140908045601_legacy_pass_api_keys.rb b/src/ruby/web-app/db/migrate/20140908045601_legacy_pass_api_keys.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20140908045601_legacy_pass_api_keys.rb rename to src/ruby/web-app/db/migrate/20140908045601_legacy_pass_api_keys.rb diff --git a/src/api-umbrella/web-app/db/migrate/20150118061631_downcase_admin_usernames.rb b/src/ruby/web-app/db/migrate/20150118061631_downcase_admin_usernames.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20150118061631_downcase_admin_usernames.rb rename to src/ruby/web-app/db/migrate/20150118061631_downcase_admin_usernames.rb diff --git a/src/api-umbrella/web-app/db/migrate/20150327071153_require_https_settings.rb b/src/ruby/web-app/db/migrate/20150327071153_require_https_settings.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20150327071153_require_https_settings.rb rename to src/ruby/web-app/db/migrate/20150327071153_require_https_settings.rb diff --git a/src/api-umbrella/web-app/db/migrate/20150529144541_api_sort_orders_with_gap.rb b/src/ruby/web-app/db/migrate/20150529144541_api_sort_orders_with_gap.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20150529144541_api_sort_orders_with_gap.rb rename to src/ruby/web-app/db/migrate/20150529144541_api_sort_orders_with_gap.rb diff --git a/src/api-umbrella/web-app/db/migrate/20160229172850_move_cached_city_geocodes_to_mongo.rb b/src/ruby/web-app/db/migrate/20160229172850_move_cached_city_geocodes_to_mongo.rb similarity index 100% rename from src/api-umbrella/web-app/db/migrate/20160229172850_move_cached_city_geocodes_to_mongo.rb rename to src/ruby/web-app/db/migrate/20160229172850_move_cached_city_geocodes_to_mongo.rb diff --git a/src/api-umbrella/web-app/db/seeds.rb b/src/ruby/web-app/db/seeds.rb similarity index 100% rename from src/api-umbrella/web-app/db/seeds.rb rename to src/ruby/web-app/db/seeds.rb diff --git a/src/api-umbrella/web-app/docker-compose.yml b/src/ruby/web-app/docker-compose.yml similarity index 100% rename from src/api-umbrella/web-app/docker-compose.yml rename to src/ruby/web-app/docker-compose.yml diff --git a/src/api-umbrella/web-app/lib/api_umbrella/attributify_data.rb b/src/ruby/web-app/lib/api_umbrella/attributify_data.rb similarity index 100% rename from src/api-umbrella/web-app/lib/api_umbrella/attributify_data.rb rename to src/ruby/web-app/lib/api_umbrella/attributify_data.rb diff --git a/src/api-umbrella/web-app/lib/api_umbrella/elasticsearch_proxy.rb b/src/ruby/web-app/lib/api_umbrella/elasticsearch_proxy.rb similarity index 100% rename from src/api-umbrella/web-app/lib/api_umbrella/elasticsearch_proxy.rb rename to src/ruby/web-app/lib/api_umbrella/elasticsearch_proxy.rb diff --git a/src/api-umbrella/web-app/lib/common_validations.rb b/src/ruby/web-app/lib/common_validations.rb similarity index 100% rename from src/api-umbrella/web-app/lib/common_validations.rb rename to src/ruby/web-app/lib/common_validations.rb diff --git a/src/api-umbrella/web-app/lib/csv_streamer.rb b/src/ruby/web-app/lib/csv_streamer.rb similarity index 100% rename from src/api-umbrella/web-app/lib/csv_streamer.rb rename to src/ruby/web-app/lib/csv_streamer.rb diff --git a/src/api-umbrella/web-app/lib/js_locale_helper.rb b/src/ruby/web-app/lib/js_locale_helper.rb similarity index 100% rename from src/api-umbrella/web-app/lib/js_locale_helper.rb rename to src/ruby/web-app/lib/js_locale_helper.rb diff --git a/src/api-umbrella/web-app/lib/known_hosts.rb b/src/ruby/web-app/lib/known_hosts.rb similarity index 100% rename from src/api-umbrella/web-app/lib/known_hosts.rb rename to src/ruby/web-app/lib/known_hosts.rb diff --git a/src/api-umbrella/web-app/lib/mongoid/userstamp.rb b/src/ruby/web-app/lib/mongoid/userstamp.rb similarity index 100% rename from src/api-umbrella/web-app/lib/mongoid/userstamp.rb rename to src/ruby/web-app/lib/mongoid/userstamp.rb diff --git a/src/api-umbrella/web-app/lib/tasks/i18n.rake b/src/ruby/web-app/lib/tasks/i18n.rake similarity index 100% rename from src/api-umbrella/web-app/lib/tasks/i18n.rake rename to src/ruby/web-app/lib/tasks/i18n.rake diff --git a/src/api-umbrella/web-app/lib/tasks/rubocop.rake b/src/ruby/web-app/lib/tasks/rubocop.rake similarity index 100% rename from src/api-umbrella/web-app/lib/tasks/rubocop.rake rename to src/ruby/web-app/lib/tasks/rubocop.rake diff --git a/src/api-umbrella/web-app/lib/templates/erb/scaffold/_form.html.erb b/src/ruby/web-app/lib/templates/erb/scaffold/_form.html.erb similarity index 100% rename from src/api-umbrella/web-app/lib/templates/erb/scaffold/_form.html.erb rename to src/ruby/web-app/lib/templates/erb/scaffold/_form.html.erb diff --git a/src/api-umbrella/web-app/public/404.html b/src/ruby/web-app/public/404.html similarity index 100% rename from src/api-umbrella/web-app/public/404.html rename to src/ruby/web-app/public/404.html diff --git a/src/api-umbrella/web-app/public/422.html b/src/ruby/web-app/public/422.html similarity index 100% rename from src/api-umbrella/web-app/public/422.html rename to src/ruby/web-app/public/422.html diff --git a/src/api-umbrella/web-app/public/500.html b/src/ruby/web-app/public/500.html similarity index 100% rename from src/api-umbrella/web-app/public/500.html rename to src/ruby/web-app/public/500.html diff --git a/src/api-umbrella/web-app/script/migrate_logs b/src/ruby/web-app/script/migrate_logs similarity index 100% rename from src/api-umbrella/web-app/script/migrate_logs rename to src/ruby/web-app/script/migrate_logs diff --git a/src/api-umbrella/web-app/script/migrate_users b/src/ruby/web-app/script/migrate_users similarity index 100% rename from src/api-umbrella/web-app/script/migrate_users rename to src/ruby/web-app/script/migrate_users diff --git a/src/api-umbrella/web-app/vendor/.gitkeep b/src/ruby/web-app/vendor/.gitkeep similarity index 100% rename from src/api-umbrella/web-app/vendor/.gitkeep rename to src/ruby/web-app/vendor/.gitkeep diff --git a/src/api-umbrella/version.txt b/src/version.txt similarity index 100% rename from src/api-umbrella/version.txt rename to src/version.txt diff --git a/tasks/app-deps/admin-ui/yarn b/tasks/app-deps/admin-ui/yarn deleted file mode 100755 index f604f49e8..000000000 --- a/tasks/app-deps/admin-ui/yarn +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env bash - -set -e -u -x -source ./tasks/helpers.sh - -task_working_dir - -# Install into the task's special _persist directory so the large node_modules -# directory isn't cleaned between runs for development purposes. -mkdir -p _persist -cd _persist - -# Copy the npm/yarn config files into the working directory and perform the -# installation here (so we're not creating/modifying files in the source -# directory). -cp "$SOURCE_DIR/src/api-umbrella/admin-ui/.yarnrc" ./ -cp "$SOURCE_DIR/src/api-umbrella/admin-ui/package.json" ./ -cp "$SOURCE_DIR/src/api-umbrella/admin-ui/yarn.lock" ./ -PATH="$DEV_PATH" yarn install --frozen-lockfile - -# Remove some unnecessary and large files that are shipped in a couple of the -# Ember npm packages (I think usually by accident). This just helps slim down -# the size of node_modules a bit. -rm -rf ./node_modules/*/.node_modules.ember-try - -stamp diff --git a/tasks/app-deps/web-app/bundle b/tasks/app-deps/web-app/bundle deleted file mode 100755 index 5ce98a227..000000000 --- a/tasks/app-deps/web-app/bundle +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash - -set -e -u -x -source ./tasks/helpers.sh - -task_working_dir - -# Install into the task's special _persist directory so the installed gems dir -# isn't cleaned between runs for development purposes. -mkdir -p _persist -cd _persist - -# Install all the gems for use in development/test. -export PATH="$STAGE_EMBEDDED_PATH" -export BUNDLE_GEMFILE="$SOURCE_DIR/src/api-umbrella/web-app/Gemfile" -BUNDLE_APP_CONFIG="$(pwd)/.bundle" -export BUNDLE_APP_CONFIG -bundle update --bundler -bundle config --local build.nokogiri --use-system-libraries -bundle config --local path "$(pwd)/bundle" -bundle config --local clean true -bundle install - -# Make a copy of the gems in the release directory for production purposes, and -# then remove all non-production gems. -mkdir -p "$APP_CORE_VENDOR_BUNDLE_DIR" -rsync -a --delete ./bundle/ "$APP_CORE_VENDOR_BUNDLE_DIR/" -rsync -a -v --delete ./.bundle/ ./.bundle-prod/ -BUNDLE_APP_CONFIG="$(pwd)/.bundle-prod" -export BUNDLE_APP_CONFIG -bundle config --local path "$APP_CORE_VENDOR_BUNDLE_DIR" -bundle config --local without "development:test:assets" -bundle config --local clean true -bundle config --local deployment true -bundle install - -# Purge gem files we don't need to make for a lighter package distribution. -rm -rf \ - "$APP_CORE_VENDOR_BUNDLE_DIR"/ruby/*/cache \ - "$APP_CORE_VENDOR_BUNDLE_DIR"/ruby/*/gems/*/test* \ - "$APP_CORE_VENDOR_BUNDLE_DIR"/ruby/*/gems/*/spec \ - "$APP_CORE_VENDOR_BUNDLE_DIR"/ruby/*/bundler/gems/*/test* \ - "$APP_CORE_VENDOR_BUNDLE_DIR"/ruby/*/bundler/gems/*/spec \ - "$APP_CORE_VENDOR_BUNDLE_DIR"/ruby/*/bundler/gems/*/.git - -stamp diff --git a/tasks/app/admin-ui/build b/tasks/app/admin-ui/build deleted file mode 100755 index c493eaa53..000000000 --- a/tasks/app/admin-ui/build +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash - -set -e -u -x -source ./tasks/helpers.sh - -task_working_dir - -# Copy the admin-ui app locally so that we can build locally (outside of the -# source directory) without affecting the "node_modules" setup in the source -# directory. -mkdir -p app -cd app -rsync -a -v \ - --delete \ - --delete-excluded \ - --filter=":- $SOURCE_DIR/src/api-umbrella/admin-ui/.gitignore" \ - "$SOURCE_DIR/src/api-umbrella/admin-ui/" \ - ./ - -node_modules_dir="$WORK_DIR/tasks/app-deps/admin-ui/yarn/_persist/node_modules" -ln -s "$node_modules_dir" ./node_modules - -# Install the "dist" result into the task's special _persist directory so that -# these dependencies for the tasks/app/core task are still present if core -# needs to be re-run, but not this task. -mkdir -p ../_persist -PATH="$DEV_INSTALL_PREFIX/bin:$DEFAULT_PATH" ./node_modules/.bin/ember build \ - --environment=production \ - --output-path=../_persist/dist - -# Copy the index.html to a separate location for the test suite, and modify the -# inline config in the HTML file to set "integrationTestMode: true". -rm -rf "$TEST_INSTALL_PREFIX/admin-ui" -mkdir -p "$TEST_INSTALL_PREFIX/admin-ui" -cp ../_persist/dist/index.html "$TEST_INSTALL_PREFIX/admin-ui/index.html" -sed -i -e 's#&1 - -umask "{{umask}}" - -if [ "${1}" = "start" ]; then - echo "starting ${2}..." - api_umbrella_user="{{user}}" - api_umbrella_group="{{group}}" - - run_args=() - if [ -n "$api_umbrella_user" ]; then - run_args+=("-u" "$api_umbrella_user") - fi - - dirs=("{{db_dir}}/mongodb") - mkdir -p "${dirs[@]}" - chmod 750 "${dirs[@]}" - if [ -n "$api_umbrella_user" ]; then - chown $api_umbrella_user:$api_umbrella_group "${dirs[@]}" - fi - - exec runtool ${run_args[@]+"${run_args[@]}"} mongod --config "{{etc_dir}}/mongod.conf" -fi - -exit 0 diff --git a/templates/etc/perp/mora/rc.log b/templates/etc/perp/mora/rc.log deleted file mode 100755 index 0bfdd70ef..000000000 --- a/templates/etc/perp/mora/rc.log +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -set -e -u -exec ../rc.log "$@" diff --git a/templates/etc/perp/mora/rc.main.mustache b/templates/etc/perp/mora/rc.main.mustache deleted file mode 100755 index 73578ad8d..000000000 --- a/templates/etc/perp/mora/rc.main.mustache +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash -set -e -u - -# Redirect stderr to stdout -exec 2>&1 - -umask "{{umask}}" - -if [ "${1}" = "start" ]; then - echo "starting ${2}..." - api_umbrella_user="{{user}}" - - run_args=() - if [ -n "$api_umbrella_user" ]; then - run_args+=("-u" "$api_umbrella_user") - fi - - exec runtool ${run_args[@]+"${run_args[@]}"} mora -config "{{etc_dir}}/mora.properties" -fi - -exit 0 diff --git a/templates/etc/perp/nginx/rc.main.mustache b/templates/etc/perp/nginx/rc.main.mustache index 8418906d5..3c8003204 100755 --- a/templates/etc/perp/nginx/rc.main.mustache +++ b/templates/etc/perp/nginx/rc.main.mustache @@ -10,7 +10,7 @@ if [ "${1}" = "start" ]; then echo "starting ${2}..." run_args=("-e" "rc.env" "-c" "{{_src_root_dir}}") - exec runtool ${run_args[@]+"${run_args[@]}"} nginx -p "{{_src_root_dir}}/" -c "{{etc_dir}}/nginx/router.conf" + exec runtool ${run_args[@]+"${run_args[@]}"} nginx -p "{{_src_root_dir}}/" -c "/opt/api-umbrella/etc/nginx/router.conf" fi exit 0 diff --git a/templates/etc/perp/rsyslog/rc.env.mustache b/templates/etc/perp/rsyslog/rc.env.mustache deleted file mode 100644 index 478d65599..000000000 --- a/templates/etc/perp/rsyslog/rc.env.mustache +++ /dev/null @@ -1 +0,0 @@ -RSYSLOG_MODDIR={{_embedded_root_dir}}/lib/rsyslog diff --git a/templates/etc/perp/rsyslog/rc.log b/templates/etc/perp/rsyslog/rc.log deleted file mode 100755 index 0bfdd70ef..000000000 --- a/templates/etc/perp/rsyslog/rc.log +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash -set -e -u -exec ../rc.log "$@" diff --git a/templates/etc/perp/rsyslog/rc.main.mustache b/templates/etc/perp/rsyslog/rc.main.mustache deleted file mode 100755 index e46e21a09..000000000 --- a/templates/etc/perp/rsyslog/rc.main.mustache +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -set -e -u - -# Redirect stderr to stdout -exec 2>&1 - -umask "{{umask}}" - -if [ "${1}" = "start" ]; then - echo "starting ${2}..." - api_umbrella_user="{{user}}" - api_umbrella_group="{{group}}" - - run_args=("-e" "rc.env") - if [ -n "$api_umbrella_user" ]; then - run_args+=("-u" "$api_umbrella_user") - fi - - dirs=("{{db_dir}}/rsyslog") - mkdir -p "${dirs[@]}" - chmod 750 "${dirs[@]}" - if [ -n "$api_umbrella_user" ]; then - chown $api_umbrella_user:$api_umbrella_group "${dirs[@]}" - fi - - exec \ - runtool ${run_args[@]+"${run_args[@]}"} \ - rsyslogd \ - -n \ - -f "{{etc_dir}}/rsyslog.conf" \ - -i "{{run_dir}}/rsyslogd.pid" -fi diff --git a/templates/etc/perp/trafficserver/rc.main.mustache b/templates/etc/perp/trafficserver/rc.main.mustache index c09d62a26..cb20a02b8 100755 --- a/templates/etc/perp/trafficserver/rc.main.mustache +++ b/templates/etc/perp/trafficserver/rc.main.mustache @@ -16,7 +16,7 @@ if [ "${1}" = "start" ]; then run_args+=("-u" "$api_umbrella_user") fi - dirs=("{{etc_dir}}/trafficserver" "{{etc_dir}}/trafficserver/snapshots" "{{var_dir}}/trafficserver") + dirs=("/opt/api-umbrella/etc/trafficserver" "/opt/api-umbrella/etc/trafficserver/snapshots" "/opt/api-umbrella/var/trafficserver") mkdir -p "${dirs[@]}" chmod 750 "${dirs[@]}" if [ -n "$api_umbrella_user" ]; then diff --git a/templates/etc/rsyslog.conf.mustache b/templates/etc/rsyslog.conf.mustache index 88207d784..4478dff0f 100644 --- a/templates/etc/rsyslog.conf.mustache +++ b/templates/etc/rsyslog.conf.mustache @@ -34,7 +34,7 @@ template(name="template-stdout" type="list") { } ruleset(name="analytics-ruleset" queue.type="FixedArray" queue.size="5000") { - include(file="{{etc_dir}}/rsyslog.d/analytics.conf") + include(file="/etc/rsyslog.d/analytics.conf") } {{#log._destination_console?}} diff --git a/templates/etc/trafficserver/plugin.config.mustache b/templates/etc/trafficserver/plugin.config.mustache index 73e22941a..3788f818c 100644 --- a/templates/etc/trafficserver/plugin.config.mustache +++ b/templates/etc/trafficserver/plugin.config.mustache @@ -1 +1 @@ -tslua.so {{etc_dir}}/trafficserver/global.lua +tslua.so /opt/ts/etc/trafficserver/global.lua diff --git a/templates/etc/trafficserver/records.config.mustache b/templates/etc/trafficserver/records.config.mustache index e5e49113e..6087fc23f 100644 --- a/templates/etc/trafficserver/records.config.mustache +++ b/templates/etc/trafficserver/records.config.mustache @@ -24,9 +24,9 @@ CONFIG proxy.config.admin.user_id STRING #-1 # new proxy.config.config_dir setting # (https://issues.apache.org/jira/browse/TS-3192), but I wasn't able to get # that to quite work properly. -CONFIG proxy.config.bin_path STRING {{_embedded_root_dir}}/bin -CONFIG proxy.config.plugin.plugin_dir STRING {{_embedded_root_dir}}/libexec/trafficserver -CONFIG proxy.config.body_factory.template_sets_dir STRING {{_embedded_root_dir}}/etc/trafficserver/body_factory +CONFIG proxy.config.bin_path STRING /opt/ts/bin +CONFIG proxy.config.plugin.plugin_dir STRING /opt/ts/libexec/trafficserver +CONFIG proxy.config.body_factory.template_sets_dir STRING /opt/ts/etc/trafficserver/body_factory # Log to the standard API Umbrella log directory location. CONFIG proxy.config.log.logfile_dir STRING {{log_dir}}/trafficserver diff --git a/templates/etc/trafficserver/remap.config.mustache b/templates/etc/trafficserver/remap.config.mustache index 81b9bb333..334e7a4ca 100644 --- a/templates/etc/trafficserver/remap.config.mustache +++ b/templates/etc/trafficserver/remap.config.mustache @@ -1 +1 @@ -map / http://dummy.example.com @plugin=tslua.so @pparam={{etc_dir}}/trafficserver/remap.lua +map / http://dummy.example.com @plugin=tslua.so @pparam=/opt/ts/etc/trafficserver/remap.lua From dfb348fc12352595e63fd9096966ab64d8d8a178 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Mon, 11 Oct 2021 10:28:41 +0200 Subject: [PATCH 02/24] set tag --- build.log | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 build.log diff --git a/build.log b/build.log new file mode 100644 index 000000000..f04c19094 --- /dev/null +++ b/build.log @@ -0,0 +1,33 @@ +Sending build context to Docker daemon 30.14MB +Step 1/37 : FROM openresty/openresty:1.19.9.1-1-buster-fat as build + ---> 75abb74f4c05 +Step 2/37 : ARG MAXMIND_LICENSE_KEY_ARG + ---> Using cache + ---> 39f0e9fe2702 +Step 3/37 : ARG MAXMIND_EDITION_ID_ARG=GeoLite2-City + ---> Using cache + ---> 0d758877a4df +Step 4/37 : ARG MAXMIND_DOWNLOAD_URL_ARG=https://download.maxmind.com/app/geoip_download + ---> Using cache + ---> a7bef85a61c8 +Step 5/37 : ENV MAXMIND_LICENSE_KEY=$MAXMIND_LICENSE_KEY_ARG + ---> Using cache + ---> 4192356f5711 +Step 6/37 : ENV MAXMIND_EDITION_ID=$MAXMIND_EDITION_ID_ARG + ---> Using cache + ---> c992f411b13d +Step 7/37 : ENV MAXMIND_DOWNLOAD_URL=$MAXMIND_DOWNLOAD_URL_ARG + ---> Using cache + ---> abee595ad3f3 +Step 8/37 : ENV NOKOGIRI_USE_SYSTEM_LIBRARIES 1 + ---> Using cache + ---> 8e40722f15a6 +Step 9/37 : COPY . /app + ---> 2bddac2d676b +Step 10/37 : WORKDIR /app + ---> Running in 4efc14353856 +Removing intermediate container 4efc14353856 + ---> 90986afc61a8 +Step 11/37 : RUN ./configure + ---> Running in d0582280844d +configure: creating Makefile From 8ffd862c84c415c4830444ed269d4fd0dc6d5d1f Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Mon, 11 Oct 2021 10:31:08 +0200 Subject: [PATCH 03/24] set tag --- .github/workflows/prerelease.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index e0e27b1b4..f76266f72 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -41,8 +41,7 @@ jobs: id: out run: echo "::set-output name=version::$(echo ${VERSION}-PRE-${{ steps.pr_number.outputs.nr }})" - - name: generate temporary tag - run: echo IMAGE_TAG=${{ steps.out.outputs.version }} >> $GITHUB_ENV + create-images: needs: prerelease-version @@ -54,6 +53,9 @@ jobs: steps: + - name: Set tag + run: echo IMAGE_TAG=${{ needs.prerelease-version.outputs.version }} >> $GITHUB_ENV + - name: Set up QEMU uses: docker/setup-qemu-action@v1 From 7082ec0131e968479d65b4cd8da57eb2ff51cce6 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Mon, 11 Oct 2021 10:34:34 +0200 Subject: [PATCH 04/24] set tag --- .github/workflows/prerelease.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index f76266f72..2bb583bcb 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -41,7 +41,8 @@ jobs: id: out run: echo "::set-output name=version::$(echo ${VERSION}-PRE-${{ steps.pr_number.outputs.nr }})" - + outputs: + tag: ${{ steps.out.outputs.version }} create-images: needs: prerelease-version @@ -54,7 +55,7 @@ jobs: steps: - name: Set tag - run: echo IMAGE_TAG=${{ needs.prerelease-version.outputs.version }} >> $GITHUB_ENV + run: echo IMAGE_TAG=${{ needs.prerelease-version.outputs.tag }} >> $GITHUB_ENV - name: Set up QEMU uses: docker/setup-qemu-action@v1 From 8130b5c49c432da4a0599c2a360a1fa0f6ad44ed Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Mon, 11 Oct 2021 10:36:39 +0200 Subject: [PATCH 05/24] checkout before build --- .github/workflows/prerelease.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 2bb583bcb..4ba7ecad5 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -54,6 +54,8 @@ jobs: steps: + - uses: actions/checkout@v2 + - name: Set tag run: echo IMAGE_TAG=${{ needs.prerelease-version.outputs.tag }} >> $GITHUB_ENV From fbebd8fb3f38e0f68693d7ec941264b91eab976d Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Mon, 11 Oct 2021 13:37:03 +0200 Subject: [PATCH 06/24] add latest tag --- .github/workflows/prerelease.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 4ba7ecad5..863fe3be1 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -77,6 +77,7 @@ jobs: - name: Push to dockerhub run: | + docker tag ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:lastest docker push ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} - name: Push to quay.io From fc08f98287c4dcf7ea97c1519d0b2e9899f5b311 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Mon, 11 Oct 2021 15:06:47 +0200 Subject: [PATCH 07/24] push latest --- .github/workflows/prerelease.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 863fe3be1..4989d0b2b 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -79,6 +79,7 @@ jobs: run: | docker tag ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:lastest docker push ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} + docker push ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:latest - name: Push to quay.io run: | From 03337402e207f53c12108379be70ca95e283afe4 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 15 Oct 2021 15:09:42 +0200 Subject: [PATCH 08/24] add static fix some images fix docker compose --- config/default.yml | 4 +- docker/compose/config.yml | 160 ++++ docker/compose/docker-compose-full.yaml | 122 +++ docker/files/api/Dockerfile | 9 +- docker/files/api/entrypoint.sh | 11 +- docker/files/proxy/Dockerfile | 36 +- docker/files/proxy/entrypoint.sh | 8 + docker/files/trafficserver/Dockerfile | 3 +- docker/files/trafficserver/entrypoint.sh | 18 +- src/lua/cli/read_config.lua | 4 +- src/lua/cli/setup.lua | 38 +- src/lua/proxy/hooks/rewrite.lua | 1 - src/lua/utils/mongo.lua | 2 - src/ruby/static-site/Capfile | 8 + src/ruby/static-site/Gemfile | 41 + src/ruby/static-site/Gemfile.lock | 218 ++++++ src/ruby/static-site/config.rb | 95 +++ src/ruby/static-site/config.ru | 13 + src/ruby/static-site/config/deploy.rb | 30 + .../static-site/config/deploy/production.rb | 61 ++ src/ruby/static-site/config/deploy/staging.rb | 61 ++ .../javascripts/_signup_embed/dependencies.js | 8 + .../javascripts/_signup_embed/rollbar.js.erb | 10 + .../javascripts/_signup_embed/setup.js.erb | 184 +++++ .../assets/javascripts/_vendor/html5shiv.js | 298 +++++++ .../javascripts/_vendor/jquery.iecors.js | 79 ++ .../_vendor/jquery.tableofcontents.js | 312 ++++++++ .../source/assets/javascripts/all.js | 1 + .../source/assets/javascripts/contact.js | 41 + .../assets/javascripts/signup_embed.js.erb | 12 + .../assets/stylesheets/_api_umbrella.scss | 57 ++ .../assets/stylesheets/_shared/_docs.scss | 163 ++++ .../assets/stylesheets/_shared/_popup.scss | 4 + .../stylesheets/_shared/_scaffolding.scss | 24 + .../assets/stylesheets/_shared/_signup.scss | 10 + .../assets/stylesheets/_shared/_syntax.scss | 63 ++ .../source/assets/stylesheets/all.css.scss | 12 + .../source/assets/stylesheets/embed.css.scss | 37 + src/ruby/static-site/source/contact.html.erb | 74 ++ .../static-site/source/docs/api-key.html.md | 25 + .../source/docs/errors.html.md.erb | 124 +++ .../static-site/source/docs/index.html.md.erb | 17 + .../source/docs/rate-limits.html.md | 29 + src/ruby/static-site/source/index.html.erb | 32 + .../static-site/source/layouts/_analytics.erb | 11 + .../source/layouts/_breadcrumbs.erb | 18 + .../source/layouts/_child_links.erb | 10 + .../static-site/source/layouts/_children.erb | 21 + .../static-site/source/layouts/_edit_me.erb | 5 + .../static-site/source/layouts/_footer.erb | 1 + .../static-site/source/layouts/_header.erb | 20 + src/ruby/static-site/source/layouts/blank.erb | 17 + .../static-site/source/layouts/layout.erb | 29 + .../static-site/source/layouts/redirect.erb | 7 + src/ruby/static-site/source/signup.html.erb | 22 + src/ruby/static-site/vendor/.gitkeep | 0 .../web-app/config/initializers/devise.rb | 1 + .../etc/nginx/frontend_defaults.conf.mustache | 6 +- templates/etc/nginx/web-app.conf.mustache | 10 +- .../replica-set.json.mustache | 59 -- .../etc/test-env/nginx/apis.conf.mustache | 733 ------------------ .../etc/test-env/nginx/nginx.conf.mustache | 50 -- .../etc/test-env/openldap/seed.ldif.mustache | 28 - .../etc/test-env/openldap/slapd.ldif.mustache | 32 - .../etc/test-env/unbound/active_test.conf | 2 - .../test-env/unbound/unbound.conf.mustache | 15 - templates/etc/trafficserver/global.lua | 1 - .../etc/trafficserver/records.config.mustache | 7 +- 68 files changed, 2694 insertions(+), 970 deletions(-) create mode 100644 docker/compose/config.yml create mode 100644 docker/compose/docker-compose-full.yaml create mode 100755 docker/files/proxy/entrypoint.sh create mode 100644 src/ruby/static-site/Capfile create mode 100644 src/ruby/static-site/Gemfile create mode 100644 src/ruby/static-site/Gemfile.lock create mode 100644 src/ruby/static-site/config.rb create mode 100644 src/ruby/static-site/config.ru create mode 100644 src/ruby/static-site/config/deploy.rb create mode 100644 src/ruby/static-site/config/deploy/production.rb create mode 100644 src/ruby/static-site/config/deploy/staging.rb create mode 100644 src/ruby/static-site/source/assets/javascripts/_signup_embed/dependencies.js create mode 100644 src/ruby/static-site/source/assets/javascripts/_signup_embed/rollbar.js.erb create mode 100644 src/ruby/static-site/source/assets/javascripts/_signup_embed/setup.js.erb create mode 100644 src/ruby/static-site/source/assets/javascripts/_vendor/html5shiv.js create mode 100644 src/ruby/static-site/source/assets/javascripts/_vendor/jquery.iecors.js create mode 100644 src/ruby/static-site/source/assets/javascripts/_vendor/jquery.tableofcontents.js create mode 100644 src/ruby/static-site/source/assets/javascripts/all.js create mode 100644 src/ruby/static-site/source/assets/javascripts/contact.js create mode 100644 src/ruby/static-site/source/assets/javascripts/signup_embed.js.erb create mode 100644 src/ruby/static-site/source/assets/stylesheets/_api_umbrella.scss create mode 100644 src/ruby/static-site/source/assets/stylesheets/_shared/_docs.scss create mode 100644 src/ruby/static-site/source/assets/stylesheets/_shared/_popup.scss create mode 100644 src/ruby/static-site/source/assets/stylesheets/_shared/_scaffolding.scss create mode 100644 src/ruby/static-site/source/assets/stylesheets/_shared/_signup.scss create mode 100644 src/ruby/static-site/source/assets/stylesheets/_shared/_syntax.scss create mode 100644 src/ruby/static-site/source/assets/stylesheets/all.css.scss create mode 100644 src/ruby/static-site/source/assets/stylesheets/embed.css.scss create mode 100644 src/ruby/static-site/source/contact.html.erb create mode 100644 src/ruby/static-site/source/docs/api-key.html.md create mode 100644 src/ruby/static-site/source/docs/errors.html.md.erb create mode 100644 src/ruby/static-site/source/docs/index.html.md.erb create mode 100644 src/ruby/static-site/source/docs/rate-limits.html.md create mode 100644 src/ruby/static-site/source/index.html.erb create mode 100644 src/ruby/static-site/source/layouts/_analytics.erb create mode 100644 src/ruby/static-site/source/layouts/_breadcrumbs.erb create mode 100644 src/ruby/static-site/source/layouts/_child_links.erb create mode 100644 src/ruby/static-site/source/layouts/_children.erb create mode 100644 src/ruby/static-site/source/layouts/_edit_me.erb create mode 100644 src/ruby/static-site/source/layouts/_footer.erb create mode 100644 src/ruby/static-site/source/layouts/_header.erb create mode 100644 src/ruby/static-site/source/layouts/blank.erb create mode 100644 src/ruby/static-site/source/layouts/layout.erb create mode 100644 src/ruby/static-site/source/layouts/redirect.erb create mode 100644 src/ruby/static-site/source/signup.html.erb create mode 100644 src/ruby/static-site/vendor/.gitkeep delete mode 100644 templates/etc/test-env/mongo-orchestration/replica-set.json.mustache delete mode 100644 templates/etc/test-env/nginx/apis.conf.mustache delete mode 100644 templates/etc/test-env/nginx/nginx.conf.mustache delete mode 100644 templates/etc/test-env/openldap/seed.ldif.mustache delete mode 100644 templates/etc/test-env/openldap/slapd.ldif.mustache delete mode 100644 templates/etc/test-env/unbound/active_test.conf delete mode 100644 templates/etc/test-env/unbound/unbound.conf.mustache diff --git a/config/default.yml b/config/default.yml index 7d5752a0a..469c7741a 100644 --- a/config/default.yml +++ b/config/default.yml @@ -349,8 +349,8 @@ internal_apis: balance_algorithm: least_conn sort_order: 2 servers: - - host: "{{web.host}}" - port: "{{web.port}}" + - host: "{{ember_server.host}}" + port: "{{ember_server.port}}" url_matches: - frontend_prefix: "/api-umbrella/" backend_prefix: "/api-umbrella/" diff --git a/docker/compose/config.yml b/docker/compose/config.yml new file mode 100644 index 000000000..49d764d9b --- /dev/null +++ b/docker/compose/config.yml @@ -0,0 +1,160 @@ +http_port: 8080 +https_port: 8443 +gatekeeper: + api_key_methods: + - fiware-oauth2 + - header + - getParam + - basicAuthUsername + idp_providers: + - fiware-oauth2 +trafficserver: + host: trafficserver + port: 14009 +api_server: + host: proxy + port: 14010 +web: + host: api + port: 14012 +static_site: + host: proxy + port: 14013 +rsyslog: + host: rsyslog + port: 14014 +log: + destination: console +mongodb: + url: "mongodb://mongo-db:27017/api_umbrella" +mora: + host: mora + port: 8181 +elasticsearch: + hosts: + - "http://elasticsearch:9200" +site_name: API Umbrella +internal_apis: + - _id: api-umbrella-gatekeeper-backend + name: API Umbrella - Gatekeeper APIs + frontend_host: "{{router.web_app_host}}" + backend_host: ~ + backend_protocol: http + balance_algorithm: least_conn + sort_order: 1 + servers: + - host: "proxy" + port: "14010" + url_matches: + - frontend_prefix: "/api-umbrella/v1/health" + backend_prefix: "/api-umbrella/v1/health" + - frontend_prefix: "/api-umbrella/v1/state" + backend_prefix: "/api-umbrella/v1/state" + settings: + require_https: required_return_error + sub_settings: + - http_method: get + regex: "^/api-umbrella/v1/(health|state)" + settings: + disable_api_key: true + rate_limit_mode: unlimited + require_https: optional + disable_analytics: true + - _id: api-umbrella-static-site + name: API Umbrella - Static Site + frontend_host: "{{router.web_app_host}}" + backend_host: ~ + backend_protocol: http + balance_algorithm: least_conn + sort_order: 1 + servers: + - host: "proxy" + port: "14013" + url_matches: + - frontend_prefix: "/signup/" + backend_prefix: "/signup/" + - frontend_prefix: "/contact/" + backend_prefix: "/contact/" + settings: + require_https: required_return_error + sub_settings: + - http_method: any + regex: "^/signup/*" + settings: + disable_api_key: true + - http_method: any + regex: "^/contact/*" + settings: + disable_api_key: true + - _id: api-umbrella-api-app-backend + name: API Umbrella - HTTP APIs + frontend_host: "{{router.web_app_host}}" + backend_host: ~ + backend_protocol: http + balance_algorithm: least_conn + sort_order: 2 + servers: + - host: "api" + port: "14012" + url_matches: + - frontend_prefix: "/api-umbrella/" + backend_prefix: "/api-umbrella/" + settings: + require_https: required_return_error + - _id: api-umbrella-web-app-backend + name: API Umbrella - Web App + frontend_host: "{{router.web_app_host}}" + backend_host: ~ + backend_protocol: http + balance_algorithm: least_conn + sort_order: 2 + servers: + - host: "ui" + port: "4200" + url_matches: + - frontend_prefix: "/admin/" + backend_prefix: "/admin/" + - frontend_prefix: "/admin" + backend_prefix: "/admin" + exact_match: true + - frontend_prefix: "/admins/" + backend_prefix: "/admins/" + - frontend_prefix: "/admins" + backend_prefix: "/admins" + exact_match: true + - frontend_prefix: "/web-assets/" + backend_prefix: "/web-assets/" + settings: + require_https: required_return_error + sub_settings: + - http_method: any + regex: "^/admin/stats" + settings: + disable_api_key: true + - http_method: POST + regex: "^/admin/login" + settings: + disable_api_key: true + rate_limit_mode: custom + rate_limits: + - duration: 15000 + accuracy: 1000 + limit_by: ip + limit: 100 + distributed: true + response_headers: true + - http_method: any + regex: "^/(admin|web-assets)" + settings: + disable_api_key: true + rate_limit_mode: unlimited + redirect_https: true + disable_analytics: true +internal_website_backends: + - _id: api-umbrella-website-backend + frontend_host: "{{router.web_app_host}}" + backend_protocol: http + server_host: "{{static_site.host}}" + server_port: "{{static_site.port}}" +ember_server: + port: 4200 \ No newline at end of file diff --git a/docker/compose/docker-compose-full.yaml b/docker/compose/docker-compose-full.yaml new file mode 100644 index 000000000..5a9ee92c0 --- /dev/null +++ b/docker/compose/docker-compose-full.yaml @@ -0,0 +1,122 @@ +version: '3.7' + +services: + + # databases + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:6.8.18 + hostname: elasticsearch + expose: + - "9200" + environment: + - xpack.security.enabled=false + - discovery.type=single-node + networks: + - umbrella-network + + mongo-db: + image: mongo:4.0 + hostname: mongo-db + expose: + - "27017" + command: --nojournal + healthcheck: + test: | + host=`hostname --ip-address || echo '127.0.0.1'`; + mongo --quiet $host/test --eval 'quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)' && echo 0 || echo 1 + interval: 30s + networks: + - umbrella-network + + # umbrella services + proxy: + image: fiware/api-umbrella-proxy:1.0.0-PRE-45 + hostname: proxy + depends_on: + - mongo-db + - elasticsearch + environment: + - API_UMBRELLA_CONFIG=/opt/api-umbrella/config/config.yml + expose: + - "8080" + - "8443" + ports: + - "8080:8080" + - "8443:8443" + volumes: + - ./config.yml:/opt/api-umbrella/config/config.yml + networks: + - umbrella-network + + trafficserver: + image: fiware/api-umbrella-trafficserver:1.0.0-PRE-45 + hostname: trafficserver + depends_on: + - mongo-db + - elasticsearch + expose: + - "14009" + volumes: + - ./config.yml:/config/config.yml + networks: + - umbrella-network + + mora: + image: fiware/api-umbrella-mora:1.0.0-PRE-45 + hostname: mora + depends_on: + - mongo-db + expose: + - "8181" + volumes: + - ./config.yml:/config/config.yml + networks: + - umbrella-network + + rsyslog: + image: fiware/api-umbrella-rsyslog:1.0.0-PRE-45 + hostname: rsyslog + depends_on: + - elasticsearch + expose: + - "14014" + volumes: + - ./config.yml:/config/config.yml + networks: + - umbrella-network + + api: + image: fiware/api-umbrella-api:1.0.0-PRE-45 + hostname: api + depends_on: + - mongo-db + expose: + - "14012" + volumes: + - ./config.yml:/config/config.yml + networks: + - umbrella-network + + static-site: + image: static-site + hostname: static-site + expose: + - "80" + volumes: + - ./config.yml:/config/config.yml + networks: + - umbrella-network + + ui: + image: fiware/api-umbrella-ui:1.0.0-PRE-45 + hostname: ui + depends_on: + - api + expose: + - "4200" + networks: + - umbrella-network + +networks: + umbrella-network: + name: umbrella-network \ No newline at end of file diff --git a/docker/files/api/Dockerfile b/docker/files/api/Dockerfile index 0460ece0d..ddf91c17c 100644 --- a/docker/files/api/Dockerfile +++ b/docker/files/api/Dockerfile @@ -14,13 +14,18 @@ RUN bundle config --local clean true RUN bundle config --local deployment true RUN bundle install -ENV API_UMBRELLA_RUNTIME_CONFIG="/config/config.yml" +ENV API_UMBRELLA_RUNTIME_CONFIG="/config/merged-config.yml" +ENV HOME="/opt/api-umbrella/run" +ENV RACK_ENV=production + +RUN mkdir "/opt/api-umbrella/run" +RUN chmod a+rw "/opt/api-umbrella/run" RUN wget https://github.com/mikefarah/yq/releases/download/v4.2.0/yq_linux_amd64 -O /usr/bin/yq &&\ chmod +x /usr/bin/yq COPY ./src/version.txt /opt/api-umbrella/version.txt -COPY ./config/default.yml /config/config.yml +COPY ./config/default.yml /config/default.yml # copy entrypoint COPY ./docker/files/api/entrypoint.sh /entrypoint.sh diff --git a/docker/files/api/entrypoint.sh b/docker/files/api/entrypoint.sh index b59f82d05..aec5474e3 100755 --- a/docker/files/api/entrypoint.sh +++ b/docker/files/api/entrypoint.sh @@ -1,3 +1,12 @@ #!/bin/bash -bundle exec puma -q --dir /opt/api-umbrella/src -w $(yq e '.web.puma.workers' /config/config.yml) -t$(yq e '.web.puma.min_threads' /config/config.yml):$(yq e '.web.puma.max_threads' /config/config.yml) \ No newline at end of file +if test -f "/config/config.yml"; then + cat /config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + cat /config/default.yml > /config/merged-config.yml +else + cat /config/default.yml > /config/merged-config.yml +fi + +export RAILS_SECRET_TOKEN=$(tr -dc A-Za-z0-9 /templates/logging.yaml -mustache /config/config.yml /templates/plugin.config.mustache > /templates/plugin.config -mustache /config/config.yml /templates/records.config.mustache > /templates/records.config -mustache /config/config.yml /templates/remap.config.mustache > /templates/remap.config -mustache /config/config.yml /templates/storage.config.mustache > /templates/storage.config -mustache /config/config.yml /templates/records.config.mustache +wget https://github.com/mikefarah/yq/releases/download/v4.2.0/yq_linux_amd64 -O /templates/config/yq &&\ + chmod +x /templates/config/yq \ + +cat /config/config.yml | /templates/config/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - +cat /config/default.yml > /config/merged-config.yml + +mustache /config/merged-config.yml /templates/logging.yaml.mustache > /templates/logging.yaml +mustache /config/merged-config.yml /templates/plugin.config.mustache > /templates/plugin.config +mustache /config/merged-config.yml /templates/records.config.mustache > /templates/records.config +mustache /config/merged-config.yml /templates/remap.config.mustache > /templates/remap.config +mustache /config/merged-config.yml /templates/storage.config.mustache > /templates/storage.config +mustache /config/merged-config.yml /templates/records.config.mustache cp -a /templates/. /opt/ts/etc/trafficserver/ /opt/ts/bin/traffic_manager \ No newline at end of file diff --git a/src/lua/cli/read_config.lua b/src/lua/cli/read_config.lua index 243301f46..42bfd31af 100644 --- a/src/lua/cli/read_config.lua +++ b/src/lua/cli/read_config.lua @@ -454,8 +454,8 @@ local function set_computed_config() }, }, static_site = { - dir = path.join(embedded_root_dir, "apps/static-site/current"), - build_dir = path.join(embedded_root_dir, "apps/static-site/current/build"), + dir = "/opt/api-umbrella/static", + build_dir = "/opt/api-umbrella/static" }, }) diff --git a/src/lua/cli/setup.lua b/src/lua/cli/setup.lua index 4df8e5297..beb92a611 100644 --- a/src/lua/cli/setup.lua +++ b/src/lua/cli/setup.lua @@ -221,24 +221,24 @@ local function write_templates() end end ---local function write_static_site_key() --- local file_paths = { --- path.join(config["static_site"]["build_dir"], "contact/index.html"), --- path.join(config["static_site"]["build_dir"], "signup/index.html"), --- } --- for _, file_path in ipairs(file_paths) do --- if not path.exists(file_path) then --- print("File does not exist: " .. file_path) --- os.exit(1) --- end --- --- local content = file.read(file_path) --- local new_content, replacements = string.gsub(content, "apiKey: '.-'", "apiKey: '" .. config["static_site"]["api_key"] .. "'") --- if replacements > 0 then --- file.write(file_path, new_content) --- end --- end ---end +local function write_static_site_key() + local file_paths = { + path.join(config["static_site"]["build_dir"], "contact/index.html"), + path.join(config["static_site"]["build_dir"], "signup/index.html"), + } + for _, file_path in ipairs(file_paths) do + if not path.exists(file_path) then + print("File does not exist: " .. file_path) + os.exit(1) + end + + local content = file.read(file_path) + local new_content, replacements = string.gsub(content, "apiKey: '.-'", "apiKey: '" .. config["static_site"]["api_key"] .. "'") + if replacements > 0 then + file.write(file_path, new_content) + end + end +end local function set_permissions() chmod(config["tmp_dir"], tonumber("1777", 8)) @@ -368,7 +368,7 @@ return function() generate_auto_ssl_fallback_cert() ensure_geoip_db() write_templates() - --write_static_site_key() + write_static_site_key() set_permissions() activate_services() diff --git a/src/lua/proxy/hooks/rewrite.lua b/src/lua/proxy/hooks/rewrite.lua index fd6d68fc7..786a32d98 100644 --- a/src/lua/proxy/hooks/rewrite.lua +++ b/src/lua/proxy/hooks/rewrite.lua @@ -87,7 +87,6 @@ local function route_to_api(api, url_match) ngx.ctx.matched_api = api ngx.ctx.matched_api_url_match = url_match - route() end diff --git a/src/lua/utils/mongo.lua b/src/lua/utils/mongo.lua index b33ba9d52..905e374c1 100644 --- a/src/lua/utils/mongo.lua +++ b/src/lua/utils/mongo.lua @@ -15,11 +15,9 @@ local function try_query(path, http_options) http_options = {} end http_options["path"] = "/docs/api_umbrella/" .. config["mongodb"]["_database"] .. "/" .. path - local httpc = http.new() httpc:set_timeout(45000) httpc:connect(config["mora"]["host"], config["mora"]["port"]) - local res, err = httpc:request(http_options) if err then err = "mongodb query failed: " .. err diff --git a/src/ruby/static-site/Capfile b/src/ruby/static-site/Capfile new file mode 100644 index 000000000..66d962eaf --- /dev/null +++ b/src/ruby/static-site/Capfile @@ -0,0 +1,8 @@ +# Load DSL and Setup Up Stages +require "capistrano/setup" + +# Includes default deployment tasks +require "capistrano/deploy" + +# Loads custom tasks from `lib/capistrano/tasks" if you have any defined. +Dir.glob("lib/capistrano/tasks/*.rake").each { |r| import r } diff --git a/src/ruby/static-site/Gemfile b/src/ruby/static-site/Gemfile new file mode 100644 index 000000000..dd70ebe14 --- /dev/null +++ b/src/ruby/static-site/Gemfile @@ -0,0 +1,41 @@ +source "https://rubygems.org" + +# Middleman Gems +gem "middleman", "~> 4.3.3" +gem "middleman-livereload", "~> 3.4.6" + +# Environment specific config with environment variables +gem "dotenv", "~> 2.7.2" + +# Syntax highlighting +gem "middleman-syntax", "~> 3.0.0" + +# Deploy to GitHub Pages +gem "middleman-gh-pages", "~> 0.4.1" + +# Assets +gem "middleman-sprockets", "~> 4.1.0" +gem "sprockets", "< 4" + +# Bootstrap +gem "bootstrap", "~> 4.3.1" + +# Icons +gem "font-awesome-sass", "~> 4.7.0" + +source "https://rails-assets.org" do + # jQuery + gem "rails-assets-jquery", "~> 3.4.0" + + # Programmatic bootstrap modals + gem "rails-assets-bootbox", "~> 5.1.1" + + # Form validation + gem "rails-assets-parsleyjs", "~> 2.9.0" +end + +group :development do + # Deployment + gem "capistrano", "~> 3.11.0" + gem "capistrano-rsync-bladrak", "~> 1.4.2" +end diff --git a/src/ruby/static-site/Gemfile.lock b/src/ruby/static-site/Gemfile.lock new file mode 100644 index 000000000..c325ce06a --- /dev/null +++ b/src/ruby/static-site/Gemfile.lock @@ -0,0 +1,218 @@ +GEM + remote: https://rubygems.org/ + remote: https://rails-assets.org/ + specs: + actionpack (5.0.7.2) + actionview (= 5.0.7.2) + activesupport (= 5.0.7.2) + rack (~> 2.0) + rack-test (~> 0.6.3) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.2) + actionview (5.0.7.2) + activesupport (= 5.0.7.2) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 2.0) + rails-html-sanitizer (~> 1.0, >= 1.0.3) + activesupport (5.0.7.2) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 0.7, < 2) + minitest (~> 5.1) + tzinfo (~> 1.1) + addressable (2.7.0) + public_suffix (>= 2.0.2, < 5.0) + airbrussh (1.4.0) + sshkit (>= 1.6.1, != 1.7.0) + autoprefixer-rails (9.7.5) + execjs + backports (3.17.0) + bootstrap (4.3.1) + autoprefixer-rails (>= 9.1.0) + popper_js (>= 1.14.3, < 2) + sassc-rails (>= 2.0.0) + builder (3.2.4) + capistrano (3.11.2) + airbrussh (>= 1.0.0) + i18n + rake (>= 10.0.0) + sshkit (>= 1.9.0) + capistrano-rsync-bladrak (1.4.2) + capistrano (>= 3.0.0.pre14, < 4) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.12.2) + concurrent-ruby (1.1.6) + contracts (0.13.0) + crass (1.0.6) + dotenv (2.7.5) + em-websocket (0.5.1) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0.6.0) + erubis (2.7.0) + eventmachine (1.2.7) + execjs (2.7.0) + fast_blank (1.0.0) + fastimage (2.1.7) + ffi (1.12.2) + font-awesome-sass (4.7.0) + sass (>= 3.2) + haml (5.1.2) + temple (>= 0.8.0) + tilt + hamster (3.0.0) + concurrent-ruby (~> 1.0) + hashie (3.6.0) + http_parser.rb (0.6.0) + i18n (0.9.5) + concurrent-ruby (~> 1.0) + kramdown (1.17.0) + listen (3.0.8) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + loofah (2.4.0) + crass (~> 1.0.2) + nokogiri (>= 1.5.9) + memoist (0.16.2) + method_source (1.0.0) + middleman (4.3.6) + coffee-script (~> 2.2) + haml (>= 4.0.5) + kramdown (~> 1.2) + middleman-cli (= 4.3.6) + middleman-core (= 4.3.6) + middleman-cli (4.3.6) + thor (>= 0.17.0, < 2.0) + middleman-core (4.3.6) + activesupport (>= 4.2, < 5.1) + addressable (~> 2.3) + backports (~> 3.6) + bundler + contracts (~> 0.13.0) + dotenv + erubis + execjs (~> 2.0) + fast_blank + fastimage (~> 2.0) + hamster (~> 3.0) + hashie (~> 3.4) + i18n (~> 0.9.0) + listen (~> 3.0.0) + memoist (~> 0.14) + padrino-helpers (~> 0.13.0) + parallel + rack (>= 1.4.5, < 3) + sassc (~> 2.0) + servolux + tilt (~> 2.0.9) + uglifier (~> 3.0) + middleman-gh-pages (0.4.1) + rake (> 0.9.3) + middleman-livereload (3.4.6) + em-websocket (~> 0.5.1) + middleman-core (>= 3.3) + rack-livereload (~> 0.3.15) + middleman-sprockets (4.1.1) + middleman-core (~> 4.0) + sprockets (>= 3.0) + middleman-syntax (3.0.0) + middleman-core (>= 3.2) + rouge (~> 2.0) + mini_portile2 (2.4.0) + minitest (5.14.0) + net-scp (2.0.0) + net-ssh (>= 2.6.5, < 6.0.0) + net-ssh (5.2.0) + nokogiri (1.10.9) + mini_portile2 (~> 2.4.0) + padrino-helpers (0.13.3.4) + i18n (~> 0.6, >= 0.6.7) + padrino-support (= 0.13.3.4) + tilt (>= 1.4.1, < 3) + padrino-support (0.13.3.4) + activesupport (>= 3.1) + parallel (1.19.1) + popper_js (1.16.0) + public_suffix (4.0.3) + rack (2.2.2) + rack-livereload (0.3.17) + rack + rack-test (0.6.3) + rack (>= 1.0) + rails-assets-bootbox (5.1.3) + rails-assets-bootstrap (>= 3.3.7) + rails-assets-bootstrap (4.3.1) + rails-assets-jquery (3.4.1) + rails-assets-parsleyjs (2.9.0) + rails-assets-jquery (> 1.8) + rails-dom-testing (2.0.3) + activesupport (>= 4.2.0) + nokogiri (>= 1.6) + rails-html-sanitizer (1.3.0) + loofah (~> 2.3) + railties (5.0.7.2) + actionpack (= 5.0.7.2) + activesupport (= 5.0.7.2) + method_source + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rake (13.0.1) + rb-fsevent (0.10.3) + rb-inotify (0.10.1) + ffi (~> 1.0) + rouge (2.2.1) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sassc (2.2.1) + ffi (~> 1.9) + sassc-rails (2.1.2) + railties (>= 4.0.0) + sassc (>= 2.0) + sprockets (> 3.0) + sprockets-rails + tilt + servolux (0.13.0) + sprockets (3.7.2) + concurrent-ruby (~> 1.0) + rack (> 1, < 3) + sprockets-rails (3.2.1) + actionpack (>= 4.0) + activesupport (>= 4.0) + sprockets (>= 3.0.0) + sshkit (1.21.0) + net-scp (>= 1.1.2) + net-ssh (>= 2.8.0) + temple (0.8.2) + thor (1.0.1) + thread_safe (0.3.6) + tilt (2.0.10) + tzinfo (1.2.6) + thread_safe (~> 0.1) + uglifier (3.2.0) + execjs (>= 0.3.0, < 3) + +PLATFORMS + ruby + +DEPENDENCIES + bootstrap (~> 4.3.1) + capistrano (~> 3.11.0) + capistrano-rsync-bladrak (~> 1.4.2) + dotenv (~> 2.7.2) + font-awesome-sass (~> 4.7.0) + middleman (~> 4.3.3) + middleman-gh-pages (~> 0.4.1) + middleman-livereload (~> 3.4.6) + middleman-sprockets (~> 4.1.0) + middleman-syntax (~> 3.0.0) + rails-assets-bootbox (~> 5.1.1)! + rails-assets-jquery (~> 3.4.0)! + rails-assets-parsleyjs (~> 2.9.0)! + sprockets (< 4) + +BUNDLED WITH + 1.17.3 diff --git a/src/ruby/static-site/config.rb b/src/ruby/static-site/config.rb new file mode 100644 index 000000000..d5da61ffe --- /dev/null +++ b/src/ruby/static-site/config.rb @@ -0,0 +1,95 @@ +### +# Page options, layouts, aliases and proxies +### + +# Per-page layout changes: +# +# With no layout +page "/*.xml", layout: false +page "/*.json", layout: false +page "/*.txt", layout: false + +# With alternative layout +# page "/path/to/file.html", layout: :otherlayout + +# Proxy pages (http://middlemanapp.com/basics/dynamic-pages/) +# proxy "/this-page-has-no-template.html", "/template-file.html", locals: { +# which_fake_page: "Rendering a fake page with a local variable" } + +page "/404.html", :directory_index => false + +# General configuration + +activate :sprockets do |c| + c.imported_asset_path = "assets" + c.expose_middleman_helpers = true +end +activate :directory_indexes +activate :syntax + +set :css_dir, "assets/stylesheets" +set :js_dir, "assets/javascripts" +set :fonts_dir, "assets/fonts" +set :images_dir, "assets/images" + +set :markdown_engine, :kramdown +set :markdown, { + :input => "GFM", + :smart_quotes => ["apos", "apos", "quot", "quot"], +} + +# Reload the browser automatically whenever files change +configure :development do + if(ENV["MIDDLEMAN_LIVERELOAD_PORT"] && ENV["MIDDLEMAN_LIVERELOAD_JS_HOST"]) + activate :livereload, :port => ENV["MIDDLEMAN_LIVERELOAD_PORT"], :js_host => ENV["MIDDLEMAN_LIVERELOAD_JS_HOST"] + else + activate :livereload + end +end + +### +# Helpers +### + +# Methods defined in the helpers block are available in templates +helpers do + def breadcrumbs_trail + page = current_page + trail = [page] + + while(page = page.parent) + unless(page.data.disable_in_breadcrumbs_trail) + trail << page + end + end + + trail.reverse + end +end + +# Shift the ".woff2" file extension to come before ".woff" to fix asset_hash +# getting confused. +# +# Note that this is an older issue, but it seems to still crop up when the +# "relative_assets" plugin is enabled: +# https://github.com/middleman/middleman/issues/1496 +# https://github.com/middleman/middleman/pull/1533 +config[:asset_extensions] = [".woff2"] + (config[:asset_extensions] - [".woff2"]) + +# Build-specific configuration +configure :build do + # Minify CSS on build + activate :minify_css + + # Minify Javascript on build + activate :minify_javascript + + # Enable cache buster + activate :asset_hash, :ignore => [ + # Don't cache-bust the embed javascript file, since its references need to + # be hardcoded. + %r{signup_embed.js}, + ] +end + +activate :relative_assets diff --git a/src/ruby/static-site/config.ru b/src/ruby/static-site/config.ru new file mode 100644 index 000000000..b1d13a542 --- /dev/null +++ b/src/ruby/static-site/config.ru @@ -0,0 +1,13 @@ +require 'middleman-core/load_paths' +::Middleman.setup_load_paths + +require 'middleman-core' +require 'middleman-core/rack' + +require 'fileutils' +FileUtils.mkdir('log') unless File.exist?('log') +::Middleman::Logger.singleton("log/#{ENV['RACK_ENV']}.log") + +app = ::Middleman::Application.new + +run ::Middleman::Rack.new(app).to_app diff --git a/src/ruby/static-site/config/deploy.rb b/src/ruby/static-site/config/deploy.rb new file mode 100644 index 000000000..6942420d7 --- /dev/null +++ b/src/ruby/static-site/config/deploy.rb @@ -0,0 +1,30 @@ +# config valid only for current version of Capistrano +lock "~> 3.11.0" + +set :application, "static-site" +set :repo_url, "https://github.com/NREL/api-umbrella-static-site.git" +set :branch, "master" + +set :scm, :rsync +set :rsync_options, [ + "--archive", + "--verbose", + "--compress", + "--delete-after", + "--delete-excluded", + "--exclude", ".git*", + "--exclude", "source", +] + +set :deploy_to, "/opt/api-umbrella/embedded/apps/static-site" + +namespace :middleman do + task :build do + run_locally do + Dir.chdir(fetch(:rsync_stage)) do + execute "bundle", "exec", "middleman", "build", "--verbose" + end + end + end +end +after "rsync:stage_done", "middleman:build" diff --git a/src/ruby/static-site/config/deploy/production.rb b/src/ruby/static-site/config/deploy/production.rb new file mode 100644 index 000000000..4fc06fa92 --- /dev/null +++ b/src/ruby/static-site/config/deploy/production.rb @@ -0,0 +1,61 @@ +# server-based syntax +# ====================== +# Defines a single server with a list of roles and multiple properties. +# You can define all roles on a single server, or split them: + +# server 'example.com', user: 'deploy', roles: %w{app db web}, my_property: :my_value +# server 'example.com', user: 'deploy', roles: %w{app web}, other_property: :other_value +# server 'db.example.com', user: 'deploy', roles: %w{db} + + + +# role-based syntax +# ================== + +# Defines a role with one or multiple servers. The primary server in each +# group is considered to be the first unless any hosts have the primary +# property set. Specify the username and a domain or IP for the server. +# Don't use `:all`, it's a meta role. + +# role :app, %w{deploy@example.com}, my_property: :my_value +# role :web, %w{user1@primary.com user2@additional.com}, other_property: :other_value +# role :db, %w{deploy@example.com} + + + +# Configuration +# ============= +# You can set any configuration variable like in config/deploy.rb +# These variables are then only loaded and set in this stage. +# For available Capistrano configuration variables see the documentation page. +# http://capistranorb.com/documentation/getting-started/configuration/ +# Feel free to add new variables to customise your setup. + + + +# Custom SSH Options +# ================== +# You may pass any option but keep in mind that net/ssh understands a +# limited set of options, consult the Net::SSH documentation. +# http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start +# +# Global options +# -------------- +# set :ssh_options, { +# keys: %w(/home/rlisowski/.ssh/id_rsa), +# forward_agent: false, +# auth_methods: %w(password) +# } +# +# The server-based syntax can be used to override options: +# ------------------------------------ +# server 'example.com', +# user: 'user_name', +# roles: %w{web app}, +# ssh_options: { +# user: 'user_name', # overrides user setting above +# keys: %w(/home/user_name/.ssh/id_rsa), +# forward_agent: false, +# auth_methods: %w(publickey password) +# # password: 'please use keys' +# } diff --git a/src/ruby/static-site/config/deploy/staging.rb b/src/ruby/static-site/config/deploy/staging.rb new file mode 100644 index 000000000..4fc06fa92 --- /dev/null +++ b/src/ruby/static-site/config/deploy/staging.rb @@ -0,0 +1,61 @@ +# server-based syntax +# ====================== +# Defines a single server with a list of roles and multiple properties. +# You can define all roles on a single server, or split them: + +# server 'example.com', user: 'deploy', roles: %w{app db web}, my_property: :my_value +# server 'example.com', user: 'deploy', roles: %w{app web}, other_property: :other_value +# server 'db.example.com', user: 'deploy', roles: %w{db} + + + +# role-based syntax +# ================== + +# Defines a role with one or multiple servers. The primary server in each +# group is considered to be the first unless any hosts have the primary +# property set. Specify the username and a domain or IP for the server. +# Don't use `:all`, it's a meta role. + +# role :app, %w{deploy@example.com}, my_property: :my_value +# role :web, %w{user1@primary.com user2@additional.com}, other_property: :other_value +# role :db, %w{deploy@example.com} + + + +# Configuration +# ============= +# You can set any configuration variable like in config/deploy.rb +# These variables are then only loaded and set in this stage. +# For available Capistrano configuration variables see the documentation page. +# http://capistranorb.com/documentation/getting-started/configuration/ +# Feel free to add new variables to customise your setup. + + + +# Custom SSH Options +# ================== +# You may pass any option but keep in mind that net/ssh understands a +# limited set of options, consult the Net::SSH documentation. +# http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start +# +# Global options +# -------------- +# set :ssh_options, { +# keys: %w(/home/rlisowski/.ssh/id_rsa), +# forward_agent: false, +# auth_methods: %w(password) +# } +# +# The server-based syntax can be used to override options: +# ------------------------------------ +# server 'example.com', +# user: 'user_name', +# roles: %w{web app}, +# ssh_options: { +# user: 'user_name', # overrides user setting above +# keys: %w(/home/user_name/.ssh/id_rsa), +# forward_agent: false, +# auth_methods: %w(publickey password) +# # password: 'please use keys' +# } diff --git a/src/ruby/static-site/source/assets/javascripts/_signup_embed/dependencies.js b/src/ruby/static-site/source/assets/javascripts/_signup_embed/dependencies.js new file mode 100644 index 000000000..1a8e98cc4 --- /dev/null +++ b/src/ruby/static-site/source/assets/javascripts/_signup_embed/dependencies.js @@ -0,0 +1,8 @@ +//= require jquery/jquery.js +//= require _vendor/jquery.iecors.js +//= require popper.js +//= require bootstrap/util.js +//= require bootstrap/button.js +//= require bootstrap/modal.js +//= require parsleyjs.js +//= require bootbox.js diff --git a/src/ruby/static-site/source/assets/javascripts/_signup_embed/rollbar.js.erb b/src/ruby/static-site/source/assets/javascripts/_signup_embed/rollbar.js.erb new file mode 100644 index 000000000..7ef711301 --- /dev/null +++ b/src/ruby/static-site/source/assets/javascripts/_signup_embed/rollbar.js.erb @@ -0,0 +1,10 @@ +<% if(build?) %> +var _rollbarConfig = { + accessToken: "5bb5c183c8684778b9b01a6067c125bb", + captureUncaught: true, + payload: { + environment: "production" + } +}; +!function(a,b){function c(b){this.shimId=++h,this.notifier=null,this.parentShim=b,this.logger=function(){},a.console&&void 0===a.console.shimId&&(this.logger=a.console.log)}function d(b,c,d){!d[4]&&a._rollbarWrappedError&&(d[4]=a._rollbarWrappedError,a._rollbarWrappedError=null),b.uncaughtError.apply(b,d),c&&c.apply(a,d)}function e(b){var d=c;return g(function(){if(this.notifier)return this.notifier[b].apply(this.notifier,arguments);var c=this,e="scope"===b;e&&(c=new d(this));var f=Array.prototype.slice.call(arguments,0),g={shim:c,method:b,args:f,ts:new Date};return a._rollbarShimQueue.push(g),e?c:void 0})}function f(a,b){if(b.hasOwnProperty&&b.hasOwnProperty("addEventListener")){var c=b.addEventListener;b.addEventListener=function(b,d,e){c.call(this,b,a.wrap(d),e)};var d=b.removeEventListener;b.removeEventListener=function(a,b,c){d.call(this,a,b._wrapped||b,c)}}}function g(a,b){return b=b||this.logger,function(){try{return a.apply(this,arguments)}catch(c){b("Rollbar internal error:",c)}}}var h=0;c.init=function(a,b){var e=b.globalAlias||"Rollbar";if("object"==typeof a[e])return a[e];a._rollbarShimQueue=[],a._rollbarWrappedError=null,b=b||{};var h=new c;return g(function(){if(h.configure(b),b.captureUncaught){var c=a.onerror;a.onerror=function(){var a=Array.prototype.slice.call(arguments,0);d(h,c,a)};var g,i,j=["EventTarget","Window","Node","ApplicationCache","AudioTrackList","ChannelMergerNode","CryptoOperation","EventSource","FileReader","HTMLUnknownElement","IDBDatabase","IDBRequest","IDBTransaction","KeyOperation","MediaController","MessagePort","ModalWindow","Notification","SVGElementInstance","Screen","TextTrack","TextTrackCue","TextTrackList","WebSocket","WebSocketWorker","Worker","XMLHttpRequest","XMLHttpRequestEventTarget","XMLHttpRequestUpload"];for(g=0;g diff --git a/src/ruby/static-site/source/assets/javascripts/_signup_embed/setup.js.erb b/src/ruby/static-site/source/assets/javascripts/_signup_embed/setup.js.erb new file mode 100644 index 000000000..632a6a649 --- /dev/null +++ b/src/ruby/static-site/source/assets/javascripts/_signup_embed/setup.js.erb @@ -0,0 +1,184 @@ +var style = document.createElement('link'); style.rel = 'stylesheet'; style.type = 'text/css'; +var webSiteRoot = '<%= ENV["WEB_SITE_ROOT"] %>'; +style.href = webSiteRoot + '<%= File.join("/", app.config.css_dir, File.basename(asset_path(:css, "embed.css"))) %>'; +(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(style); + +var defaults = { + containerSelector: '#api_umbrella_signup', + apiUrlRoot: '<%= ENV["WEB_SITE_ROOT"] %>/api-umbrella', + contactUrl: '<%= ENV["WEB_SITE_ROOT"] %>/contact/', + exampleApiUrl: '<%= ENV["WEB_SITE_ROOT"] %>/example.json?api_key={{api_key}}', + signupConfirmationMessage: '', + sendWelcomeEmail: true, + websiteInput: false, + termsCheckbox: true, + termsUrl: '<%= ENV["WEB_SITE_ROOT"] %>/terms/', + verifyEmail: false +}; + +var options = $.extend({}, defaults, apiUmbrellaSignupOptions || {}); + +if(!options.apiKey) { + alert('apiUmbrellaSignupOptions.apiKey must be set'); +} + +if(!options.registrationSource) { + alert('apiUmbrellaSignupOptions.registrationSource must be set'); +} + +bootbox.setDefaults({ + container: options.containerSelector +}); + +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', +}; + +function escapeHtml(string) { + return String(string).replace(/[&<>"']/g, function(s) { + return htmlEscapes[s]; + }); +} + +var signupFormTemplate = '

Sign up for an application programming interface (API) key to access and use web services available on the Data.gov developer network.

' + +'

* Required fields

' + + '
' + + '
' + + '' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + + '
' + + '' + + '
' + + '
' + + '
' + + '' + + '
' + + '' + + '
' + + '
'; + +if(options.websiteInput) { + signupFormTemplate += '
' + + '' + + '
' + + '' + + '
' + + '
'; +} + +signupFormTemplate += '
' + + '' + + '
' + + '' + + '
' + + '
'; + +if(options.termsCheckbox) { + signupFormTemplate += '
' + + '
' + + '
' + + '' + + '
' + + '
' + + '
'; +} else { + signupFormTemplate += ''; +} + +signupFormTemplate += '
' + + '
' + + '' + + '' + + '
' + + '
' + + '
'; + +var container = $(options.containerSelector); +container.addClass('api-umbrella-embed'); +container.html(signupFormTemplate); + +var form = container.find('form'); +form.parsley(); +form.submit(function(event) { + var submit = $(this).find('button'); + submit.button('loading'); + + event.preventDefault(); + + if(options.contactUrl && options.contactUrl.indexOf('@') !== -1 && options.contactUrl.indexOf('mailto:') === -1) { + options.contactUrl = 'mailto:' + options.contactUrl; + } + + var data = $(this).serializeArray(); + data.push({ name: 'options[example_api_url]', value: options.exampleApiUrl }); + data.push({ name: 'options[contact_url]', value: options.contactUrl }); + data.push({ name: 'options[site_name]', value: options.siteName }); + data.push({ name: 'options[send_welcome_email]', value: options.sendWelcomeEmail }); + data.push({ name: 'options[email_from_name]', value: options.emailFromName }); + data.push({ name: 'options[email_from_address]', value: options.emailFromAddress }); + data.push({ name: 'options[verify_email]', value: options.verifyEmail }); + + $.ajax({ + url: options.apiUrlRoot + '/v1/users.json?api_key=' + options.apiKey, + type: 'POST', + data: data, + dataType: 'json', + crossDomain: true, + }).done(function(response) { + var user = response.user; + var exampleApiUrl = escapeHtml(options.exampleApiUrl).replace('{{api_key}}', user.api_key); + var formattedExampleApiUrl = escapeHtml(options.exampleApiUrl).replace('api_key={{api_key}}', 'api_key=' + escapeHtml(user.api_key) + ''); + + var confirmationTemplate = ''; + if(options.verifyEmail) { + confirmationTemplate += '

Your API key for ' + escapeHtml(user.email) + ' has been e-mailed to you. You can use your API key to begin making web service requests immediately.

'; + confirmationTemplate += '

If you don\'t receive your API Key via e-mail within a few minutes, please contact us.

'; + } else { + confirmationTemplate += '

Your API key for ' + escapeHtml(user.email) + ' is:

' + + '' + + '

You can start using this key to make web service requests. Simply pass your key in the URL when making a web request. Here\'s an example:

' + + ''; + } + + confirmationTemplate += options.signupConfirmationMessage + + ''; + + $(options.containerSelector).html(confirmationTemplate); + $(options.containerSelector)[0].scrollIntoView(); + }).fail(function(xhr, message, error) { + var messages = [], + messageStr = ''; + if(typeof(Rollbar) != 'undefined') { + Rollbar.error('Unexpected signup failure', { error: error, message: message, response: xhr.responseText }); + } + + if (xhr.responseJSON && xhr.responseJSON.errors) { + $.each(xhr.responseJSON.errors, function(idx, error) { + if (error.message) { + messages.push(escapeHtml(error.message)); + } + }); + } + if (messages) { + messageStr = '
  • ' + messages.join('
  • ') + '
'; + } + + bootbox.alert('API key signup unexpectedly failed.' + messageStr + '
Please try again or contact us for assistance.'); + }).always(function() { + submit.button('reset'); + }); +}); + diff --git a/src/ruby/static-site/source/assets/javascripts/_vendor/html5shiv.js b/src/ruby/static-site/source/assets/javascripts/_vendor/html5shiv.js new file mode 100644 index 000000000..9c6f18e8f --- /dev/null +++ b/src/ruby/static-site/source/assets/javascripts/_vendor/html5shiv.js @@ -0,0 +1,298 @@ +/** +* @preserve HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +;(function(window, document) { +/*jshint evil:true */ + /** version */ + var version = '3.6.2pre'; + + /** Preset options */ + var options = window.html5 || {}; + + /** Used to skip problem elements */ + var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; + + /** Not all elements can be cloned in IE **/ + var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i; + + /** Detect whether the browser supports default html5 styles */ + var supportsHtml5Styles; + + /** Name of the expando, to work with multiple documents or to re-shiv one document */ + var expando = '_html5shiv'; + + /** The id for the the documents expando */ + var expanID = 0; + + /** Cached data for each document */ + var expandoData = {}; + + /** Detect whether the browser supports unknown elements */ + var supportsUnknownElements; + + (function() { + try { + var a = document.createElement('a'); + a.innerHTML = ''; + //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles + supportsHtml5Styles = ('hidden' in a); + + supportsUnknownElements = a.childNodes.length == 1 || (function() { + // assign a false positive if unable to shiv + (document.createElement)('a'); + var frag = document.createDocumentFragment(); + return ( + typeof frag.cloneNode == 'undefined' || + typeof frag.createDocumentFragment == 'undefined' || + typeof frag.createElement == 'undefined' + ); + }()); + } catch(e) { + supportsHtml5Styles = true; + supportsUnknownElements = true; + } + + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a style sheet with the given CSS text and adds it to the document. + * @private + * @param {Document} ownerDocument The document. + * @param {String} cssText The CSS text. + * @returns {StyleSheet} The style element. + */ + function addStyleSheet(ownerDocument, cssText) { + var p = ownerDocument.createElement('p'), + parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; + + p.innerHTML = 'x'; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Returns the data associated to the given document + * @private + * @param {Document} ownerDocument The document. + * @returns {Object} An object of data. + */ + function getExpandoData(ownerDocument) { + var data = expandoData[ownerDocument[expando]]; + if (!data) { + data = {}; + expanID++; + ownerDocument[expando] = expanID; + expandoData[expanID] = data; + } + return data; + } + + /** + * returns a shived element for the given nodeName and document + * @memberOf html5 + * @param {String} nodeName name of the element + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived element. + */ + function createElement(nodeName, ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createElement(nodeName); + } + if (!data) { + data = getExpandoData(ownerDocument); + } + var node; + + if (data.cache[nodeName]) { + node = data.cache[nodeName].cloneNode(); + } else if (saveClones.test(nodeName)) { + node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); + } else { + node = data.createElem(nodeName); + } + + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + return node.canHaveChildren && !reSkip.test(nodeName) ? data.frag.appendChild(node) : node; + } + + /** + * returns a shived DocumentFragment for the given document + * @memberOf html5 + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived DocumentFragment. + */ + function createDocumentFragment(ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createDocumentFragment(); + } + data = data || getExpandoData(ownerDocument); + var clone = data.frag.cloneNode(), + i = 0, + elems = getElements(), + l = elems.length; + for(;i 0 || ( i == 0 && depth != base.current_depth)){ + + base.changeDepth(depth) + }; + + // Add the TOC link + base.toc += base.formatLink(this, depth, i) + "\n"; + + // Add the topLink if enabled + if(base.options.topLinks !== false) base.addTopLink(this); + }); + + // Close up any nested list + base.changeDepth(base.starting_depth, true); + + // Wrap entire TOC in an LI if item was nested. + if(base.tieredList()) base.toc = "
  • \n" + base.toc + "
  • \n"; + + // Update the TOC element with the completed TOC + base.$el.html(base.toc); + }; + + base.addTopLink = function(element){ + // Get the text for the link (if topLinks === true, it defaults to "Top") + var text = (base.options.topLinks === true ? "Top" : base.options.topLinks ); + var $a = $("").html(text); + + // Append to the current Header element + $(element).append($a); + }; + + base.formatLink = function(element, depth, index){ + // Get the current id of the header element + var id = element.id; + + // If no id exisits, create a unique one + if(id == ""){ + id = base.buildSlug($(element).text()); + element.id = id; + }; + + // Start building the a link + var a = "'; + return a; + }; + + base.changeDepth = function(new_depth, last){ + if(last !== true) last = false; + + // If straight links, just change depth and return + if(!base.tieredList()){ + base.current_depth = new_depth; + return true; + }; + + // If nested + if(new_depth > base.current_depth){ + // Add enough opening tags to step into the heading + // as it is possible that a poorly built document + // steps from h1 to h3 without an h2 + var opening_tags = []; + for(var i = base.current_depth; i < new_depth; i++){ + opening_tags.push('<' + base.listStyle + '>' + "\n"); + }; + var li = "
  • \n"; + + // Add the code to our TOC and an opening LI + base.toc += opening_tags.join(li) + li; + + } else if (new_depth < base.current_depth){ + // Close all the loops + var closing_tags = []; + for(var i = base.current_depth; i > new_depth; i--){ + closing_tags.push('' + "\n"); + }; + + // Add closing LI and any additional closing tags + base.toc += "
  • \n" + closing_tags.join('' + "\n"); + + // Open next block + if (!last) { + base.toc += "\n
  • \n"; + } + } else { + // Just close a tag and open a new one + // since the depth has not changed + if (!last) { + base.toc += "
  • \n
  • \n"; + } + }; + + // Store the new depth + base.current_depth = new_depth; + }; + + base.buildSlug = function(text){ + text = text.toLowerCase().replace(/[^a-z0-9 -]/gi,'').replace(/ /gi,'-'); + text = text.substr(0,50); + return text; + }; + + base.depthClass = function(depth){ + // Normalizes the depths to always start at 1, even if the starting tier is a h4 + return base.options.levelClass.replace('%', (depth - ( base.starting_depth - 1 ) ) ); + }; + + base.addSpacing = function(){ + var start = base.$headings.filter(':first').position().top; + + base.$headings.each(function(i,el){ + var $a = base.$el.find('a:eq(' + i + ')'); + var pos = ( + ( $(this).position().top - start ) / + ( base.$scope.height() - start ) + ) * base.$el.height(); + $a.css({ + position: "absolute", + top: pos + }); + }); + }; + + return base.init(); + }; + + + $.TableOfContents.defaultOptions = { + // One option is set by the container element, and not by changing + // a setting here. That is the type of TOC to output. For a nested ordered list + // make sure your wrapping element is an
      . For a nested bulleted list + // make sure your wrapping element is an
        . For a straight outputting of links + // use any other element. + + // Which H tags should be the root items. h1 = 1, h2 = 2, etc. + startLevel: 1, + + // How many levels of H tags should be shown, including the startLevel + // startLevel: 1, depth: 3 = h1, h2, h3 + // startLevel: 2, depth: 3 = h2, h3, h4 + depth: 3, + + // Each link in a straight set is give a class designating how deep it is. + // You can change the class by changing this option, + // but you must include a % sign where you want the number to go. + // Nested lists do not add classes, as you can determine their depth with straight css + levelClass: "toc-depth-%", + + // When each link is formed, you can supply additional html or text to be formatted + // with the text of the header. % represents the text of the header + levelText: "%", + + // This plugin can add "To Top" links to each header element if you want. + // Set topLinks to true to use the text "Top" or set it to some text or html + // content you wish to use as the body of the link + topLinks: false, + + // If topLinks is either true or a text/html value, you can also set the following options: + + // Class of the link that is added to the headers + topLinkClass: "toc-top-link", + + // Which class should be added to the body element if it does not + // already have an id associated with it + topBodyId: "toc-top", + + // To have the TOC spaced proportionatly to the spacing of the headings, + // you must have a fixed height on the TOC wrapper, and it must "haveLayout" + // either position = fixed | absolute | relative + // Finally, the TOC wrapper must not be a UL or an LI or this setting will + // have no effect + proportionateSpacing: false + + }; + + + $.fn.tableOfContents = function(scope, options){ + return this.each(function(){ + var toc = new $.TableOfContents(this, scope, options); + delete toc; // Free memory + }); + }; + + +})(jQuery); \ No newline at end of file diff --git a/src/ruby/static-site/source/assets/javascripts/all.js b/src/ruby/static-site/source/assets/javascripts/all.js new file mode 100644 index 000000000..da88eb289 --- /dev/null +++ b/src/ruby/static-site/source/assets/javascripts/all.js @@ -0,0 +1 @@ +//= require jquery/jquery.js diff --git a/src/ruby/static-site/source/assets/javascripts/contact.js b/src/ruby/static-site/source/assets/javascripts/contact.js new file mode 100644 index 000000000..a99e00552 --- /dev/null +++ b/src/ruby/static-site/source/assets/javascripts/contact.js @@ -0,0 +1,41 @@ +//= require popper.js +//= require bootstrap/util.js +//= require bootstrap/button.js +//= require bootstrap/modal.js +//= require parsleyjs.js +//= require bootbox.js + +var defaults = {}; +var options = $.extend({}, defaults, apiUmbrellaContactOptions || {}); + +if(!options.apiKey) { + alert('apiUmbrellaSignupOptions.apiKey must be set'); +} + +var form = $("#api_umbrella_contact_form"); +form.parsley(); +form.submit(function(event) { + var submit = $(this).find('button'); + submit.button('loading'); + + event.preventDefault(); + + $.ajax({ + url: '/api-umbrella/v1/contact.json?api_key=' + options.apiKey, + type: 'POST', + data: $(this).serialize(), + dataType: 'json', + }).done(function(response) { + bootbox.alert('Thanks for sending your message. We\'ll be in touch.', function() { + form.trigger('reset'); + }); + }).fail(function(xhr, message, error) { + if(typeof(Rollbar) != 'undefined') { + Rollbar.error('Unexpected contact sending failure', { error: error, message: message, response: xhr.responseText }); + } + + bootbox.alert('Sending your message unexpectedly failed.
        Please try again or
        file an issue for assistance.'); + }).always(function() { + submit.button('reset'); + }); +}); diff --git a/src/ruby/static-site/source/assets/javascripts/signup_embed.js.erb b/src/ruby/static-site/source/assets/javascripts/signup_embed.js.erb new file mode 100644 index 000000000..c6c994177 --- /dev/null +++ b/src/ruby/static-site/source/assets/javascripts/signup_embed.js.erb @@ -0,0 +1,12 @@ +//= depend_on_asset _signup_embed/dependencies.js +//= depend_on_asset _signup_embed/setup.js + +(function() { + <%= environment.find_asset("_signup_embed/dependencies.js").to_s %> + + var jQueryApiUmbrella = jQuery.noConflict(true); + (function(jQuery) { + var $ = jQuery; + <%= environment.find_asset("_signup_embed/setup.js").to_s %> + })(jQueryApiUmbrella); +})(); diff --git a/src/ruby/static-site/source/assets/stylesheets/_api_umbrella.scss b/src/ruby/static-site/source/assets/stylesheets/_api_umbrella.scss new file mode 100644 index 000000000..cfd8ab52b --- /dev/null +++ b/src/ruby/static-site/source/assets/stylesheets/_api_umbrella.scss @@ -0,0 +1,57 @@ +abbr.required, .abbr-required { + border-style: none; + cursor: default; + color: #E87723; + font-family: "Verdana"; + font-size: 14px; + font-weight: bold; + font-weight: 1000; +} + +label abbr.required, label .abbr-required { + margin-left: 2px; +} + +.required-fields { + font-size: 93%; + color: #555; +} + +.required-fields .abbr-required { + font-size: 12px; +} + +// Parsley styles taken from defaults, minus green styling for successful +// inputs. +input.parsley-error, +select.parsley-error, +textarea.parsley-error { + color: #B94A48; + background-color: #F2DEDE; + border: 1px solid #EED3D7; +} + +.parsley-errors-list { + margin: 2px 0 3px 0; + padding: 0; + list-style-type: none; + font-size: 0.9em; + line-height: 0.9em; + opacity: 0; + -moz-opacity: 0; + -webkit-opacity: 0; + + transition: all .3s ease-in; + -o-transition: all .3s ease-in; + -ms-transition: all .3s ease-in-; + -moz-transition: all .3s ease-in; + -webkit-transition: all .3s ease-in; +} + +.parsley-errors-list.filled { + opacity: 1; +} + +.parsley-errors-list { + color: #a94442; +} diff --git a/src/ruby/static-site/source/assets/stylesheets/_shared/_docs.scss b/src/ruby/static-site/source/assets/stylesheets/_shared/_docs.scss new file mode 100644 index 000000000..61a3b3c98 --- /dev/null +++ b/src/ruby/static-site/source/assets/stylesheets/_shared/_docs.scss @@ -0,0 +1,163 @@ +h2, h3 { + margin-top: 12px; +} + +#toc { + border: 1px solid #e2e2e2; + background-color: #f7f7f7; + color: #999; + margin: 0px 0px 1em 0px; + padding: 0.6em 2em; + display: inline-block; + + a:visited { + color:#004f99; + } +} + +.doc-service-url { + color: #222; + font-size: 108%; + font-weight: bold; + + font-family: "Courier New", "Courier", "Terminal", monospace; + background-color: #f5f9ff; + border: 1px solid #eeeeff; + margin: 5px 0px; + padding: 2px 5px; + word-wrap: break-word; +} + +.doc-service-url em { + color: #666; +} + +.doc-parameters { + width: 100%; + color: #333; +} + +.doc-parameter-unemphasized { + color: #888; +} + +.doc-parameter-value-field strong { + color: #555; + font-size: 93%; +} + +.doc-parameters th, +.doc-parameters td { + text-align: left; + padding: 8px; +} + +.doc-parameters tbody tr:hover th, +.doc-parameters tbody tr:hover td { + background-color: #f7f7f7; +} + +.doc-parameters-name { + width: 180px; +} + +.doc-parameters-required { + width: 56px; +} + +.doc-parameters-value { + width: 180px; +} + +.doc-parameter-options { + width: 100%; +} + +.doc-parameter-options { + outline-style: none; +} + +.doc-parameter-options tbody tr { + border-style: none; +} + +.doc-parameter-options th, +.doc-parameter-options td { + border-style: none; + padding: 1px 15px 1px 2px; +} + +.doc-parameter-options thead tr { + background: transparent; +} + +.doc-parameter-options thead th { + background: transparent; + text-shadow: none; + color: #555; + border-bottom: 1px solid #ddd; +} + +.doc-parameter-options tbody th { + font-weight: normal; + font-style: italic; +} + +.doc-parameter-options tbody th, +.doc-parameter-options tbody td { + border-style: none; +} + +.doc-example-url { + color: #222; + font-family: "Courier New", "Courier", "Terminal", monospace; + background-color: #f5f9ff; + border: 1px solid #eeeeff; + padding: 2px 5px; + word-wrap: break-word; +} + +div.doc-example-url { + margin: 5px 0px; +} + +.highlight-code { + overflow: auto; + width: 100%; + margin-bottom: 1em; +} + +.highlight-code table { + margin-bottom: 0px; +} + +.highlight-code::-webkit-scrollbar{ + height: 8px; + width: 8px; +} + +.highlight-code::-webkit-scrollbar-track-piece { + margin-bottom:10px; + background-color:#e5e5e5; + border-bottom-left-radius:4px 4px; + border-bottom-right-radius:4px 4px; + border-top-left-radius:4px 4px; + border-top-right-radius:4px 4px; +} +.highlight-code::-webkit-scrollbar-thumb:vertical { + height:25px; + background-color:#ccc; + -webkit-border-radius:4px; + -webkit-box-shadow:0 1px 1px rgba(255,255,255,1); +} + +.highlight-code::-webkit-scrollbar-thumb:horizontal { + width:25px; + background-color:#ccc; + -webkit-border-radius:4px; +} + +pre, code, kbd, samp, tt, pre span { + font-family: monospace; + line-height: 100%; +} diff --git a/src/ruby/static-site/source/assets/stylesheets/_shared/_popup.scss b/src/ruby/static-site/source/assets/stylesheets/_shared/_popup.scss new file mode 100644 index 000000000..2715d804d --- /dev/null +++ b/src/ruby/static-site/source/assets/stylesheets/_shared/_popup.scss @@ -0,0 +1,4 @@ +body.popup { + min-width: inherit; + padding: 10px 20px; +} diff --git a/src/ruby/static-site/source/assets/stylesheets/_shared/_scaffolding.scss b/src/ruby/static-site/source/assets/stylesheets/_shared/_scaffolding.scss new file mode 100644 index 000000000..f600208d2 --- /dev/null +++ b/src/ruby/static-site/source/assets/stylesheets/_shared/_scaffolding.scss @@ -0,0 +1,24 @@ +pre { + white-space: pre; + word-wrap: normal; + overflow: auto; +} + +pre code { + white-space: pre; +} + +h3.doc { + margin-bottom: 2px; +} + +h1 span.url, +h3.doc span.url { + color: #777; + font-weight: normal; + padding-left: 12px; +} + +body.blank { + padding: 0px 30px 30px 30px; +} diff --git a/src/ruby/static-site/source/assets/stylesheets/_shared/_signup.scss b/src/ruby/static-site/source/assets/stylesheets/_shared/_signup.scss new file mode 100644 index 000000000..21eb9d067 --- /dev/null +++ b/src/ruby/static-site/source/assets/stylesheets/_shared/_signup.scss @@ -0,0 +1,10 @@ +.signup-key { + font-size: 26px; + display: inline-block; + font-weight: bold; + margin-bottom: 32px; +} + +pre.signup-example { + white-space: pre-wrap; +} diff --git a/src/ruby/static-site/source/assets/stylesheets/_shared/_syntax.scss b/src/ruby/static-site/source/assets/stylesheets/_shared/_syntax.scss new file mode 100644 index 000000000..f959ba8f3 --- /dev/null +++ b/src/ruby/static-site/source/assets/stylesheets/_shared/_syntax.scss @@ -0,0 +1,63 @@ +.highlight .hll { background-color: #f8f8f8; border: 1px solid #ccc; padding: 6px 10px; border-radius: 3px; } +.highlight .c { color: #999988; font-style: italic; } +.highlight .err { color: #a61717; background-color: #e3d2d2; } +.highlight .k { font-weight: bold; } +.highlight .o { font-weight: bold; } +.highlight .cm { color: #999988; font-style: italic; } +.highlight .cp { color: #999999; font-weight: bold; } +.highlight .c1 { color: #999988; font-style: italic; } +.highlight .cs { color: #999999; font-weight: bold; font-style: italic; } +.highlight .gd { color: #000000; background-color: #ffdddd; } +.highlight .gd .x { color: #000000; background-color: #ffaaaa; } +.highlight .ge { font-style: italic; } +.highlight .gr { color: #aa0000; } +.highlight .gh { color: #999999; } +.highlight .gi { color: #000000; background-color: #ddffdd; } +.highlight .gi .x { color: #000000; background-color: #aaffaa; } +.highlight .go { color: #888888; } +.highlight .gp { color: #555555; } +.highlight .gs { font-weight: bold; } +.highlight .gu { color: #800080; font-weight: bold; } +.highlight .gt { color: #aa0000; } +.highlight .kc { font-weight: bold; } +.highlight .kd { font-weight: bold; } +.highlight .kn { font-weight: bold; } +.highlight .kp { font-weight: bold; } +.highlight .kr { font-weight: bold; } +.highlight .kt { color: #445588; font-weight: bold; } +.highlight .m { color: #009999; } +.highlight .s { color: #dd1144; } +.highlight .n { color: #333333; } +.highlight .na { color: teal; } +.highlight .nb { color: #0086b3; } +.highlight .nc { color: #445588; font-weight: bold; } +.highlight .no { color: teal; } +.highlight .ni { color: purple; } +.highlight .ne { color: #990000; font-weight: bold; } +.highlight .nf { color: #990000; font-weight: bold; } +.highlight .nn { color: #555555; } +.highlight .nt { color: navy; } +.highlight .nv { color: teal; } +.highlight .ow { font-weight: bold; } +.highlight .w { color: #bbbbbb; } +.highlight .mf { color: #009999; } +.highlight .mh { color: #009999; } +.highlight .mi { color: #009999; } +.highlight .mo { color: #009999; } +.highlight .sb { color: #dd1144; } +.highlight .sc { color: #dd1144; } +.highlight .sd { color: #dd1144; } +.highlight .s2 { color: #dd1144; } +.highlight .se { color: #dd1144; } +.highlight .sh { color: #dd1144; } +.highlight .si { color: #dd1144; } +.highlight .sx { color: #dd1144; } +.highlight .sr { color: #009926; } +.highlight .s1 { color: #dd1144; } +.highlight .ss { color: #990073; } +.highlight .bp { color: #999999; } +.highlight .vc { color: teal; } +.highlight .vg { color: teal; } +.highlight .vi { color: teal; } +.highlight .il { color: #009999; } +.highlight .gc { color: #999; background-color: #EAF2F5; } diff --git a/src/ruby/static-site/source/assets/stylesheets/all.css.scss b/src/ruby/static-site/source/assets/stylesheets/all.css.scss new file mode 100644 index 000000000..442fb196a --- /dev/null +++ b/src/ruby/static-site/source/assets/stylesheets/all.css.scss @@ -0,0 +1,12 @@ +$code-font-size: inherit; + +@import "bootstrap"; +@import "font-awesome-sprockets"; +@import "font-awesome"; + +@import "_shared/scaffolding"; +@import "_shared/popup"; +@import "_shared/syntax"; +@import "_shared/docs"; + +@import "_api_umbrella"; diff --git a/src/ruby/static-site/source/assets/stylesheets/embed.css.scss b/src/ruby/static-site/source/assets/stylesheets/embed.css.scss new file mode 100644 index 000000000..7d39b7ae4 --- /dev/null +++ b/src/ruby/static-site/source/assets/stylesheets/embed.css.scss @@ -0,0 +1,37 @@ +.api-umbrella-embed { + @import "bootstrap"; + @import "_api_umbrella"; + + pre, code { + font-family: monospace; + } + + .signup-key { + font-size: 24px; + display: inline-block; + font-weight: bold; + margin-bottom: 32px; + word-wrap: break-word; + word-break: break-all; + white-space: pre-wrap; + } + + pre.signup-example { + white-space: pre-wrap; + } + + .signup-footer { + margin-top: 32px; + font-size: 11px; + background-color: #f5f5f5; + color: #555; + padding: 2px 4px; + } + + .signup-footer p { + color: #555; + font-size: 11px; + margin: 0px 0px 8px 0px; + padding: 0px; + } +} diff --git a/src/ruby/static-site/source/contact.html.erb b/src/ruby/static-site/source/contact.html.erb new file mode 100644 index 000000000..cf5aa362e --- /dev/null +++ b/src/ruby/static-site/source/contact.html.erb @@ -0,0 +1,74 @@ +--- +title: Contact Us +--- + +

        Your API Site Name Contact

        +

        Feel free to contact us with questions, comments, or to report any problems with Your API Site Name.

        + + + +

        Contact us directly

        +

        * Required fields

        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        + +
        + +
        +
        +
        +
        + + +
        +
        +
        + +<%= javascript_include_tag("contact") %> diff --git a/src/ruby/static-site/source/docs/api-key.html.md b/src/ruby/static-site/source/docs/api-key.html.md new file mode 100644 index 000000000..f0bb13997 --- /dev/null +++ b/src/ruby/static-site/source/docs/api-key.html.md @@ -0,0 +1,25 @@ +--- +title: API Key Usage +hidden_child: true + +--- + +# API Key Usage + +After [signing up](/signup), you'll be given your own, unique API key. This 40 character string is your API key. The key: + +- Uniquely identifies you. +- Gives you access to Data.gov's Web services. +- Should be kept private and should not be shared. + +To use your key, simply pass the key as a URL query parameter when making Web service requests. For example: + +`GET http://api.data.gov/nrel/alt-fuel-stations/v1.json?api_key=YOUR_KEY_HERE` + +Regardless of the HTTP method being called, the API key should always be passed as a GET parameter in the URL query. So even if you will be POSTing or PUTing to an specific service, the *api_key* query parameter should always be supplied in the URL query parameters. + +## Alternative Method + +Depending on your usage, it can sometimes be easier to pass the API key along as HTTP Basic authentication. If you want to use this method, pass your API key in as the username, while leaving the password blank. For example: + +`GET http://YOUR_KEY_HERE@api.data.gov/nrel/alt-fuel-stations/v1.json` diff --git a/src/ruby/static-site/source/docs/errors.html.md.erb b/src/ruby/static-site/source/docs/errors.html.md.erb new file mode 100644 index 000000000..143e423ab --- /dev/null +++ b/src/ruby/static-site/source/docs/errors.html.md.erb @@ -0,0 +1,124 @@ +--- +title: General Web Service Errors +hidden_child: true + +--- + +# General Web Service Errors + +Certain, general errors will be returned in a standardized way from all API Umbrella web services. Additional, service-specific error messages may also be returned (see individual service documentation for those details). The following list describes the general errors any application may return: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        Error CodeHTTP Status CodeDescription
        API_KEY_MISSING403 + An API key was not supplied. See <%= link_to("API key usage", "/docs/api-key.html") %> for details on how to pass your API key to the API. +
        API_KEY_INVALID403 + An invalid API key was supplied. Double check that the API key being passed in is valid, or <%= link_to("signup", "/signup.html") %> for an API key. +
        API_KEY_DISABLED403 + The API key supplied has been disabled by an administrator. Please <%= link_to("contact us", "/contact.html") %> for assistance. +
        API_KEY_UNAUTHORIZED403 + The API key supplied is not authorized to access the given service. Please <%= link_to("contact us", "/contact.html") %> for assistance. +
        API_KEY_UNVERIFIED403 + The API key supplied has not been verified yet. Please check your e-mail to verify the API key. Please <%= link_to("contact us", "/contact.html") %> for assistance. +
        HTTPS_REQUIRED400 + Requests to this API must be made over HTTPS. Ensure that the URL being used is over HTTPS. +
        OVER_RATE_LIMIT429 + The API key has exceeded the rate limits. See <%= link_to("rate limits", "/docs/rate-limits.html") %> for more details or <%= link_to("contact us", "/contact.html") %> for assistance. +
        NOT_FOUND404 + An API could not be found at the given URL. Check your URL. +
        + +## Error Response Body + +The error response body will contain an error code value from the table above and a brief description of the error. The descriptions are subject to change, so it's suggested any error handling use the HTTP status code or the error code value for error handling (and not the content of the message description). + +### Error Message Response Formats +Depending on the detected format of the request, the error message response may be returned in JSON, XML, CSV, or HTML. Requests of an unknown format will return errors in JSON format. + +#### JSON Example + +```json +{ + "error": { + "code": "API_KEY_MISSING", + "message": "No api_key was supplied. Get one at https://example.com" + } +} +``` + +#### XML Example + +```xml + + + API_KEY_MISSING + No api_key was supplied. Get one at https://example.com + + +``` + +#### CSV Example + +``` +Error Code,Error Message +API_KEY_MISSING,No api_key was supplied. Get one at https://example.com +``` + +#### HTML Example + +``` + + +

        API_KEY_MISSING

        +

        No api_key was supplied. Get one at https://example.com

        + + +``` diff --git a/src/ruby/static-site/source/docs/index.html.md.erb b/src/ruby/static-site/source/docs/index.html.md.erb new file mode 100644 index 000000000..182f80258 --- /dev/null +++ b/src/ruby/static-site/source/docs/index.html.md.erb @@ -0,0 +1,17 @@ +--- +title: Documentation +disable_breadcrumbs: true +disable_in_breadcrumbs_trail: true +--- + +# Documentation + +Use this Web service documentation to access and use energy data via application programming interfaces (APIs) in these renewable energy categories. You'll need a key to use these APIs. [Sign up for an API key](/signup). + +<%= partial("layouts/child_links") %> + +### General Information + +- [API Key Usage](/docs/api-key) - How to use your API key after signing up. +- [Web Service Rate Limits](/docs/rate-limits) - Daily and hourly rate limits on accessing Data.gov's Web services. +- [General Web Service Errors](/docs/errors) - General error codes that can be returned by any Data.gov Web service. diff --git a/src/ruby/static-site/source/docs/rate-limits.html.md b/src/ruby/static-site/source/docs/rate-limits.html.md new file mode 100644 index 000000000..0514a292f --- /dev/null +++ b/src/ruby/static-site/source/docs/rate-limits.html.md @@ -0,0 +1,29 @@ +--- +title: Web Service Rate Limits +hidden_child: true + +--- + +# Web Service Rate Limits + +Limits are placed on the number of Data.gov Web service requests you may make using your API key. + +- **Hourly Limit:** 1,000 requests per hour + +For each API key, these limits are applied across all Data.gov Web services requests. Exceeding these limits will lead to your API key being temporarily blocked from making further requests. Depending on the limit exceeded, the block will be lifted automatically by waiting until the next hour or calendar day. + +## Understanding Rate Limit Time Periods + +### Hourly Limit + +The hourly counters for your API key reset on a rolling basis. + +*Example:* If you made 500 requests at 10:15AM and 500 requests at 10:25AM, your API key would become temporarily blocked. This temporary block of your API key would cease at 11:15AM, at which point you could make 500 requests. At 11:25AM, you could then make another 500 requests. + +## Rate Limit Error Response + +If your API key exceeds the rate limits, you will receive a response with an HTTP status code of 429 (Too Many Requests). + +## Need Higher Limits? + +If you're building an application that needs higher rate limits, we'd be happy to work with you. [Contact us](/contact) for more details. diff --git a/src/ruby/static-site/source/index.html.erb b/src/ruby/static-site/source/index.html.erb new file mode 100644 index 000000000..645564136 --- /dev/null +++ b/src/ruby/static-site/source/index.html.erb @@ -0,0 +1,32 @@ +--- +title: Home +disable_breadcrumbs: true +disable_in_breadcrumbs_trail: true +--- + +
        +

        Your API Site Name

        +

        Powered by API Umbrella, an open-source API management platform.

        +
        + +
        +
        +

        Web Service Documentation

        +

        Explore our available Web services.

        +
          + <% sitemap.find_resource_by_destination_path("/docs/index.html").children.sort_by { |p| p.data.title.to_s }.each do |child| %> + <% next if(child.data.hidden_child || child.data.title.to_s.blank?) %> +
        • <%= link_to(child.data.title, child) %>
        • + <% end %> +
        +
        + +
        +

        API Key

        +

        Sign up to use our APIs.

        + +
        +
        + diff --git a/src/ruby/static-site/source/layouts/_analytics.erb b/src/ruby/static-site/source/layouts/_analytics.erb new file mode 100644 index 000000000..8ba22fc27 --- /dev/null +++ b/src/ruby/static-site/source/layouts/_analytics.erb @@ -0,0 +1,11 @@ +<% if(ENV["GOOGLE_ANALYTICS_TRACKING_ID"]) %> + +<% end %> diff --git a/src/ruby/static-site/source/layouts/_breadcrumbs.erb b/src/ruby/static-site/source/layouts/_breadcrumbs.erb new file mode 100644 index 000000000..23ce6a41a --- /dev/null +++ b/src/ruby/static-site/source/layouts/_breadcrumbs.erb @@ -0,0 +1,18 @@ +<% unless(current_page.data.disable_breadcrumbs) %> + <% crumbs = breadcrumbs_trail %> + <% if(crumbs.length > 1) %> + + <% end %> +<% end %> diff --git a/src/ruby/static-site/source/layouts/_child_links.erb b/src/ruby/static-site/source/layouts/_child_links.erb new file mode 100644 index 000000000..2e9c7fba1 --- /dev/null +++ b/src/ruby/static-site/source/layouts/_child_links.erb @@ -0,0 +1,10 @@ +<% primary = current_page.children.reject { |p| (p.data.title.nil? || p.data.deprecated == true) }.sort_by { |p| p.data.title } %> +<% deprecated = current_page.children.find_all { |p| (p.data.deprecated == true) }.sort_by { |p| p.data.title } %> + +<%= partial("layouts/children", :locals => { :children => primary }) %> + +<% if(deprecated.any?) %> +
        +

        Deprecated

        +<%= partial("layouts/children", :locals => { :children => deprecated }) %> +<% end %> diff --git a/src/ruby/static-site/source/layouts/_children.erb b/src/ruby/static-site/source/layouts/_children.erb new file mode 100644 index 000000000..86b937d70 --- /dev/null +++ b/src/ruby/static-site/source/layouts/_children.erb @@ -0,0 +1,21 @@ +<% children.each do |child| %> +<% next if(child.data.hidden_child) %> + +

        + +<%= link_to(child.data.title, child.data.redirect_url || child) %> +<% if(child.data.url) %> + +(<%= child.data.url %>) + +<% end %> + +

        + +<% if(child.data.summary) %> + +<%= child.data.summary %> + +<% end %> + +<% end %> diff --git a/src/ruby/static-site/source/layouts/_edit_me.erb b/src/ruby/static-site/source/layouts/_edit_me.erb new file mode 100644 index 000000000..b08349643 --- /dev/null +++ b/src/ruby/static-site/source/layouts/_edit_me.erb @@ -0,0 +1,5 @@ +<% if(ENV["GITHUB_REPO_URL"]) %> + +<% end %> diff --git a/src/ruby/static-site/source/layouts/_footer.erb b/src/ruby/static-site/source/layouts/_footer.erb new file mode 100644 index 000000000..04f5b8449 --- /dev/null +++ b/src/ruby/static-site/source/layouts/_footer.erb @@ -0,0 +1 @@ + diff --git a/src/ruby/static-site/source/layouts/_header.erb b/src/ruby/static-site/source/layouts/_header.erb new file mode 100644 index 000000000..af9513458 --- /dev/null +++ b/src/ruby/static-site/source/layouts/_header.erb @@ -0,0 +1,20 @@ + +
        + <%= partial("layouts/breadcrumbs") %> diff --git a/src/ruby/static-site/source/layouts/blank.erb b/src/ruby/static-site/source/layouts/blank.erb new file mode 100644 index 000000000..0b70b2c49 --- /dev/null +++ b/src/ruby/static-site/source/layouts/blank.erb @@ -0,0 +1,17 @@ + + + + + <%= current_page.data.title %> | <%= ENV["API_SITE_NAME"] %> + + + + + + <%= stylesheet_link_tag("all") %> + <%= partial("layouts/analytics") %> + + + <%= yield %> + + diff --git a/src/ruby/static-site/source/layouts/layout.erb b/src/ruby/static-site/source/layouts/layout.erb new file mode 100644 index 000000000..3d67e98e6 --- /dev/null +++ b/src/ruby/static-site/source/layouts/layout.erb @@ -0,0 +1,29 @@ + + + + + + + + <% unless(current_page.url == "/") %> + <%= current_page.data.title %> | + <% end %> + <%= ENV["API_SITE_NAME"] %> + + + <%= stylesheet_link_tag("all") %> + + + <%= javascript_include_tag("all") %> + <%= partial("layouts/analytics") %> + + + + <%= partial("layouts/header") %> + <%= yield %> + <%= partial("layouts/edit_me") %> + <%= partial("layouts/footer") %> + + diff --git a/src/ruby/static-site/source/layouts/redirect.erb b/src/ruby/static-site/source/layouts/redirect.erb new file mode 100644 index 000000000..4848e90d3 --- /dev/null +++ b/src/ruby/static-site/source/layouts/redirect.erb @@ -0,0 +1,7 @@ + + + + <% raise "redirect_url not set" unless(current_page.data.redirect_url) %> + + + diff --git a/src/ruby/static-site/source/signup.html.erb b/src/ruby/static-site/source/signup.html.erb new file mode 100644 index 000000000..6cf89723e --- /dev/null +++ b/src/ruby/static-site/source/signup.html.erb @@ -0,0 +1,22 @@ +--- +title: API Key Signup +--- + +

        API Key Signup

        + +
        Loading signup form...
        + + diff --git a/src/ruby/static-site/vendor/.gitkeep b/src/ruby/static-site/vendor/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/src/ruby/web-app/config/initializers/devise.rb b/src/ruby/web-app/config/initializers/devise.rb index d98d61b07..dba82fabe 100644 --- a/src/ruby/web-app/config/initializers/devise.rb +++ b/src/ruby/web-app/config/initializers/devise.rb @@ -161,6 +161,7 @@ # Email regex used to validate email formats. It simply asserts that # one (and only one) @ exists in the given string. This is mainly # to give user feedback and not to assert the e-mail validity. + config.email_regexp = ::Regexp.new(ApiUmbrellaConfig[:web][:admin][:email_regex], ::Regexp::IGNORECASE) # ==> Configuration for :timeoutable diff --git a/templates/etc/nginx/frontend_defaults.conf.mustache b/templates/etc/nginx/frontend_defaults.conf.mustache index 7ebda1598..9a758b542 100644 --- a/templates/etc/nginx/frontend_defaults.conf.mustache +++ b/templates/etc/nginx/frontend_defaults.conf.mustache @@ -46,17 +46,17 @@ more_clear_input_headers X-Api-Umbrella-Allow-Authorization-Caching; {{#_development_env?}} location /livereload.js { - proxy_pass http://127.0.0.1:{{ember_server.live_reload_port}}; + proxy_pass http://{{ember_server.host}}:{{ember_server.live_reload_port}}; } location /livereload { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; - proxy_pass http://127.0.0.1:{{ember_server.live_reload_port}}; + proxy_pass http://{{ember_server.host}}:{{ember_server.live_reload_port}}; } location /ember-cli-live-reload.js { - proxy_pass http://127.0.0.1:{{ember_server.port}}; + proxy_pass http://{{ember_server.host}}:{{ember_server.port}}; } {{/_development_env?}} diff --git a/templates/etc/nginx/web-app.conf.mustache b/templates/etc/nginx/web-app.conf.mustache index d2d2be862..69f344772 100644 --- a/templates/etc/nginx/web-app.conf.mustache +++ b/templates/etc/nginx/web-app.conf.mustache @@ -1,9 +1,11 @@ + upstream puma { - server unix://{{run_dir}}/web-puma.sock; + server {{web.host}}:{{web.port}}; + keepalive 10; } server { - listen {{web.host}}:{{web.port}} so_keepalive=on; + listen 127.0.0.1:{{web.port}} so_keepalive=on; set $x_api_umbrella_request_id $http_x_api_umbrella_request_id; root {{web.dir}}/public; @@ -22,7 +24,7 @@ alias {{_embedded_root_dir}}/apps/core/current/build/dist/admin-ui/assets/; {{/_development_env?}} {{#_development_env?}} - proxy_pass http://127.0.0.1:{{ember_server.port}}; + proxy_pass http://{{ember_server.host}}:{{ember_server.port}}; {{/_development_env?}} } @@ -41,7 +43,7 @@ alias {{_embedded_root_dir}}/apps/core/current/build/dist/admin-ui/$1; {{/_development_env?}} {{#_development_env?}} - proxy_pass http://127.0.0.1:{{ember_server.port}}; + proxy_pass http://{{ember_server.host}}:{{ember_server.port}}; {{/_development_env?}} } diff --git a/templates/etc/test-env/mongo-orchestration/replica-set.json.mustache b/templates/etc/test-env/mongo-orchestration/replica-set.json.mustache deleted file mode 100644 index 79b95605e..000000000 --- a/templates/etc/test-env/mongo-orchestration/replica-set.json.mustache +++ /dev/null @@ -1,59 +0,0 @@ -{ - "id": "repl0", - "rsSettings": { - "electionTimeoutMillis": 1000 - }, - "members": [ - { - "procParams": { - "dbpath": "{{db_dir}}/test-env-mongo-orchestration/mongodb-13090", - "ipv6": false, - "logpath": "{{log_dir}}/test-env-mongo-orchestration/mongod-13090.log", - "nohttpinterface": true, - "nojournal": true, - "noprealloc": true, - "nssize": 1, - "oplogSize": 10, - "port": 13090, - "smallfiles": true - }, - "rsParams": { - "priority": 99 - } - }, - { - "procParams": { - "dbpath": "{{db_dir}}/test-env-mongo-orchestration/mongodb-13091", - "ipv6": false, - "logpath": "{{log_dir}}/test-env-mongo-orchestration/mongod-13091.log", - "nohttpinterface": true, - "nojournal": true, - "noprealloc": true, - "nssize": 1, - "oplogSize": 10, - "port": 13091, - "smallfiles": true - }, - "rsParams": { - "priority": 1.1 - } - }, - { - "procParams": { - "dbpath": "{{db_dir}}/test-env-mongo-orchestration/mongodb-13092", - "ipv6": false, - "logpath": "{{log_dir}}/test-env-mongo-orchestration/mongod-13092.log", - "nohttpinterface": true, - "nojournal": true, - "noprealloc": true, - "nssize": 1, - "oplogSize": 10, - "port": 13092, - "smallfiles": true - }, - "rsParams": { - "arbiterOnly": true - } - } - ] -} diff --git a/templates/etc/test-env/nginx/apis.conf.mustache b/templates/etc/test-env/nginx/apis.conf.mustache deleted file mode 100644 index 9812f2ac1..000000000 --- a/templates/etc/test-env/nginx/apis.conf.mustache +++ /dev/null @@ -1,733 +0,0 @@ -lua_shared_dict test_data 32k; - -server { - listen 9444; - listen [::]:9444; - listen 127.0.0.1:9441; - - set $x_api_umbrella_request_id $http_x_api_umbrella_request_id; - lua_use_default_type off; - default_type ""; - - gzip off; - - access_by_lua_block { - ngx.shared.test_data:set("backend_called", true) - } - - rewrite ^/backend-prefix/(.+)$ /$1 last; - - location /hello { - if ($request_method != POST) { - echo -n "Hello World"; - } - - if ($request_method = POST) { - echo -n "Goodbye"; - } - } - - location = /echo { - echo_read_request_body; - echo $request_body; - } - - location = /echo_delayed_chunked { - content_by_lua_block { - local input = ngx.unescape_uri(ngx.var.arg_input) - for index = 1, #input do - local char = input:sub(index, index) - ngx.print(char) - ngx.flush() - ngx.sleep(math.random(5, 15) / 1000) - end - } - } - - location = /restricted { - echo -n "Restricted Access"; - } - - location = /not/restricted { - echo -n "Not Restricted"; - } - - location = /utf8 { - more_set_headers "X-Example: tést"; - echo -n "Hellö Wörld"; - } - - location = /sleep { - echo_sleep 1; - echo -n "Sleepy head"; - } - - location = /sleep_timeout { - echo_sleep 1; - echo -n "Sleepy head"; - } - - location /auth/ { - access_by_lua_block { - local username = ngx.var.remote_user - local password = ngx.var.remote_passwd - if username == "somebody" and password == "secret" then - return - elseif username == "anotheruser" and password == "anothersecret" then - return - else - ngx.header["WWW-Authenticate"] = [[Basic realm="Authorization Required"]] - ngx.status = ngx.HTTP_UNAUTHORIZED - ngx.print("Unauthorized") - ngx.exit(ngx.HTTP_OK) - end - } - echo -n $remote_user; - } - - location /headers/ { - more_set_headers "X-Existing1: existing1"; - more_set_headers "x-existing2: existing2"; - more_set_headers "X-EXISTING3: existing3"; - echo -n "Hello World"; - } - - location /redirect-301/ { - rewrite_by_lua_block { - ngx.redirect(ngx.unescape_uri(ngx.var.arg_to or "/hello"), ngx.HTTP_MOVED_PERMANENTLY) - } - } - - location /redirect { - rewrite_by_lua_block { - ngx.redirect(ngx.unescape_uri(ngx.var.arg_to or "/hello")) - } - } - - location /info/ { - more_set_headers "X-Received-Method: $request_method"; - content_by_lua_block { - local cjson = require "cjson"; - local raw_url = ngx.var.scheme .. "://" .. ngx.var.host .. ngx.var.request_uri - ngx.header["Content-Type"] = "application/json" - ngx.print(cjson.encode({ - method = ngx.var.request_method, - headers = ngx.req.get_headers(500), - local_interface_ip = ngx.var.server_addr, - raw_url = raw_url, - url = { - host = ngx.var.host, - hostname = ngx.var.hostname, - href = raw_url, - path = ngx.var.request_uri, - pathname = ngx.var.uri, - port = ngx.var.server_port, - protocol = ngx.var.scheme .. ":", - query = ngx.req.get_uri_args(500), - }, - basic_auth_username = ngx.var.remote_user, - basic_auth_password = ngx.var.remote_passwd, - request_length = tonumber(ngx.var.request_length), - })) - } - } - - location /connection-stats/ { - content_by_lua_block { - local cjson = require "cjson"; - ngx.sleep(0.3) - ngx.header["Content-Type"] = "application/json" - ngx.say(cjson.encode({ - connection = tonumber(ngx.var.connection), - connection_requests = tonumber(ngx.var.connection_requests), - connections_active = tonumber(ngx.var.connections_active), - connections_reading = tonumber(ngx.var.connections_reading), - connections_waiting = tonumber(ngx.var.connections_waiting), - connections_writing = tonumber(ngx.var.connections_writing), - })) - } - } - - location = /upload { - content_by_lua_block { - local cjson = require "cjson"; - local upload = require "resty.upload"; - - local upload_size = 0 - local chunk_size = 4096 - local form = upload:new(chunk_size) - while true do - local typ, res, err = form:read() - if typ == "body" then - upload_size = upload_size + #res - elseif typ == "eof" then - break - end - end - - ngx.header["Content-Type"] = "application/json" - ngx.print(cjson.encode({ - upload_size = upload_size, - })) - } - } - - location = /chunked { - echo -n "hello"; - echo_flush; - echo_sleep 0.5; - echo -n "salutations"; - echo_flush; - echo_sleep 0.5; - echo -n "goodbye"; - } - - location = /receive_chunks { - # TODO - } - - location ~ ^/compressible/([0-9]+)$ { - set $size $1; - content_by_lua_block { - ngx.header["Content-Type"] = ngx.unescape_uri(ngx.var.arg_content_type or "text/plain"); - ngx.header["Content-Length"] = ngx.var.size - ngx.print(string.rep("a", tonumber(ngx.var.size))) - } - } - - location ~ ^/compressible-chunked/([0-9]+)/([0-9]+)$ { - set $chunks $1; - set $size $2; - content_by_lua_block { - local size = tonumber(ngx.var.size) - ngx.header["Content-Type"] = ngx.unescape_uri(ngx.var.arg_content_type or "text/plain"); - ngx.sleep(0.05) - for index = 1, tonumber(ngx.var.chunks) do - ngx.print(string.rep("a", size)) - end - } - } - - location ~ ^/compressible-delayed-chunked/([0-9]+)$ { - set $size $1; - content_by_lua_block { - local size = tonumber(ngx.var.size) - ngx.header["Content-Type"] = ngx.unescape_uri(ngx.var.arg_content_type or "text/plain"); - - ngx.print(string.rep("a", size)) - ngx.flush() - ngx.sleep(0.5) - - ngx.print(string.rep("a", size)) - ngx.flush() - ngx.sleep(0.5) - - ngx.print(string.rep("a", size)) - } - } - - location = /compressible-pre-gzip { - gzip on; - gzip_min_length 0; - gzip_types application/json; - content_by_lua_block { - local cjson = require "cjson"; - local body = cjson.encode({ - headers = ngx.req.get_headers(500), - }) - - if ngx.var.arg_force == "true" then - -- Force nginx to gzip this response, even if the original input headers - -- wouldn't normally gzip. - ngx.req.set_header("Accept-Encoding", "gzip") - end - - ngx.header["Content-Type"] = "application/json" - ngx.print(body) - } - } - - location ~ ^/delay/([0-9]+)$ { - set $delay $1; - content_by_lua_block { - ngx.sleep(tonumber(ngx.var.delay) / 1000) - ngx.print("done") - } - } - - location ~ ^/delay-sec/([0-9.]+)$ { - set $delay $1; - - access_by_lua_block { - local counter_id = ngx.var.arg_backend_counter_id - if counter_id then - local key = "backend_call_count:" .. counter_id - return ngx.shared.test_data:incr(key, 1) or ngx.shared.test_data:set(key, 1) - end - } - - content_by_lua_block { - ngx.sleep(tonumber(ngx.var.delay)) - ngx.print("done") - } - } - - location ~ ^/delays/([0-9]+)/([0-9]+)$ { - set $delay1 $1; - set $delay2 $2; - content_by_lua_block { - local delay1 = tonumber(ngx.var.delay1) / 1000 - local delay2 = tonumber(ngx.var.delay2) / 1000 - - ngx.sleep(delay1) - ngx.print("first") - ngx.flush() - - ngx.sleep(delay2 - delay1) - ngx.print("done") - ngx.flush() - } - } - - location ~ ^/delays-sec/([0-9]+)/([0-9]+)$ { - set $delay1 $1; - set $delay2 $2; - content_by_lua_block { - local delay1 = tonumber(ngx.var.delay1) - local delay2 = tonumber(ngx.var.delay2) - - ngx.sleep(delay1) - ngx.print("first") - ngx.flush() - - ngx.sleep(delay2 - delay1) - ngx.print("done") - ngx.flush() - } - } - - location /cacheable-but-not/ { - set_secure_random_alphanum $random 50; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location ~ ^/cacheable-thundering-herd/(.+)$ { - set $unique_id $1; - set_secure_random_alphanum $random 50; - content_by_lua_block { - local key = "backend_call_count:" .. ngx.var.unique_id - local ok = ngx.shared.test_data:incr(key, 1) or ngx.shared.test_data:set(key, 1) - - local delay = tonumber(ngx.var.http_x_delay) - - if ngx.var.http_x_delay_before == "headers" then - ngx.sleep(delay) - end - - ngx.header["Cache-Control"] = ngx.var.http_x_cache_control_response - ngx.header["X-Unique-Output"] = ngx.var.random - ngx.print("") - ngx.flush(true) - - if ngx.var.http_x_delay_before == "body" then - ngx.sleep(delay) - end - - ngx.print(ngx.var.random) - } - } - - location /cacheable-cache-control-max-age/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "X-Unique-Output: $random"; - more_set_headers "X-Received-Method: $request_method"; - echo $random; - } - - location /cacheable-cache-control-s-maxage/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: s-maxage=60"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-cache-control-case-insensitive/ { - set_secure_random_alphanum $random 50; - more_set_headers "CAcHE-cONTROL: max-age=60"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-expires/ { - set_secure_random_alphanum $random 50; - more_set_headers "X-Unique-Output: $random"; - expires 60; - echo $random; - } - - location /cacheable-expires-0/ { - set_secure_random_alphanum $random 50; - more_set_headers "Expires: 0"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-expires-past/ { - set_secure_random_alphanum $random 50; - more_set_headers "Expires: Sat, 05 Sep 2015 17:58:16 GMT"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-set-cookie/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Set-Cookie: foo=bar"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-www-authenticate/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "WWW-Authenticate: Basic"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-surrogate-control-max-age/ { - set_secure_random_alphanum $random 50; - more_set_headers "Surrogate-Control: max-age=60"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-surrogate-control-case-insensitive/ { - set_secure_random_alphanum $random 50; - more_set_headers "SURrOGATE-CONtROL: max-age=60"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-surrogate-control-and-cache-control/ { - set_secure_random_alphanum $random 50; - more_set_headers "Surrogate-Control: max-age=60"; - more_set_headers "Cache-Control: max-age=0, private, must-revalidate"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-dynamic/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-compressible/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Content-Type: text/plain"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - echo_duplicate 1500 "a"; # 1500 bytes - long enough to allow gzip - } - - location /cacheable-pre-gzip/ { - gzip on; - gzip_min_length 0; - gzip_types application/json; - set_secure_random_alphanum $random 50; - content_by_lua_block { - local cjson = require "cjson"; - local body = cjson.encode({ - headers = ngx.req.get_headers(500), - random = ngx.var.random, - data = string.rep("a", 1500) -- 1500 bytes - long enough to allow gzip - }) - - if ngx.var.arg_force == "true" then - -- Force nginx to gzip this response, even if the original input headers - -- wouldn't normally gzip. - ngx.req.set_header("Accept-Encoding", "gzip") - end - - ngx.header["Content-Type"] = "application/json" - ngx.header["Cache-Control"] = "max-age=60" - ngx.header["X-Unique-Output"] = ngx.var.random - ngx.print(body) - } - } - - location /cacheable-vary-accept-encoding/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Content-Type: text/plain"; - more_set_headers "Vary: Accept-Encoding"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - echo_duplicate 1500 "a"; # 1500 bytes - long enough to allow gzip - } - - location /cacheable-pre-gzip-multiple-vary/ { - gzip on; - gzip_min_length 0; - gzip_types application/json; - set_secure_random_alphanum $random 50; - content_by_lua_block { - local cjson = require "cjson"; - local body = cjson.encode({ - headers = ngx.req.get_headers(500), - random = ngx.var.random, - data = string.rep("a", 1500) -- 1500 bytes - long enough to allow gzip - }) - - -- Force nginx to gzip this response, even if the original input headers - -- wouldn't normally gzip. - ngx.req.set_header("Accept-Encoding", "gzip") - - ngx.header["Content-Type"] = "application/json" - ngx.header["Cache-Control"] = "max-age=60" - ngx.header["Vary"] = "X-Foo,Accept-Encoding,Accept" - ngx.header["X-Unique-Output"] = ngx.var.random - ngx.print(body) - } - } - - location /cacheable-vary-accept-encoding-multiple/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Content-Type: text/plain"; - more_set_headers "Vary: X-Foo,Accept-Encoding,Accept"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - echo_duplicate 1500 "a"; # 1500 bytes - long enough to allow gzip - } - - location /cacheable-vary-x-custom/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Vary: X-Custom"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-vary-accept-encoding-accept-separate/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Vary: Accept-Encoding"; - more_set_headers "Vary: Accept"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-multiple-vary/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Content-Type: text/plain"; - more_set_headers "Vary: X-Foo,Accept-Language,Accept"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - } - - location /cacheable-multiple-vary-with-accept-encoding/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Content-Type: text/plain"; - more_set_headers "Vary: X-Foo,Accept-Language,Accept-Encoding,Accept"; - more_set_headers "X-Unique-Output: $random"; - echo $random; - echo_duplicate 1500 "a"; # 1500 bytes - long enough to allow gzip - } - - location /cacheable-backend-reports-cached/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Age: 3"; - more_set_headers "X-Cache: HIT"; - echo $random; - } - - location /cacheable-backend-reports-not-cached/ { - set_secure_random_alphanum $random 50; - more_set_headers "Cache-Control: max-age=60"; - more_set_headers "Age: 0"; - more_set_headers "X-Cache: BACKEND-MISS"; - echo $random; - } - - location /cacheable-backend-port/ { - more_set_headers "Cache-Control: max-age=60"; - set_secure_random_alphanum $random 50; - more_set_headers "X-Unique-Output: $random"; - echo -n $server_port; - } - - location /cacheable-backend-host/ { - more_set_headers "Cache-Control: max-age=60"; - set_secure_random_alphanum $random 50; - more_set_headers "X-Unique-Output: $random"; - echo -n $host; - } - - location /via-header/ { - more_set_headers "Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)"; - echo -n "hello"; - } - - location /logging-example/ { - more_set_headers "Age: 20"; - more_set_headers "Content-Type: text/plain; charset=utf-8"; - more_set_headers "Content-Length: 5"; - expires 60; - echo -n "hello"; - } - - location /logging-multiple-request-headers/ { - content_by_lua_block { - local cjson = require "cjson" - local header = ngx.var.arg_header - local raw_header = ngx.req.raw_header(true) - local _, num_matches = ngx.re.gsub(raw_header, "^" .. header .. ": ", "", "im") - ngx.header["Content-Type"] = "application/json" - ngx.print(cjson.encode({ - header_occurrences_received = num_matches, - header_value = ngx.req.get_headers()[header], - })) - } - } - - location /logging-multiple-response-headers/ { - content_by_lua_block { - ngx.header[ngx.var.arg_header] = { "11", "45" } - ngx.print("OK") - } - } - - location /logging-long-response-headers/ { - more_set_headers "Content-Encoding: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"; - more_set_headers "Content-Type: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"; - more_set_headers "Server: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"; - more_set_headers "Transfer-Encoding: 12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"; - echo $random; - } - - location /response-headers-length/ { - content_by_lua_block { - local header_length = tonumber(ngx.var.arg_header_length) - local header_count = tonumber(ngx.var.arg_header_count) - for index = 1, header_count do - ngx.header["X-Foo" .. index] = string.rep("a", header_length) - end - - ngx.print("Hello") - } - } - - location = / { - echo -n "Test Home Page"; - } - - location / { - echo_status 404; - more_set_headers "Content-Type: text/html"; - echo -n "Test 404 Not Found"; - } -} - -server { - listen 127.0.0.1:9443; - - location = / { - echo -n "Test Website Home Page"; - } - - location / { - echo_status 404; - more_set_headers "Content-Type: text/plain"; - echo -n "Test Website 404 Not Found"; - } -} - -server { - listen 127.0.0.1:9440; - - location = / { - echo -n "Test Default Website Home Page"; - } - - location / { - echo_status 404; - more_set_headers "Content-Type: text/plain"; - echo -n "Test Default Website 404 Not Found"; - } -} - -server { - listen 127.0.0.1:9442; - - set $x_api_umbrella_request_id $http_x_api_umbrella_request_id; - - location = /reset_backend_called { - content_by_lua_block { - ngx.shared.test_data:set("backend_called", false) - } - } - - location = /backend_called { - content_by_lua_block { - ngx.print(ngx.shared.test_data:get("backend_called")) - } - } - - location = /backend_call_count { - content_by_lua_block { - ngx.print(ngx.shared.test_data:get("backend_call_count:" .. ngx.var.arg_id) or 0) - } - } -} - -server { - listen 127.0.0.1:9448 default_server ssl; - server_name _; - ssl on; - ssl_certificate {{_src_root_dir}}/test/config/ssl_test.crt; - ssl_certificate_key {{_src_root_dir}}/test/config/ssl_test.key; - - # As the default server terminate the SSL connection. This allows us to test - # for situations where the backend server requires SNI. - ssl_certificate_by_lua_block { - local ssl = require "ngx.ssl" - local ok, err = ssl.clear_certs() - if not ok then - ngx.log(ngx.ERR, "failed to clear existing (fallback) certificates") - return ngx.exit(ngx.ERROR) - end - } -} - -server { - listen 127.0.0.1:9448 ssl; - server_name sni1.foo.ooga; - ssl on; - ssl_certificate {{_src_root_dir}}/test/config/ssl_test.crt; - ssl_certificate_key {{_src_root_dir}}/test/config/ssl_test.key; - - location / { - echo -n "SNI1"; - } -} - -server { - listen 127.0.0.1:9448 ssl; - server_name sni2.foo.ooga; - ssl on; - ssl_certificate {{_src_root_dir}}/test/config/ssl_test.crt; - ssl_certificate_key {{_src_root_dir}}/test/config/ssl_test.key; - - location / { - echo -n "SNI2"; - } -} diff --git a/templates/etc/test-env/nginx/nginx.conf.mustache b/templates/etc/test-env/nginx/nginx.conf.mustache deleted file mode 100644 index 9d7930a7b..000000000 --- a/templates/etc/test-env/nginx/nginx.conf.mustache +++ /dev/null @@ -1,50 +0,0 @@ -daemon off; - -{{#user}} -user {{user}} {{group}}; -{{/user}} -{{^user}} -{{#_effective_user_name}} -# Even if user switching isn't enabled, make sure nginx uses the current -# effective user and group for launching the child workers (so nginx's default -# usage of the "nobody" user isn't used). -user {{_effective_user_name}} {{_effective_group_name}}; -{{/_effective_user_name}} -{{/user}} - -pid {{run_dir}}/test-env-nginx.pid; - -events { - worker_connections 1024; -} - -error_log stderr; - -pcre_jit on; - -http { - access_log {{log_dir}}/test-env-nginx/access.log combined; - - client_body_temp_path {{tmp_dir}}/nginx-client_body_temp; - proxy_temp_path {{tmp_dir}}/nginx-proxy_temp; - fastcgi_temp_path {{tmp_dir}}/nginx-fastcgi_temp; - uwsgi_temp_path {{tmp_dir}}/nginx-uwsgi_temp; - scgi_temp_path {{tmp_dir}}/nginx-scgi_temp; - server_tokens off; - - lua_package_path '{{_package_path}}'; - lua_package_cpath '{{_package_cpath}}'; - - gzip on; - gzip_comp_level 2; - gzip_disable msie6; - gzip_min_length 1000; - gzip_proxied any; - gzip_types application/atom+xml application/javascript application/json application/rss+xml application/x-javascript application/xml text/css text/csv text/javascript text/plain text/xml; - gzip_vary on; - - # Don't restrict file upload size. - client_max_body_size 0; - - include ./apis.conf; -} diff --git a/templates/etc/test-env/openldap/seed.ldif.mustache b/templates/etc/test-env/openldap/seed.ldif.mustache deleted file mode 100644 index 465b4cccd..000000000 --- a/templates/etc/test-env/openldap/seed.ldif.mustache +++ /dev/null @@ -1,28 +0,0 @@ -# Data from https://github.com/rroemhild/docker-test-openldap/tree/master/bootstrap/data -dn: dc=planetexpress,dc=com -objectClass: top -objectClass: domain -dc: planetexpress - -dn: ou=people,dc=planetexpress,dc=com -objectClass: top -objectClass: organizationalUnit -description: Planet Express crew -ou: people - -dn: cn=Hermes Conrad,ou=people,dc=planetexpress,dc=com -objectClass: top -objectClass: person -objectClass: organizationalPerson -objectClass: inetOrgPerson -cn: Hermes Conrad -sn: Conrad -description: Human -employeeType: Bureaucrat -employeeType: Accountant -givenName: Hermes -mail: hermes@planetexpress.com -ou: Office Management -uid: hermes -userPassword:: e3NzaGF9M3UzcUdCSmFMc2tiUEg0OVJrYlFtUk9HTktFb1lOUXZkU2lOZmc9P - Q== diff --git a/templates/etc/test-env/openldap/slapd.ldif.mustache b/templates/etc/test-env/openldap/slapd.ldif.mustache deleted file mode 100644 index 0a9e577e6..000000000 --- a/templates/etc/test-env/openldap/slapd.ldif.mustache +++ /dev/null @@ -1,32 +0,0 @@ -dn: cn=config -objectClass: olcGlobal -cn: config -olcArgsFile: {{run_dir}}/test-env-slapd.args -olcPidFile: {{run_dir}}/test-env-slapd.pid - -dn: cn=schema,cn=config -objectClass: olcSchemaConfig -cn: schema - -include: file://{{_test_env_install_dir}}/etc/openldap/schema/core.ldif -include: file://{{_test_env_install_dir}}/etc/openldap/schema/cosine.ldif -include: file://{{_test_env_install_dir}}/etc/openldap/schema/inetorgperson.ldif - -# Frontend settings -dn: olcDatabase=frontend,cn=config -objectClass: olcDatabaseConfig -objectClass: olcFrontendConfig -olcDatabase: frontend - -####################################################################### -# LMDB database definitions -####################################################################### -dn: olcDatabase=mdb,cn=config -objectClass: olcDatabaseConfig -objectClass: olcMdbConfig -olcDatabase: mdb -olcSuffix: dc=planetexpress,dc=com -olcRootDN: cn=Manager,dc=planetexpress,dc=com -olcRootPW: secret -olcDbDirectory: {{db_dir}}/test-env-openldap -olcDbIndex: objectClass eq diff --git a/templates/etc/test-env/unbound/active_test.conf b/templates/etc/test-env/unbound/active_test.conf deleted file mode 100644 index d0f771299..000000000 --- a/templates/etc/test-env/unbound/active_test.conf +++ /dev/null @@ -1,2 +0,0 @@ -# Empty initial file needed for startup (so unbound.conf's "include" of this -# file doesn't fail). Will be overwritten by individual tests. diff --git a/templates/etc/test-env/unbound/unbound.conf.mustache b/templates/etc/test-env/unbound/unbound.conf.mustache deleted file mode 100644 index 6a1eca8f8..000000000 --- a/templates/etc/test-env/unbound/unbound.conf.mustache +++ /dev/null @@ -1,15 +0,0 @@ -server: - port: {{unbound.port}} - interface: 127.0.0.1 - do-daemonize: no - chroot: "" - username: "" - logfile: "" - log-queries: yes - local-zone: "." static - directory: {{etc_dir}}/test-env/unbound - include: {{etc_dir}}/test-env/unbound/active_test.conf - pidfile: {{run_dir}}/test-env-unbound.pid - -remote-control: - control-enable: no diff --git a/templates/etc/trafficserver/global.lua b/templates/etc/trafficserver/global.lua index f26ef6602..b8bebc506 100644 --- a/templates/etc/trafficserver/global.lua +++ b/templates/etc/trafficserver/global.lua @@ -28,7 +28,6 @@ function do_global_send_request() ts.server_request.header["Authorization"] = authorization ts.server_request.header["X-Api-Umbrella-Orig-Authorization"] = nil end - -- Remove temporary HTTP headers used to send information from nginx to -- Traffic Server, since these headers aren't actually needed by the -- underlying API backend. diff --git a/templates/etc/trafficserver/records.config.mustache b/templates/etc/trafficserver/records.config.mustache index 6087fc23f..fd0b38699 100644 --- a/templates/etc/trafficserver/records.config.mustache +++ b/templates/etc/trafficserver/records.config.mustache @@ -1,6 +1,6 @@ # vi: set ft=config : -LOCAL proxy.local.incoming_ip_to_bind STRING {{trafficserver.host}} +#LOCAL proxy.local.incoming_ip_to_bind STRING 127.0.0.1 CONFIG proxy.config.http.server_ports STRING {{trafficserver.port}} # Disable Trafficserver's ability to modify config files and keep backups. This @@ -181,8 +181,9 @@ CONFIG proxy.config.http.response_server_enabled INT 0 CONFIG proxy.config.url_remap.pristine_host_hdr INT 1 # Set the DNS nameservers. -CONFIG proxy.config.dns.resolv_conf STRING NULL -CONFIG proxy.config.dns.nameservers STRING {{dns_resolver._nameservers_trafficserver}} +# Leave that for the system defaults +# CONFIG proxy.config.dns.resolv_conf STRING NULL +# CONFIG proxy.config.dns.nameservers STRING {{dns_resolver._nameservers_trafficserver}} {{#dns_resolver.allow_ipv6}} CONFIG proxy.config.hostdb.ip_resolve STRING client;ipv4;ipv6 From 66e303ab44b4bf80bb5b919cda6a1b4eccc2d58e Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 15 Oct 2021 15:15:12 +0200 Subject: [PATCH 09/24] fix tag --- .github/workflows/prerelease.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 4989d0b2b..04b5222e2 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -77,11 +77,13 @@ jobs: - name: Push to dockerhub run: | - docker tag ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:lastest + docker tag ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:latest docker push ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} docker push ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:latest - name: Push to quay.io run: | docker tag ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} ${{env.QUAY_IO_BASE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} - docker push ${{env.QUAY_IO_BASE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} \ No newline at end of file + docker tag ${{env.BASE_IMAGE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} ${{env.QUAY_IO_BASE_NAME}}-${{ matrix.image }}:latest + docker push ${{env.QUAY_IO_BASE_NAME}}-${{ matrix.image }}:${{ env.IMAGE_TAG }} + docker push ${{env.QUAY_IO_BASE_NAME}}-${{ matrix.image }}:latest \ No newline at end of file From efad10a0adbb43b52bdc8f5f2a267c997c314208 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 15 Oct 2021 16:08:08 +0200 Subject: [PATCH 10/24] update debian --- docker/files/trafficserver/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/files/trafficserver/Dockerfile b/docker/files/trafficserver/Dockerfile index a45a58215..24c2daddc 100644 --- a/docker/files/trafficserver/Dockerfile +++ b/docker/files/trafficserver/Dockerfile @@ -11,7 +11,7 @@ RUN /temp/install-mustache-cli.sh RUN git clone https://luajit.org/git/luajit.git RUN git clone https://git-wip-us.apache.org/repos/asf/trafficserver.git -FROM debian:11.0 +FROM debian:11.1 RUN apt-get update RUN apt-get install -y autoconf From 832b3a71b694ac7dc357f3db20eaf41f01f48faa Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Tue, 19 Oct 2021 09:35:50 +0200 Subject: [PATCH 11/24] fix config --- docker/files/rsyslog/Dockerfile | 2 +- docker/files/rsyslog/entrypoint.sh | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/docker/files/rsyslog/Dockerfile b/docker/files/rsyslog/Dockerfile index 267e04dd6..a79093c0d 100644 --- a/docker/files/rsyslog/Dockerfile +++ b/docker/files/rsyslog/Dockerfile @@ -16,7 +16,7 @@ RUN apt-get update RUN apt-get install -y rsyslog # copy in default config and config template -COPY ./config/default.yml /config/config.yml +COPY ./config/default.yml /config/default.yml COPY ./templates/etc/rsyslog.d/analytics.conf.mustache /templates/analytics.conf.mustache COPY ./templates/etc/rsyslog.conf.mustache /templates/rsyslog.conf.mustache diff --git a/docker/files/rsyslog/entrypoint.sh b/docker/files/rsyslog/entrypoint.sh index 5b7cc3f40..b71c63cf1 100755 --- a/docker/files/rsyslog/entrypoint.sh +++ b/docker/files/rsyslog/entrypoint.sh @@ -1,7 +1,9 @@ #!/bin/bash -mustache /config/config.yml /templates/analytics.conf.mustache > /etc/rsyslog.d/analytics.conf -mustache /config/config.yml /templates/rsyslog.conf.mustache > /etc/rsyslog.conf +cat /config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + +mustache /config/default.yml /templates/analytics.conf.mustache > /etc/rsyslog.d/analytics.conf +mustache /config/default.yml /templates/rsyslog.conf.mustache > /etc/rsyslog.conf # run with -n to prevent auto-backgrounding rsyslogd -n \ No newline at end of file From 41564527d72ae631ab5c78848aeea3e5202d0843 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Tue, 19 Oct 2021 09:42:02 +0200 Subject: [PATCH 12/24] fix config --- docker/files/mora/Dockerfile | 2 +- docker/files/mora/entrypoint.sh | 4 +++- docker/files/proxy/entrypoint.sh | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/docker/files/mora/Dockerfile b/docker/files/mora/Dockerfile index 1601fa890..a31b57995 100644 --- a/docker/files/mora/Dockerfile +++ b/docker/files/mora/Dockerfile @@ -19,7 +19,7 @@ COPY --from=build /mora /mora # mustache file for mora config COPY ./templates/etc/mora.properties.mustache /templates/mora.properties.mustache # copy in default config -COPY ./config/default.yml /config/config.yml +COPY ./config/default.yml /config/default.yml WORKDIR /mora diff --git a/docker/files/mora/entrypoint.sh b/docker/files/mora/entrypoint.sh index 539ae4925..5695ad9fe 100755 --- a/docker/files/mora/entrypoint.sh +++ b/docker/files/mora/entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/sh -mustache /config/config.yml /templates/mora.properties.mustache > mora.properties +cat /config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + +mustache /config/default.yml /templates/mora.properties.mustache > mora.properties mora -config mora.properties \ No newline at end of file diff --git a/docker/files/proxy/entrypoint.sh b/docker/files/proxy/entrypoint.sh index fa438c92c..aee033dea 100755 --- a/docker/files/proxy/entrypoint.sh +++ b/docker/files/proxy/entrypoint.sh @@ -2,6 +2,7 @@ cat /opt/api-umbrella/config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /opt/api-umbrella/config/default.yml - +cat /opt/api-umbrella/config/default.yml static_key=$(/opt/yq e '.static_site.api_key' /opt/api-umbrella/config/default.yml) sed -i 's/API_UMBRELLA_API_KEY/${static_key}/g' /opt/api-umbrella/static/signup/index.html From 9f777238944657c0d580b4141ebad89690dfed87 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Tue, 19 Oct 2021 11:04:00 +0200 Subject: [PATCH 13/24] fix config --- docker/files/mora/Dockerfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker/files/mora/Dockerfile b/docker/files/mora/Dockerfile index a31b57995..d1eae3c9c 100644 --- a/docker/files/mora/Dockerfile +++ b/docker/files/mora/Dockerfile @@ -10,11 +10,14 @@ RUN /temp/install-mustache-cli.sh # checkout current mora RUN git clone https://github.com/emicklei/mora.git +# install yq +RUN wget https://github.com/mikefarah/yq/releases/download/v4.2.0/yq_linux_amd64 -O /opt/yq && chmod +x /opt/yq FROM golang:1.17.2-alpine3.13 COPY --from=build /opt/mustache/mustache /usr/local/bin/mustache COPY --from=build /mora /mora +COPY --from=build /opt/yq /opt/yq # mustache file for mora config COPY ./templates/etc/mora.properties.mustache /templates/mora.properties.mustache From ba08cc6d31f09646aaf7635336c926f2b8544563 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Thu, 21 Oct 2021 07:37:20 +0200 Subject: [PATCH 14/24] fix config --- docker/files/mora/Dockerfile | 3 ++- docker/files/proxy/entrypoint.sh | 1 - docker/files/rsyslog/Dockerfile | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docker/files/mora/Dockerfile b/docker/files/mora/Dockerfile index d1eae3c9c..53e800cc6 100644 --- a/docker/files/mora/Dockerfile +++ b/docker/files/mora/Dockerfile @@ -21,6 +21,7 @@ COPY --from=build /opt/yq /opt/yq # mustache file for mora config COPY ./templates/etc/mora.properties.mustache /templates/mora.properties.mustache + # copy in default config COPY ./config/default.yml /config/default.yml @@ -33,4 +34,4 @@ RUN go install -v ./ # copy entrypoint COPY ./docker/files/mora/entrypoint.sh /mora/entrypoint.sh -ENTRYPOINT ["/mora/entrypoint.sh"] +ENTRYPOINT ["/mora/entrypoint.sh"] \ No newline at end of file diff --git a/docker/files/proxy/entrypoint.sh b/docker/files/proxy/entrypoint.sh index aee033dea..fa438c92c 100755 --- a/docker/files/proxy/entrypoint.sh +++ b/docker/files/proxy/entrypoint.sh @@ -2,7 +2,6 @@ cat /opt/api-umbrella/config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /opt/api-umbrella/config/default.yml - -cat /opt/api-umbrella/config/default.yml static_key=$(/opt/yq e '.static_site.api_key' /opt/api-umbrella/config/default.yml) sed -i 's/API_UMBRELLA_API_KEY/${static_key}/g' /opt/api-umbrella/static/signup/index.html diff --git a/docker/files/rsyslog/Dockerfile b/docker/files/rsyslog/Dockerfile index a79093c0d..9dc09312f 100644 --- a/docker/files/rsyslog/Dockerfile +++ b/docker/files/rsyslog/Dockerfile @@ -7,9 +7,13 @@ RUN apt-get install -y wget COPY ./docker/files/install-mustache-cli.sh /temp/install-mustache-cli.sh RUN /temp/install-mustache-cli.sh +# install yq +RUN wget https://github.com/mikefarah/yq/releases/download/v4.2.0/yq_linux_amd64 -O /opt/yq && chmod +x /opt/yq + FROM debian:11.0-slim COPY --from=build /opt/mustache/mustache /usr/local/bin/mustache +COPY --from=build /opt/yq /opt/yq # install rsyslog RUN apt-get update From c88e448bff55252aeaf22059bde764a0fa1567a3 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 22 Oct 2021 10:01:06 +0200 Subject: [PATCH 15/24] support same config mechanism --- docker/files/api/entrypoint.sh | 4 ++-- docker/files/mora/entrypoint.sh | 9 +++++++-- docker/files/proxy/entrypoint.sh | 10 ++++++++-- docker/files/rsyslog/entrypoint.sh | 11 ++++++++--- docker/files/trafficserver/Dockerfile | 4 ++++ docker/files/trafficserver/entrypoint.sh | 11 ++++++----- 6 files changed, 35 insertions(+), 14 deletions(-) diff --git a/docker/files/api/entrypoint.sh b/docker/files/api/entrypoint.sh index aec5474e3..04da2ada8 100755 --- a/docker/files/api/entrypoint.sh +++ b/docker/files/api/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/bash -if test -f "/config/config.yml"; then - cat /config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - +if test -f "/mounted-config/config.yml"; then + cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - cat /config/default.yml > /config/merged-config.yml else cat /config/default.yml > /config/merged-config.yml diff --git a/docker/files/mora/entrypoint.sh b/docker/files/mora/entrypoint.sh index 5695ad9fe..1064a6bbb 100755 --- a/docker/files/mora/entrypoint.sh +++ b/docker/files/mora/entrypoint.sh @@ -1,7 +1,12 @@ #!/bin/sh -cat /config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - +if test -f "/mounted-config/config.yml"; then + cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + cat /config/default.yml > /config/merged-config.yml +else + cat /config/default.yml > /config/merged-config.yml +fi -mustache /config/default.yml /templates/mora.properties.mustache > mora.properties +mustache /config/merged-config.yml /templates/mora.properties.mustache > mora.properties mora -config mora.properties \ No newline at end of file diff --git a/docker/files/proxy/entrypoint.sh b/docker/files/proxy/entrypoint.sh index fa438c92c..7a033a6a9 100755 --- a/docker/files/proxy/entrypoint.sh +++ b/docker/files/proxy/entrypoint.sh @@ -1,8 +1,14 @@ #!/bin/sh -cat /opt/api-umbrella/config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /opt/api-umbrella/config/default.yml - -static_key=$(/opt/yq e '.static_site.api_key' /opt/api-umbrella/config/default.yml) +if test -f "/mounted-config/config.yml"; then + cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /opt/api-umbrella/config/default.yml - + cat /opt/api-umbrella/config/default.yml - > /opt/api-umbrella/config/merged-config.yml +else + cat /opt/api-umbrella/config/default.yml > /opt/api-umbrella/config/merged-config.yml +fi + +static_key=$(/opt/yq e '.static_site.api_key' /opt/api-umbrella/config/merged-config.yml) sed -i 's/API_UMBRELLA_API_KEY/${static_key}/g' /opt/api-umbrella/static/signup/index.html api-umbrella run \ No newline at end of file diff --git a/docker/files/rsyslog/entrypoint.sh b/docker/files/rsyslog/entrypoint.sh index b71c63cf1..3e73adb31 100755 --- a/docker/files/rsyslog/entrypoint.sh +++ b/docker/files/rsyslog/entrypoint.sh @@ -1,9 +1,14 @@ #!/bin/bash -cat /config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - +if test -f "/mounted-config/config.yml"; then + cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + cat /config/default.yml > /config/merged-config.yml +else + cat /config/default.yml > /config/merged-config.yml +fi -mustache /config/default.yml /templates/analytics.conf.mustache > /etc/rsyslog.d/analytics.conf -mustache /config/default.yml /templates/rsyslog.conf.mustache > /etc/rsyslog.conf +mustache /config/merged-config.yml /templates/analytics.conf.mustache > /etc/rsyslog.d/analytics.conf +mustache /config/merged-config.yml /templates/rsyslog.conf.mustache > /etc/rsyslog.conf # run with -n to prevent auto-backgrounding rsyslogd -n \ No newline at end of file diff --git a/docker/files/trafficserver/Dockerfile b/docker/files/trafficserver/Dockerfile index 24c2daddc..22f63cad1 100644 --- a/docker/files/trafficserver/Dockerfile +++ b/docker/files/trafficserver/Dockerfile @@ -10,6 +10,8 @@ RUN /temp/install-mustache-cli.sh RUN git clone https://luajit.org/git/luajit.git RUN git clone https://git-wip-us.apache.org/repos/asf/trafficserver.git +# install yq +RUN wget https://github.com/mikefarah/yq/releases/download/v4.2.0/yq_linux_amd64 -O /opt/yq && chmod +x /opt/yq FROM debian:11.1 @@ -34,6 +36,8 @@ RUN apt-get install -y wget COPY --from=build /opt/mustache/mustache /usr/local/bin/mustache COPY --from=build /trafficserver /trafficserver COPY --from=build /luajit /luajit +COPY --from=build /opt/yq /opt/yq + WORKDIR /luajit RUN make install PREFIX=/opt/luajit diff --git a/docker/files/trafficserver/entrypoint.sh b/docker/files/trafficserver/entrypoint.sh index e5f5c4d90..c489c3040 100755 --- a/docker/files/trafficserver/entrypoint.sh +++ b/docker/files/trafficserver/entrypoint.sh @@ -2,11 +2,12 @@ mkdir /templates/config -wget https://github.com/mikefarah/yq/releases/download/v4.2.0/yq_linux_amd64 -O /templates/config/yq &&\ - chmod +x /templates/config/yq \ - -cat /config/config.yml | /templates/config/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - -cat /config/default.yml > /config/merged-config.yml +if test -f "/mounted-config/config.yml"; then + cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + cat /config/default.yml > /config/merged-config.yml +else + cat /config/default.yml > /config/merged-config.yml +fi mustache /config/merged-config.yml /templates/logging.yaml.mustache > /templates/logging.yaml mustache /config/merged-config.yml /templates/plugin.config.mustache > /templates/plugin.config From 34ed60e84978b2c3234846753a2ba54dac85b7c8 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 22 Oct 2021 11:13:17 +0200 Subject: [PATCH 16/24] yq path --- docker/files/api/entrypoint.sh | 4 ++-- docker/files/mora/entrypoint.sh | 2 +- docker/files/proxy/entrypoint.sh | 7 ++++--- docker/files/rsyslog/entrypoint.sh | 2 +- docker/files/trafficserver/entrypoint.sh | 2 +- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/docker/files/api/entrypoint.sh b/docker/files/api/entrypoint.sh index 04da2ada8..93ae0efe4 100755 --- a/docker/files/api/entrypoint.sh +++ b/docker/files/api/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/bash if test -f "/mounted-config/config.yml"; then - cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + cat /mounted-config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - cat /config/default.yml > /config/merged-config.yml else cat /config/default.yml > /config/merged-config.yml @@ -9,4 +9,4 @@ fi export RAILS_SECRET_TOKEN=$(tr -dc A-Za-z0-9 /config/merged-config.yml else cat /config/default.yml > /config/merged-config.yml diff --git a/docker/files/proxy/entrypoint.sh b/docker/files/proxy/entrypoint.sh index 7a033a6a9..de1bdb151 100755 --- a/docker/files/proxy/entrypoint.sh +++ b/docker/files/proxy/entrypoint.sh @@ -1,10 +1,11 @@ #!/bin/sh - if test -f "/mounted-config/config.yml"; then - cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /opt/api-umbrella/config/default.yml - - cat /opt/api-umbrella/config/default.yml - > /opt/api-umbrella/config/merged-config.yml + echo "Mounted" + cat /mounted-config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /opt/api-umbrella/config/default.yml - + cat /opt/api-umbrella/config/default.yml > /opt/api-umbrella/config/merged-config.yml else + echo "Default" cat /opt/api-umbrella/config/default.yml > /opt/api-umbrella/config/merged-config.yml fi diff --git a/docker/files/rsyslog/entrypoint.sh b/docker/files/rsyslog/entrypoint.sh index 3e73adb31..57b9504a6 100755 --- a/docker/files/rsyslog/entrypoint.sh +++ b/docker/files/rsyslog/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/bash if test -f "/mounted-config/config.yml"; then - cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + cat /mounted-config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - cat /config/default.yml > /config/merged-config.yml else cat /config/default.yml > /config/merged-config.yml diff --git a/docker/files/trafficserver/entrypoint.sh b/docker/files/trafficserver/entrypoint.sh index c489c3040..d892ed298 100755 --- a/docker/files/trafficserver/entrypoint.sh +++ b/docker/files/trafficserver/entrypoint.sh @@ -3,7 +3,7 @@ mkdir /templates/config if test -f "/mounted-config/config.yml"; then - cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + cat /mounted-config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - cat /config/default.yml > /config/merged-config.yml else cat /config/default.yml > /config/merged-config.yml From 6f0ea093274da4ca681f0d95ded89f485ce73b13 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 22 Oct 2021 11:57:10 +0200 Subject: [PATCH 17/24] yq path --- docker/files/api/entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker/files/api/entrypoint.sh b/docker/files/api/entrypoint.sh index 93ae0efe4..04da2ada8 100755 --- a/docker/files/api/entrypoint.sh +++ b/docker/files/api/entrypoint.sh @@ -1,7 +1,7 @@ #!/bin/bash if test -f "/mounted-config/config.yml"; then - cat /mounted-config/config.yml | /opt/yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - + cat /mounted-config/config.yml | yq eval-all --inplace 'select(fileIndex == 0) * select(fileIndex == 1)' /config/default.yml - cat /config/default.yml > /config/merged-config.yml else cat /config/default.yml > /config/merged-config.yml @@ -9,4 +9,4 @@ fi export RAILS_SECRET_TOKEN=$(tr -dc A-Za-z0-9 Date: Fri, 5 Nov 2021 11:25:57 +0100 Subject: [PATCH 18/24] docekr updates --- docker/files/rsyslog/Dockerfile | 4 ++++ docker/files/rsyslog/entrypoint.sh | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/docker/files/rsyslog/Dockerfile b/docker/files/rsyslog/Dockerfile index 9dc09312f..5510a7205 100644 --- a/docker/files/rsyslog/Dockerfile +++ b/docker/files/rsyslog/Dockerfile @@ -18,6 +18,7 @@ COPY --from=build /opt/yq /opt/yq # install rsyslog RUN apt-get update RUN apt-get install -y rsyslog +RUN apt-get install -y rsyslog-elasticsearch # copy in default config and config template COPY ./config/default.yml /config/default.yml @@ -27,5 +28,8 @@ COPY ./templates/etc/rsyslog.conf.mustache /templates/rsyslog.conf.mustache # copy entrypoint COPY ./docker/files/rsyslog/entrypoint.sh /entrypoint.sh +RUN mkdir /opt/rsyslog +RUN chmod +rw /opt/rsyslog + ENTRYPOINT ["/entrypoint.sh"] diff --git a/docker/files/rsyslog/entrypoint.sh b/docker/files/rsyslog/entrypoint.sh index 57b9504a6..5e096ce93 100755 --- a/docker/files/rsyslog/entrypoint.sh +++ b/docker/files/rsyslog/entrypoint.sh @@ -10,5 +10,17 @@ fi mustache /config/merged-config.yml /templates/analytics.conf.mustache > /etc/rsyslog.d/analytics.conf mustache /config/merged-config.yml /templates/rsyslog.conf.mustache > /etc/rsyslog.conf +if test -f "/var/log/trafficserver/access.log"; then + echo "Log files already exist" +else + echo "Touch files to monitor" + mkdir /var/log/trafficserver + touch /var/log/trafficserver/access.log + touch /var/log/trafficserver/diags.log + touch /var/log/trafficserver/error.log + touch /var/log/trafficserver/manager.log + touch /var/log/trafficserver/traffic.out +fi + # run with -n to prevent auto-backgrounding rsyslogd -n \ No newline at end of file From 967638ed20d258bd1ad13f8469da42435d116759 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 5 Nov 2021 11:26:31 +0100 Subject: [PATCH 19/24] code updates --- src/lua/cli/read_config.lua | 29 +++++++------------ src/lua/http-api/health.lua | 2 +- src/lua/proxy/log_utils.lua | 16 ++++++++++ src/lua/proxy/middleware/rewrite_response.lua | 1 + src/lua/utils/elasticsearch.lua | 3 +- .../lib/api_umbrella/elasticsearch_proxy.rb | 7 ++++- 6 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/lua/cli/read_config.lua b/src/lua/cli/read_config.lua index 42bfd31af..156c7fb21 100644 --- a/src/lua/cli/read_config.lua +++ b/src/lua/cli/read_config.lua @@ -296,25 +296,18 @@ local function set_computed_config() config["dns_resolver"]["_etc_hosts"] = read_etc_hosts() config["elasticsearch"]["_servers"] = {} - if config["elasticsearch"]["hosts"] then - for _, elasticsearch_url in ipairs(config["elasticsearch"]["hosts"]) do - local parsed, parse_err = url_parse(elasticsearch_url) - if not parsed or parse_err then - print("failed to parse: ", elasticsearch_url, parse_err) - else - parsed["port"] = tonumber(parsed["port"]) - if not parsed["port"] then - if parsed["scheme"] == "https" then - parsed["port"] = 443 - elseif parsed["scheme"] == "http" then - parsed["port"] = 80 - end - end - - table.insert(config["elasticsearch"]["_servers"], parsed) - end - end + parsed = {} + parsed["host"] = config["elasticsearch"]["host"] + parsed["port"] = config["elasticsearch"]["port"] + if config["elasticsearch"]["scheme"] == "https" then + parsed["scheme"] = "https" + else + parsed["scheme"] = "http" + end + if config["elasticsearch"]["userinfo"] then + parsed["userinfo"] = config["elasticsearch"]["userinfo"] end + table.insert(config["elasticsearch"]["_servers"], parsed) if not config["analytics"]["outputs"] then config["analytics"]["outputs"] = { config["analytics"]["adapter"] } diff --git a/src/lua/http-api/health.lua b/src/lua/http-api/health.lua index a6adcfa84..fee3396e7 100644 --- a/src/lua/http-api/health.lua +++ b/src/lua/http-api/health.lua @@ -36,7 +36,7 @@ local function status_response(quick) ngx.log(ngx.ERR, "Before check elasticsearch") -- Check the health of the ElasticSearch cluster if its configured - if next(config["elasticsearch"]["hosts"]) ~= nil then + if config["elasticsearch"]["host"] ~= nil then ngx.log(ngx.ERR, "Check elasticsearch") response["details"]["analytics_db"] = "red" response["details"]["analytics_db_setup"] = "red" diff --git a/src/lua/proxy/log_utils.lua b/src/lua/proxy/log_utils.lua index 4862d3a37..532b996de 100644 --- a/src/lua/proxy/log_utils.lua +++ b/src/lua/proxy/log_utils.lua @@ -415,6 +415,20 @@ function _M.build_syslog_message(data) return syslog_message end +function dump(o) + if type(o) == 'table' then + local s = '{ ' + for k,v in pairs(o) do + if type(k) ~= 'number' then k = '"'..k..'"' end + s = s .. '['..k..'] = ' .. dump(v) .. ',' + end + return s .. '} ' + else + return tostring(o) + end +end + + function _M.send_syslog_message(syslog_message) -- Check the syslog message length to ensure it doesn't exceed the configured -- rsyslog maxMessageSize value. @@ -431,6 +445,8 @@ function _M.send_syslog_message(syslog_message) -- Init the resty logger socket. if not logger.initted() then + print("INIT_LOGGER") + print(dump(config["rsyslog"])) local ok, err = logger.init{ host = config["rsyslog"]["host"], port = config["rsyslog"]["port"], diff --git a/src/lua/proxy/middleware/rewrite_response.lua b/src/lua/proxy/middleware/rewrite_response.lua index 43dc31203..a4de82008 100644 --- a/src/lua/proxy/middleware/rewrite_response.lua +++ b/src/lua/proxy/middleware/rewrite_response.lua @@ -212,6 +212,7 @@ return function(settings) end if ngx.var.http_x_api_umbrella_test_return_request_id == "true" then + print("RETURN_REQUEST_ID") ngx.header["X-Api-Umbrella-Test-Request-Id"] = ngx.var.x_api_umbrella_request_id end end diff --git a/src/lua/utils/elasticsearch.lua b/src/lua/utils/elasticsearch.lua index b497c962a..1f27e15cc 100644 --- a/src/lua/utils/elasticsearch.lua +++ b/src/lua/utils/elasticsearch.lua @@ -4,7 +4,7 @@ local is_empty = require("pl.types").is_empty local json_decode = require("cjson").decode local json_encode = require "api-umbrella.utils.json_encode" -local server = config["elasticsearch"]["_first_server"] +local server = config["elasticsearch"] local _M = {} @@ -20,7 +20,6 @@ function _M.query(path, options) if not options["headers"] then options["headers"] = {} end - if server["userinfo"] and not options["headers"]["Authorization"] then options["headers"]["Authorization"] = "Basic " .. ngx.encode_base64(server["userinfo"]) end diff --git a/src/ruby/web-app/lib/api_umbrella/elasticsearch_proxy.rb b/src/ruby/web-app/lib/api_umbrella/elasticsearch_proxy.rb index bd3b9a2ed..5d3836a08 100644 --- a/src/ruby/web-app/lib/api_umbrella/elasticsearch_proxy.rb +++ b/src/ruby/web-app/lib/api_umbrella/elasticsearch_proxy.rb @@ -3,11 +3,16 @@ class ElasticsearchProxy < Rack::Proxy PREFIX = "/admin/elasticsearch".freeze def initialize(options = {}) + super(options.merge({ - :backend => ApiUmbrellaConfig[:elasticsearch][:hosts].first, + :backend => config_to_connection_string(ApiUmbrellaConfig[:elasticsearch]), })) end + def config_to_connection_string(config) + config[:scheme] + "://" + config[:host] + ":" + config[:port].to_s + end + def perform_request(env) admin = env["warden"].user(:admin) if(admin && admin.superuser?) From 0ee40b1b8b6829a2e1bb3e1f0676768e534bd51d Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 5 Nov 2021 11:29:14 +0100 Subject: [PATCH 20/24] code updates --- templates/etc/rsyslog.conf.mustache | 36 +----- .../etc/rsyslog.d/analytics.conf.mustache | 33 ++---- .../etc/trafficserver/logging.yaml.mustache | 105 +++++++++--------- .../etc/trafficserver/records.config.mustache | 6 +- 4 files changed, 73 insertions(+), 107 deletions(-) diff --git a/templates/etc/rsyslog.conf.mustache b/templates/etc/rsyslog.conf.mustache index 4478dff0f..6da49a8ce 100644 --- a/templates/etc/rsyslog.conf.mustache +++ b/templates/etc/rsyslog.conf.mustache @@ -2,19 +2,16 @@ # or HTTP headers. global(maxMessageSize="32k") -global(workDirectory="{{db_dir}}/rsyslog") +global(workDirectory="/opt/rsyslog") # Load Modules module(load="imfile") module(load="imtcp" MaxSessions="500") module(load="mmjsonparse") module(load="mmutf8fix") -{{#log._destination_console?}} -module(load="omstdout") -{{/log._destination_console?}} -{{#analytics._output_elasticsearch?}} +{{#analytics.isElasticsearch}} module(load="omelasticsearch") -{{/analytics._output_elasticsearch?}} +{{/analytics.isElasticsearch}} # Define templates for ElasticSearch output. template(name="elasticsearch-index" type="string" string="api-umbrella-logs-write-%timereported:1:7:date-rfc3339%") @@ -37,40 +34,17 @@ ruleset(name="analytics-ruleset" queue.type="FixedArray" queue.size="5000") { include(file="/etc/rsyslog.d/analytics.conf") } -{{#log._destination_console?}} - ruleset(name="logs-ruleset" queue.type="FixedArray" queue.size="5000") { - action( - name="output-logs-stdout" - type="omstdout" - template="template-stdout" - ) - } - - input(type="imfile" file="{{log_dir}}/trafficserver/access.log" tag="trafficserver-access" ruleset="logs-ruleset") - input(type="imfile" file="{{log_dir}}/trafficserver/diags.log" tag="trafficserver-diags" ruleset="logs-ruleset") - input(type="imfile" file="{{log_dir}}/trafficserver/error.log" tag="trafficserver-error" ruleset="logs-ruleset") - input(type="imfile" file="{{log_dir}}/trafficserver/manager.log" tag="trafficserver-manager" ruleset="logs-ruleset") - input(type="imfile" file="{{log_dir}}/trafficserver/traffic.out" tag="trafficserver-out" ruleset="logs-ruleset") -{{/log._destination_console?}} - # TCP Input input(type="imtcp" address="{{rsyslog.host}}" port="{{rsyslog.port}}" ruleset="analytics-ruleset") ruleset(name="stats-ruleset" queue.type="FixedArray" queue.size="5000") { - {{#log._destination_console?}} - action( - name="output-stats-stdout" - type="omstdout" - template="template-stdout" - ) - {{/log._destination_console?}} - {{^log._destination_console?}} + {{#log.isFile}} action( name="output-stats-file" type="omfile" file="{{log_dir}}/rsyslog/stats.log" ) - {{/log._destination_console?}} + {{/log.isFile}} } # Output queue statistics periodically so the health of the queue can be diff --git a/templates/etc/rsyslog.d/analytics.conf.mustache b/templates/etc/rsyslog.d/analytics.conf.mustache index 701dad1f5..5c4480b32 100644 --- a/templates/etc/rsyslog.d/analytics.conf.mustache +++ b/templates/etc/rsyslog.d/analytics.conf.mustache @@ -5,7 +5,7 @@ action(name="analytics-utf8fix" type="mmutf8fix") # Parse the JSON data out of the @cee-enhanced logs. action(name="analytics-jsonparse" type="mmjsonparse") -{{#analytics._output_elasticsearch?}} +{{#analytics.isElasticsearch}} # Define the ElasticSearch-based output. # This aliases some of the logged fields to different names for backwards # compatibility with the ElasticSearch data. @@ -160,14 +160,12 @@ if($!raw!legacy_user_registration_source != "") then { action( name="analytics-output-elasticsearch" type="omelasticsearch" - server="{{elasticsearch._first_server.host}}" - serverport="{{elasticsearch._first_server.port}}" - {{#elasticsearch._first_server.user}} - uid="{{elasticsearch._first_server.user}}" - {{/elasticsearch._first_server.user}} - {{#elasticsearch._first_server.password}} - pwd="{{elasticsearch._first_server.password}}" - {{/elasticsearch._first_server.password}} + server="{{elasticsearch.host}}" + serverport="{{elasticsearch.port}}" + {{#elasticsearch.userinfo}} + uid="{{elasticsearch.userinfo.user}}" + pwd="{{elasticsearch.userinfo.password}}" + {{/elasticsearch.userinfo}} searchIndex="elasticsearch-index" dynSearchIndex="on" searchType="log" @@ -179,7 +177,7 @@ action( bulkId="elasticsearch-id" dynBulkId="on" - errorfile="{{log_dir}}/rsyslog/elasticsearch_error.log" + errorfile="/var/log/rsyslog/elasticsearch_error.log" # Allow bulk indexing of batches *up to* this size. # @@ -218,21 +216,14 @@ action( action.resumeInterval="30" action.resumeRetryCount="-1" ) -{{/analytics._output_elasticsearch?}} +{{/analytics.isElasticsearch}} -{{#log._destination_console?}} - action( - name="analytics-output-stdout" - type="omstdout" - template="all-json-record" - ) -{{/log._destination_console?}} -{{^log._destination_console?}} +{{#log.isFile}} # Output to local file for redundancy until we prove the new system out. action( name="analytics-output-file" type="omfile" - file="{{log_dir}}/rsyslog/requests.log" + file="/var/log/rsyslog/requests.log" template="all-json-record" queue.type="LinkedList" queue.filename="queue-file" @@ -246,4 +237,4 @@ action( ioBufferSize="256k" action.resumeRetryCount="-1" ) -{{/log._destination_console?}} +{{/log.isFile}} diff --git a/templates/etc/trafficserver/logging.yaml.mustache b/templates/etc/trafficserver/logging.yaml.mustache index 080df5f34..c69ff6743 100644 --- a/templates/etc/trafficserver/logging.yaml.mustache +++ b/templates/etc/trafficserver/logging.yaml.mustache @@ -1,53 +1,54 @@ -formats: - - name: extended_custom - # Netscape Common - # chi: Client: IP address of the client’s host. - # caun: Client Request: Authentication User name - # cqtn: Client Request: Client request timestamp - # cqtx: Client Request: HTTP client request text - # pssc: Proxy Response: HTTP response status code sent by Traffic Server proxy to the client. - # pscl: Proxy Response: Content body length of the Traffic Server proxy response. - # - # Netscape Extended-2 - # sssc: Origin Response: HTTP response status code sent by the origin server to the Traffic Server proxy. - # sscl: Origin Response: Content body length of the origin server response to Traffic Server. - # cqcl: Client Request: Client request content length, in bytes. - # pqcl: Proxy Request: Content body length of the Traffic Server proxy request to the origin server. - # pqcl: Proxy Request: Content body length of the Traffic Server proxy request to the origin server. - # cqhl: Client Request: Client request header length, in bytes. - # pshl: Proxy Response: Header length of the Traffic Server response to client. - # pqhl: Proxy Request: Header length of the Traffic Server proxy request to the origin server. - # sshl: Origin Response: Header length of the origin server response. - # ttms: Client-Proxy Connection: Time in milliseconds spent by Traffic Server processing the entire client request. Measured from the time the connection between the client and Traffic Server proxy was established until the last byte of the proxy response was delivered to the client. - # stms: Proxy-Origin Connection: Time (in milliseconds) spent accessing the origin server. Measured from the time the connection between proxy and origin is established to the time it was closed. - # phr: Proxy: Proxy Hierarchy Route. Specifies the route through configured hierarchical caches used to retrieve the object. - # cfsc: Client Request: Finish status code specifying whether the client request to Traffic Server was successfully completed (FIN) or interrupted (INTR). - # pfsc: Proxy Request: Finish status code specifying whether the proxy request from Traffic Server to the origin server was successfully completed (FIN), interrupted (INTR), or timed out (TIMEOUT). - # crc: Proxy Cache: Cache Result Code. The result of Traffic Server attempting to obtain the object from cache. - # - # Custom - # crsc: Proxy Cache: Cache Result Sub-Code. More specific code to complement the Cache Result Code. - # chm: Proxy Cache: Cache Hit-Miss status. Specifies the level of cache from which this request was served by Traffic Server. Currently supports only RAM (HIT_RAM) vs disk (HIT_DISK). - # cwr: Proxy Cache: Cache Write Result. Specifies the result of attempting to write to cache: not relevant (-), no cache write (WL_MISS), write interrupted (INTR), error while writing (ERR), or cache write successful (FIN). - # sca: Proxy: Number of attempts within the current transaction by Traffic Server in connecting to the origin server. - # sstc: Proxy: Number of transactions between the Traffic Server proxy and the origin server from a single session. Any value greater than zero indicates connection reuse. - # psct: Origin Server: Response Content type of the document obtained by Traffic Server from the origin server response. - # crec: Client Request: Error code in hex which Traffic Server received - # ctec: Client Response: Error code in hex which Traffic Server transmitted - # shi: Origin Server: IP address resolved via DNS by Traffic Server for the origin server. For hosts with multiple IP addresses, the address used by Traffic Server for the connection will be reported. - # shn: Origin Server: Host name of the origin server. - # pqsp: Proxy Request: Port number from which Traffic Server issued the proxy request to the origin server. Cache hits will yield a value of 0. - # cqhv: Client Request: Client request HTTP version. - # sshv: Origin Response: Origin server’s response HTTP version. - # pqssl: Proxy Request: Indicates whether the connection from Traffic Server to the origin was over SSL or not. - # csssc: Cached Proxy: Response HTTP response status code of the origin server response, as cached by Traffic Server. - # cqtr: Client Request: TCP reused status of the connection between the client and Traffic Server proxy, indicating whether the request was delivered through an already established connection. - # cquuc: Client Request: Canonical (prior to remapping) effective URL from client request. - format: '% - % [%] "%" % % id=%<{X-Api-Umbrella-Request-ID}cqh> sssc=% sscl=% cqcl=% pqcl=% cqhl=% pshl=% pqhl=% sshl=% ttms=% stms=% phr=% cfsc=% pfsc=% crc=% crsc=% chm=% cwr=% sca=% sstc=% psct="%" crec="%" ctec="%" shi=% shn=% pqsp=% cqhv=% sshv=% pqssl=% csssc=% cqtr=% cquuc="%" muabms=%<{TS_MILESTONE_UA_BEGIN-TS_MILESTONE_SM_START}msdms> muarhdms=%<{TS_MILESTONE_UA_READ_HEADER_DONE-TS_MILESTONE_SM_START}msdms> muabwms=%<{TS_MILESTONE_UA_BEGIN_WRITE-TS_MILESTONE_SM_START}msdms> muacms=%<{TS_MILESTONE_UA_CLOSE-TS_MILESTONE_SM_START}msdms> msfcms=%<{TS_MILESTONE_SERVER_FIRST_CONNECT-TS_MILESTONE_SM_START}msdms> mscms=%<{TS_MILESTONE_SERVER_CONNECT-TS_MILESTONE_SM_START}msdms> mscems=%<{TS_MILESTONE_SERVER_CONNECT_END-TS_MILESTONE_SM_START}msdms> msbwms=%<{TS_MILESTONE_SERVER_BEGIN_WRITE-TS_MILESTONE_SM_START}msdms> msfrms=%<{TS_MILESTONE_SERVER_FIRST_READ-TS_MILESTONE_SM_START}msdms> msrhdms=%<{TS_MILESTONE_SERVER_READ_HEADER_DONE-TS_MILESTONE_SM_START}msdms> msclms=%<{TS_MILESTONE_SERVER_CLOSE-TS_MILESTONE_SM_START}msdms> mcorbms=%<{TS_MILESTONE_CACHE_OPEN_READ_BEGIN-TS_MILESTONE_SM_START}msdms> mcorems=%<{TS_MILESTONE_CACHE_OPEN_READ_END-TS_MILESTONE_SM_START}msdms> mcowbms=%<{TS_MILESTONE_CACHE_OPEN_WRITE_BEGIN-TS_MILESTONE_SM_START}msdms> mcowems=%<{TS_MILESTONE_CACHE_OPEN_WRITE_END-TS_MILESTONE_SM_START}msdms> mdlbms=%<{TS_MILESTONE_DNS_LOOKUP_BEGIN-TS_MILESTONE_SM_START}msdms> mdlems=%<{TS_MILESTONE_DNS_LOOKUP_END-TS_MILESTONE_SM_START}msdms> msmsms=%<{TS_MILESTONE_SM_START-TS_MILESTONE_SM_START}msdms> msmfms=%<{TS_MILESTONE_SM_FINISH-TS_MILESTONE_SM_START}msdms> mpams=%<{TS_MILESTONE_PLUGIN_ACTIVE-TS_MILESTONE_SM_START}msdms> mptms=%<{TS_MILESTONE_PLUGIN_TOTAL-TS_MILESTONE_SM_START}msdms>' +logging: + formats: + - name: extended_custom + # Netscape Common + # chi: Client: IP address of the client’s host. + # caun: Client Request: Authentication User name + # cqtn: Client Request: Client request timestamp + # cqtx: Client Request: HTTP client request text + # pssc: Proxy Response: HTTP response status code sent by Traffic Server proxy to the client. + # pscl: Proxy Response: Content body length of the Traffic Server proxy response. + # + # Netscape Extended-2 + # sssc: Origin Response: HTTP response status code sent by the origin server to the Traffic Server proxy. + # sscl: Origin Response: Content body length of the origin server response to Traffic Server. + # cqcl: Client Request: Client request content length, in bytes. + # pqcl: Proxy Request: Content body length of the Traffic Server proxy request to the origin server. + # pqcl: Proxy Request: Content body length of the Traffic Server proxy request to the origin server. + # cqhl: Client Request: Client request header length, in bytes. + # pshl: Proxy Response: Header length of the Traffic Server response to client. + # pqhl: Proxy Request: Header length of the Traffic Server proxy request to the origin server. + # sshl: Origin Response: Header length of the origin server response. + # ttms: Client-Proxy Connection: Time in milliseconds spent by Traffic Server processing the entire client request. Measured from the time the connection between the client and Traffic Server proxy was established until the last byte of the proxy response was delivered to the client. + # stms: Proxy-Origin Connection: Time (in milliseconds) spent accessing the origin server. Measured from the time the connection between proxy and origin is established to the time it was closed. + # phr: Proxy: Proxy Hierarchy Route. Specifies the route through configured hierarchical caches used to retrieve the object. + # cfsc: Client Request: Finish status code specifying whether the client request to Traffic Server was successfully completed (FIN) or interrupted (INTR). + # pfsc: Proxy Request: Finish status code specifying whether the proxy request from Traffic Server to the origin server was successfully completed (FIN), interrupted (INTR), or timed out (TIMEOUT). + # crc: Proxy Cache: Cache Result Code. The result of Traffic Server attempting to obtain the object from cache. + # + # Custom + # crsc: Proxy Cache: Cache Result Sub-Code. More specific code to complement the Cache Result Code. + # chm: Proxy Cache: Cache Hit-Miss status. Specifies the level of cache from which this request was served by Traffic Server. Currently supports only RAM (HIT_RAM) vs disk (HIT_DISK). + # cwr: Proxy Cache: Cache Write Result. Specifies the result of attempting to write to cache: not relevant (-), no cache write (WL_MISS), write interrupted (INTR), error while writing (ERR), or cache write successful (FIN). + # sca: Proxy: Number of attempts within the current transaction by Traffic Server in connecting to the origin server. + # sstc: Proxy: Number of transactions between the Traffic Server proxy and the origin server from a single session. Any value greater than zero indicates connection reuse. + # psct: Origin Server: Response Content type of the document obtained by Traffic Server from the origin server response. + # crec: Client Request: Error code in hex which Traffic Server received + # ctec: Client Response: Error code in hex which Traffic Server transmitted + # shi: Origin Server: IP address resolved via DNS by Traffic Server for the origin server. For hosts with multiple IP addresses, the address used by Traffic Server for the connection will be reported. + # shn: Origin Server: Host name of the origin server. + # pqsp: Proxy Request: Port number from which Traffic Server issued the proxy request to the origin server. Cache hits will yield a value of 0. + # cqhv: Client Request: Client request HTTP version. + # sshv: Origin Response: Origin server’s response HTTP version. + # pqssl: Proxy Request: Indicates whether the connection from Traffic Server to the origin was over SSL or not. + # csssc: Cached Proxy: Response HTTP response status code of the origin server response, as cached by Traffic Server. + # cqtr: Client Request: TCP reused status of the connection between the client and Traffic Server proxy, indicating whether the request was delivered through an already established connection. + # cquuc: Client Request: Canonical (prior to remapping) effective URL from client request. + format: '% - % [%] "%" % % id=%<{X-Api-Umbrella-Request-ID}cqh> sssc=% sscl=% cqcl=% pqcl=% cqhl=% pshl=% pqhl=% sshl=% ttms=% stms=% phr=% cfsc=% pfsc=% crc=% crsc=% chm=% cwr=% sca=% sstc=% psct="%" crec="%" ctec="%" shi=% shn=% pqsp=% cqhv=% sshv=% pqssl=% csssc=% cqtr=% cquuc="%" muabms=%<{TS_MILESTONE_UA_BEGIN-TS_MILESTONE_SM_START}msdms> muarhdms=%<{TS_MILESTONE_UA_READ_HEADER_DONE-TS_MILESTONE_SM_START}msdms> muabwms=%<{TS_MILESTONE_UA_BEGIN_WRITE-TS_MILESTONE_SM_START}msdms> muacms=%<{TS_MILESTONE_UA_CLOSE-TS_MILESTONE_SM_START}msdms> msfcms=%<{TS_MILESTONE_SERVER_FIRST_CONNECT-TS_MILESTONE_SM_START}msdms> mscms=%<{TS_MILESTONE_SERVER_CONNECT-TS_MILESTONE_SM_START}msdms> mscems=%<{TS_MILESTONE_SERVER_CONNECT_END-TS_MILESTONE_SM_START}msdms> msbwms=%<{TS_MILESTONE_SERVER_BEGIN_WRITE-TS_MILESTONE_SM_START}msdms> msfrms=%<{TS_MILESTONE_SERVER_FIRST_READ-TS_MILESTONE_SM_START}msdms> msrhdms=%<{TS_MILESTONE_SERVER_READ_HEADER_DONE-TS_MILESTONE_SM_START}msdms> msclms=%<{TS_MILESTONE_SERVER_CLOSE-TS_MILESTONE_SM_START}msdms> mcorbms=%<{TS_MILESTONE_CACHE_OPEN_READ_BEGIN-TS_MILESTONE_SM_START}msdms> mcorems=%<{TS_MILESTONE_CACHE_OPEN_READ_END-TS_MILESTONE_SM_START}msdms> mcowbms=%<{TS_MILESTONE_CACHE_OPEN_WRITE_BEGIN-TS_MILESTONE_SM_START}msdms> mcowems=%<{TS_MILESTONE_CACHE_OPEN_WRITE_END-TS_MILESTONE_SM_START}msdms> mdlbms=%<{TS_MILESTONE_DNS_LOOKUP_BEGIN-TS_MILESTONE_SM_START}msdms> mdlems=%<{TS_MILESTONE_DNS_LOOKUP_END-TS_MILESTONE_SM_START}msdms> msmsms=%<{TS_MILESTONE_SM_START-TS_MILESTONE_SM_START}msdms> msmfms=%<{TS_MILESTONE_SM_FINISH-TS_MILESTONE_SM_START}msdms> mpams=%<{TS_MILESTONE_PLUGIN_ACTIVE-TS_MILESTONE_SM_START}msdms> mptms=%<{TS_MILESTONE_PLUGIN_TOTAL-TS_MILESTONE_SM_START}msdms>' -logs: -{{#trafficserver.log_format}} - - mode: ascii - format: {{trafficserver.log_format}} - filename: access.log -{{/trafficserver.log_format }} + logs: + {{#trafficserver.log_format}} + - mode: ascii + format: {{trafficserver.log_format}} + filename: access.log + {{/trafficserver.log_format }} diff --git a/templates/etc/trafficserver/records.config.mustache b/templates/etc/trafficserver/records.config.mustache index fd0b38699..bf12da45b 100644 --- a/templates/etc/trafficserver/records.config.mustache +++ b/templates/etc/trafficserver/records.config.mustache @@ -29,7 +29,7 @@ CONFIG proxy.config.plugin.plugin_dir STRING /opt/ts/libexec/trafficserver CONFIG proxy.config.body_factory.template_sets_dir STRING /opt/ts/etc/trafficserver/body_factory # Log to the standard API Umbrella log directory location. -CONFIG proxy.config.log.logfile_dir STRING {{log_dir}}/trafficserver +CONFIG proxy.config.log.logfile_dir STRING /opt/ts/var/log//trafficserver # Log all diagnostic output to stderr (instead of also shipping it to the # system-wide syslog). @@ -220,8 +220,8 @@ CONFIG proxy.config.http.keep_alive_no_activity_timeout_out INT {{router.api_bac CONFIG proxy.config.http.origin_min_keep_alive_connections INT {{router.api_backends.keepalive_connections}} # Enable for debug logging. -# CONFIG proxy.config.diags.debug.enabled INT 1 -# CONFIG proxy.config.diags.debug.tags STRING .* +CONFIG proxy.config.diags.debug.enabled INT 3 +CONFIG proxy.config.diags.debug.tags STRING .* # Additional custom configuration {{#trafficserver.embedded_server_config.records}} From 8892b0697d63002fb14bbf6eac85210f0e174d73 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 5 Nov 2021 11:39:00 +0100 Subject: [PATCH 21/24] code updates --- Dockerfile-test | 47 +++++++++--- Gemfile | 2 +- Rakefile | 32 ++++---- Taskfile-test.yml | 181 ++++++++++++++++++++++++++++++++++++++++++++++ Taskfile.yml | 131 --------------------------------- 5 files changed, 234 insertions(+), 159 deletions(-) create mode 100644 Taskfile-test.yml diff --git a/Dockerfile-test b/Dockerfile-test index 5726b8eb2..e6ecb09fc 100644 --- a/Dockerfile-test +++ b/Dockerfile-test @@ -1,14 +1,20 @@ -ARG BASE_IMAGE=fiware/api-umbrella-base:latest -FROM ${BASE_IMAGE} AS build - - -WORKDIR /app +FROM ruby:2.4.6 ENV INSTALL_TEST_DEPENDENCIES=true + RUN apt-get install -y wget RUN apt-get install -y gnupg -RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - +RUN apt-get install -y curl +# required for installing docker +RUN apt-get install -y apt-transport-https ca-certificates gnupg + +RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg +RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian buster stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +RUN apt-get update +RUN apt-get install -y docker-ce docker-ce-cli containerd.io +RUN wget https://github.com/mikefarah/yq/releases/download/v4.2.0/yq_linux_amd64 -O /usr/bin/yq && chmod +x /usr/bin/yq +RUN wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - # install chrome for selenium tests RUN set -x && \ @@ -33,10 +39,29 @@ RUN set -x && \ RUN groupadd -r api-umbrella && \ useradd -r -g api-umbrella -s /sbin/nologin -d /opt/api-umbrella -c "API Umbrella user" api-umbrella -RUN /app/tasks/install-system-build-dependencies + +COPY ./src /opt/api-umbrella/src +COPY ./build /opt/api-umbrella/build +COPY ./tasks /opt/api-umbrella/tasks +COPY ./test /opt/api-umbrella/test + +COPY ./configure /opt/api-umbrella/configure +COPY ./Taskfile-test.yml /opt/api-umbrella/Taskfile.yml +COPY ./Gemfile /opt/api-umbrella/Gemfile +COPY ./Makefile.in /opt/api-umbrella/Makefile.in +COPY ./Rakefile /opt/api-umbrella/Rakefile +COPY ./scripts /opt/api-umbrella/scripts + +WORKDIR /opt/api-umbrella + +RUN ./tasks/install-system-build-dependencies +RUN ./configure + RUN make test-deps -COPY test /app/test -COPY Gemfile /app/Gemfile -COPY Gemfile.lock /app/Gemfile.lock -COPY config/test.yml config/test.yml +RUN curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose +RUN chmod +x /usr/local/bin/docker-compose +RUN ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose + +COPY ./docker/compose /opt/api-umbrella/docker/compose +COPY ./config /opt/api-umbrella/config \ No newline at end of file diff --git a/Gemfile b/Gemfile index 623cdeab8..45ef3358e 100644 --- a/Gemfile +++ b/Gemfile @@ -32,7 +32,7 @@ gem "oj", "~> 3.7.0" # Database libraries gem "mongoid", "~> 7.0.1" -gem "elasticsearch", "~> 6.2.0" +gem "elasticsearch", "~> 6.8.3" gem "active_attr", "~> 0.12.0" # Factories for test database data diff --git a/Rakefile b/Rakefile index 15212b2ff..fa45e3380 100644 --- a/Rakefile +++ b/Rakefile @@ -1,22 +1,22 @@ require "bundler/setup" -# Detect the source root directory. +# # Detect the source root directory. API_UMBRELLA_SRC_ROOT = File.expand_path(__dir__) -if(!File.exist?(File.join(API_UMBRELLA_SRC_ROOT, "src/api-umbrella"))) - raise "The calculated root directory does not appear correct: #{API_UMBRELLA_SRC_ROOT}" -end - -# Add our build directories to the $PATH. This ensures test and development -# dependencies (like nodejs/yarn) are on the path. -ENV["PATH"] = [ - "#{API_UMBRELLA_SRC_ROOT}/build/work/stage/opt/api-umbrella/embedded/bin", - "#{API_UMBRELLA_SRC_ROOT}/build/work/stage/opt/api-umbrella/embedded/sbin", - "#{API_UMBRELLA_SRC_ROOT}/build/work/test-env/bin", - "#{API_UMBRELLA_SRC_ROOT}/build/work/test-env/sbin", - "#{API_UMBRELLA_SRC_ROOT}/build/work/dev-env/bin", - "#{API_UMBRELLA_SRC_ROOT}/build/work/dev-env/sbin", - ENV["PATH"], -].join(":") +# if(!File.exist?(File.join(API_UMBRELLA_SRC_ROOT, "src/api-umbrella"))) +# raise "The calculated root directory does not appear correct: #{API_UMBRELLA_SRC_ROOT}" +# end +# +# # Add our build directories to the $PATH. This ensures test and development +# # dependencies (like nodejs/yarn) are on the path. +# ENV["PATH"] = [ +# "#{API_UMBRELLA_SRC_ROOT}/build/work/stage/opt/api-umbrella/embedded/bin", +# "#{API_UMBRELLA_SRC_ROOT}/build/work/stage/opt/api-umbrella/embedded/sbin", +# "#{API_UMBRELLA_SRC_ROOT}/build/work/test-env/bin", +# "#{API_UMBRELLA_SRC_ROOT}/build/work/test-env/sbin", +# "#{API_UMBRELLA_SRC_ROOT}/build/work/dev-env/bin", +# "#{API_UMBRELLA_SRC_ROOT}/build/work/dev-env/sbin", +# ENV["PATH"], +# ].join(":") Dir.glob(File.join(API_UMBRELLA_SRC_ROOT, "scripts/rake/*.rake")).each { |r| import r } diff --git a/Taskfile-test.yml b/Taskfile-test.yml new file mode 100644 index 000000000..f93a9ceb9 --- /dev/null +++ b/Taskfile-test.yml @@ -0,0 +1,181 @@ +version: "2" + +output: interleaved + +tasks: + test-deps:bundler: + deps: + - test-deps:rubygems + cmds: + - ./tasks/test-deps/bundler + sources: + - ./build/work/stamp/test-deps/rubygems + - ./tasks/test-deps/bundler + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/bundler + method: checksum + + test-deps:mailhog: + cmds: + - ./tasks/test-deps/mailhog + sources: + - ./tasks/test-deps/mailhog + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/mailhog + method: checksum + + test-deps:eslint: + cmds: + - ./tasks/test-deps/eslint + + test-deps:openldap: + cmds: + - ./tasks/test-deps/openldap + sources: + - ./tasks/test-deps/openldap + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/openldap + method: checksum + + test-deps:shellcheck: + cmds: + - ./tasks/test-deps/shellcheck + sources: + - ./tasks/test-deps/shellcheck + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/shellcheck + method: checksum + + test-deps:unbound: + cmds: + - ./tasks/test-deps/unbound + sources: + - ./tasks/test-deps/unbound + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/unbound + method: checksum + + test-deps:rubygems: +# deps: +# - test-deps:ruby + cmds: + - ./tasks/test-deps/rubygems + sources: + - ./build/work/stamp/test-deps/ruby + - ./tasks/test-deps/rubygems + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/rubygems + method: checksum + + test-deps:bundle: + deps: + - test-deps:bundler + cmds: + - ./tasks/test-deps/bundle + sources: + - ./build/work/stamp/test-deps/bundler + - ./Gemfile + - ./Gemfile.lock + - ./tasks/test-deps/bundle + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/bundle + method: checksum + + test-deps:mailhog: + cmds: + - ./tasks/test-deps/mailhog + sources: + - ./tasks/test-deps/mailhog + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/mailhog + method: checksum + + test-deps:eslint: + cmds: + - ./tasks/test-deps/eslint + + test-deps:openldap: + cmds: + - ./tasks/test-deps/openldap + sources: + - ./tasks/test-deps/openldap + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/openldap + method: checksum + + test-deps:shellcheck: + cmds: + - ./tasks/test-deps/shellcheck + sources: + - ./tasks/test-deps/shellcheck + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/shellcheck + method: checksum + + test-deps:unbound: + cmds: + - ./tasks/test-deps/unbound + sources: + - ./tasks/test-deps/unbound + - ./tasks/helpers.sh + generates: + - ./build/work/stamp/test-deps/unbound + method: checksum + + test-deps: + cmds: + - task: test-deps:bundle + - task: test-deps:mailhog + - task: test-deps:openldap + - task: test-deps:shellcheck + - task: test-deps:unbound + + lint:js: + deps: + - app-deps:admin-ui:yarn + cmds: + - unbuffer ./tasks/lint/js + + lint:ruby: + deps: + - test-deps:bundle + cmds: + - unbuffer ./tasks/lint/ruby + + lint:shell: + deps: + - test-deps:shellcheck + cmds: + - unbuffer ./tasks/lint/shell + + lint: + deps: + - test-deps:eslint + cmds: + - task: lint:js + - task: lint:resty + - task: lint:ruby + - task: lint:shell + + + test: + deps: + - test-deps + cmds: + - unbuffer ./tasks/test/default + + single-test: + deps: + - test-deps + cmds: + - unbuffer ./tasks/test/single-test \ No newline at end of file diff --git a/Taskfile.yml b/Taskfile.yml index ca1973deb..3d8833d9c 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -394,125 +394,6 @@ tasks: - task: app-deps # - task: app - test-deps:lua:luacheck: - deps: - - deps:luarocks - cmds: - - ./tasks/test-deps/lua/luacheck - sources: - - ./build/work/stamp/deps/luarocks - - ./tasks/test-deps/lua/luacheck - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/lua/luacheck - method: checksum - - test-deps:lua:penlight: - deps: - - deps:luarocks - cmds: - - ./tasks/test-deps/lua/penlight - sources: - - ./build/work/stamp/deps/luarocks - - ./tasks/test-deps/lua/penlight - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/lua/penlight - method: checksum - - test-deps:mailhog: - cmds: - - ./tasks/test-deps/mailhog - sources: - - ./tasks/test-deps/mailhog - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/mailhog - method: checksum - - test-deps:eslint: - cmds: - - ./tasks/test-deps/eslint - - test-deps:openldap: - cmds: - - ./tasks/test-deps/openldap - sources: - - ./tasks/test-deps/openldap - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/openldap - method: checksum - - test-deps:shellcheck: - cmds: - - ./tasks/test-deps/shellcheck - sources: - - ./tasks/test-deps/shellcheck - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/shellcheck - method: checksum - - test-deps:unbound: - cmds: - - ./tasks/test-deps/unbound - sources: - - ./tasks/test-deps/unbound - - ./tasks/helpers.sh - generates: - - ./build/work/stamp/test-deps/unbound - method: checksum - - test-deps: - cmds: - - task: test-deps:bundle - - task: test-deps:lua:luacheck - - task: test-deps:lua:penlight - - task: test-deps:mailhog - - task: test-deps:openldap - - task: test-deps:shellcheck - - task: test-deps:unbound - - lint:js: - deps: - - app-deps:admin-ui:yarn - cmds: - - unbuffer ./tasks/lint/js - - lint:lua: - deps: - - test-deps:lua:luacheck - cmds: - - unbuffer ./tasks/lint/lua - - lint:resty: - deps: - - test-deps:lua:penlight - cmds: - - unbuffer ./tasks/lint/resty/run - - lint:ruby: - deps: - - test-deps:bundle - cmds: - - unbuffer ./tasks/lint/ruby - - lint:shell: - deps: - - test-deps:shellcheck - cmds: - - unbuffer ./tasks/lint/shell - - lint: - deps: - - test-deps:eslint - cmds: - - task: lint:js - - task: lint:lua - - task: lint:resty - - task: lint:ruby - - task: lint:shell outdated: cmds: @@ -526,18 +407,6 @@ tasks: cmds: - ./tasks/distclean - test: - deps: - - test-deps - cmds: - - unbuffer ./tasks/test/default - - single-test: - deps: - - test-deps - cmds: - - unbuffer ./tasks/test/single-test - install: cmds: - ./tasks/install From a369711d895f660f6d1272d569bfc06d63459455 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 5 Nov 2021 11:39:22 +0100 Subject: [PATCH 22/24] code updates --- tasks/package | 1 - tasks/test-deps/bundle | 1 - tasks/test-deps/bundler | 11 +++++++++++ tasks/test-deps/elasticsearch | 17 ----------------- tasks/test-deps/elasticsearch5 | 18 ------------------ tasks/test-deps/elasticsearch6 | 18 ------------------ tasks/test-deps/mongo-orchestration | 15 --------------- tasks/test-deps/rubygems | 10 ++++++++++ 8 files changed, 21 insertions(+), 70 deletions(-) create mode 100755 tasks/test-deps/bundler delete mode 100755 tasks/test-deps/elasticsearch delete mode 100755 tasks/test-deps/elasticsearch5 delete mode 100755 tasks/test-deps/elasticsearch6 delete mode 100755 tasks/test-deps/mongo-orchestration create mode 100755 tasks/test-deps/rubygems diff --git a/tasks/package b/tasks/package index 7881665fe..f1ce008fa 100755 --- a/tasks/package +++ b/tasks/package @@ -18,7 +18,6 @@ export BUNDLE_APP_CONFIG cd _persist # Install all the gems for use in packaging. - bundle update --bundler bundle config --local build.nokogiri --use-system-libraries bundle config --local path "$(pwd)/bundle" bundle config --local clean true diff --git a/tasks/test-deps/bundle b/tasks/test-deps/bundle index fb2b4721e..750012168 100755 --- a/tasks/test-deps/bundle +++ b/tasks/test-deps/bundle @@ -15,7 +15,6 @@ export PATH="$STAGE_EMBEDDED_PATH" export BUNDLE_GEMFILE="$SOURCE_DIR/Gemfile" BUNDLE_APP_CONFIG="$(pwd)/.bundle" export BUNDLE_APP_CONFIG -bundle update --bundler bundle config --local build.nokogiri --use-system-libraries bundle config --local path "$(pwd)/bundle" bundle config --local clean true diff --git a/tasks/test-deps/bundler b/tasks/test-deps/bundler new file mode 100755 index 000000000..dc6707334 --- /dev/null +++ b/tasks/test-deps/bundler @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +bundler_version="1.17.3" + +set -e -u -x +source ./tasks/helpers.sh + +PATH=$STAGE_EMBEDDED_PATH gem uninstall bundler --all --executables --force || true +PATH=$STAGE_EMBEDDED_PATH gem install bundler --version $bundler_version --no-document --env-shebang --force + +stamp \ No newline at end of file diff --git a/tasks/test-deps/elasticsearch b/tasks/test-deps/elasticsearch deleted file mode 100755 index 565dda77a..000000000 --- a/tasks/test-deps/elasticsearch +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -elasticsearch_version="2.4.6" -elasticsearch_hash="c3441bef89cd91206edf3cf3bd5c4b62550e60a9" - -set -e -u -x -source ./tasks/helpers.sh - -task_working_dir -download "https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-$elasticsearch_version.tar.gz" "sha1" "$elasticsearch_hash" -extract_download "elasticsearch-$elasticsearch_version.tar.gz" - -mkdir -p "$TEST_INSTALL_PREFIX/elasticsearch" -rsync -a -v --checksum --delete-after "elasticsearch-$elasticsearch_version/" "$TEST_INSTALL_PREFIX/elasticsearch/" -mkdir -p "$TEST_INSTALL_PREFIX/elasticsearch/plugins" - -stamp diff --git a/tasks/test-deps/elasticsearch5 b/tasks/test-deps/elasticsearch5 deleted file mode 100755 index 5906274f7..000000000 --- a/tasks/test-deps/elasticsearch5 +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -elasticsearch5_version="5.6.16" -elasticsearch5_hash="4ce4a1087e79d552b0d95566095827b18bcb6f67" - -set -e -u -x -source ./tasks/helpers.sh - -task_working_dir -download "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$elasticsearch5_version.tar.gz" "sha1" "$elasticsearch5_hash" -extract_download "elasticsearch-$elasticsearch5_version.tar.gz" - -mkdir -p "$TEST_INSTALL_PREFIX" -rsync -a -v --checksum --delete-after "elasticsearch-$elasticsearch5_version/" "$TEST_INSTALL_PREFIX/elasticsearch5/" -"$TEST_INSTALL_PREFIX/elasticsearch5/bin/elasticsearch-keystore" create -chmod 660 "$TEST_INSTALL_PREFIX/elasticsearch5/config/elasticsearch.keystore" - -stamp diff --git a/tasks/test-deps/elasticsearch6 b/tasks/test-deps/elasticsearch6 deleted file mode 100755 index b881e52d4..000000000 --- a/tasks/test-deps/elasticsearch6 +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash - -elasticsearch6_version="6.7.1" -elasticsearch6_hash="d13604f72f8139067d35b5edbe02ec8ef97189d0" - -set -e -u -x -source ./tasks/helpers.sh - -task_working_dir -download "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$elasticsearch6_version.tar.gz" "sha1" "$elasticsearch6_hash" -extract_download "elasticsearch-$elasticsearch6_version.tar.gz" - -mkdir -p "$TEST_INSTALL_PREFIX/elasticsearch6" -rsync -a -v --checksum --delete-after "elasticsearch-$elasticsearch6_version/" "$TEST_INSTALL_PREFIX/elasticsearch6/" -"$TEST_INSTALL_PREFIX/elasticsearch6/bin/elasticsearch-keystore" create -chmod 660 "$TEST_INSTALL_PREFIX/elasticsearch6/config/elasticsearch.keystore" - -stamp diff --git a/tasks/test-deps/mongo-orchestration b/tasks/test-deps/mongo-orchestration deleted file mode 100755 index 6aeacbf6a..000000000 --- a/tasks/test-deps/mongo-orchestration +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env bash - -mongo_orchestration_version="0.6.12" - -set -e -u -x -source ./tasks/helpers.sh - -task_working_dir - -rm -rf "$TEST_INSTALL_PREFIX/mongo-orchestration" -virtualenv "$TEST_INSTALL_PREFIX/mongo-orchestration" -"$TEST_INSTALL_PREFIX/mongo-orchestration/bin/pip" install --ignore-installed "mongo-orchestration==$mongo_orchestration_version" -ln -snf "$TEST_INSTALL_PREFIX/mongo-orchestration/bin/mongo-orchestration" "$TEST_INSTALL_PREFIX/bin/mongo-orchestration" - -stamp diff --git a/tasks/test-deps/rubygems b/tasks/test-deps/rubygems new file mode 100755 index 000000000..48bee9e72 --- /dev/null +++ b/tasks/test-deps/rubygems @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +rubygems_version="2.7.9" + +set -e -u -x +source ./tasks/helpers.sh + +PATH=$STAGE_EMBEDDED_PATH gem update --system $rubygems_version --no-document --env-shebang + +stamp \ No newline at end of file From 67088fe788f9e6dfc0719cf2e0c087950e7e9eb9 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 5 Nov 2021 11:39:48 +0100 Subject: [PATCH 23/24] code updates --- docker/compose/config.yml | 253 ++++++++++++------------ docker/compose/docker-compose-full.yaml | 76 ++++--- 2 files changed, 181 insertions(+), 148 deletions(-) diff --git a/docker/compose/config.yml b/docker/compose/config.yml index 49d764d9b..a09ef4219 100644 --- a/docker/compose/config.yml +++ b/docker/compose/config.yml @@ -1,13 +1,15 @@ +--- +app_env: test http_port: 8080 https_port: 8443 gatekeeper: api_key_methods: - - fiware-oauth2 - - header - - getParam - - basicAuthUsername + - fiware-oauth2 + - header + - getParam + - basicAuthUsername idp_providers: - - fiware-oauth2 + - fiware-oauth2 trafficserver: host: trafficserver port: 14009 @@ -26,135 +28,136 @@ rsyslog: log: destination: console mongodb: - url: "mongodb://mongo-db:27017/api_umbrella" + url: mongodb://mongo-db:27017/api_umbrella mora: host: mora port: 8181 elasticsearch: - hosts: - - "http://elasticsearch:9200" + scheme: http + host: elasticsearch + port: 9200 site_name: API Umbrella internal_apis: - - _id: api-umbrella-gatekeeper-backend - name: API Umbrella - Gatekeeper APIs - frontend_host: "{{router.web_app_host}}" - backend_host: ~ - backend_protocol: http - balance_algorithm: least_conn - sort_order: 1 - servers: - - host: "proxy" - port: "14010" - url_matches: - - frontend_prefix: "/api-umbrella/v1/health" - backend_prefix: "/api-umbrella/v1/health" - - frontend_prefix: "/api-umbrella/v1/state" - backend_prefix: "/api-umbrella/v1/state" +- _id: api-umbrella-gatekeeper-backend + name: API Umbrella - Gatekeeper APIs + frontend_host: "{{router.web_app_host}}" + backend_host: + backend_protocol: http + balance_algorithm: least_conn + sort_order: 1 + servers: + - host: proxy + port: '14010' + url_matches: + - frontend_prefix: "/api-umbrella/v1/health" + backend_prefix: "/api-umbrella/v1/health" + - frontend_prefix: "/api-umbrella/v1/state" + backend_prefix: "/api-umbrella/v1/state" + settings: + require_https: required_return_error + sub_settings: + - http_method: get + regex: "^/api-umbrella/v1/(health|state)" settings: - require_https: required_return_error - sub_settings: - - http_method: get - regex: "^/api-umbrella/v1/(health|state)" - settings: - disable_api_key: true - rate_limit_mode: unlimited - require_https: optional - disable_analytics: true - - _id: api-umbrella-static-site - name: API Umbrella - Static Site - frontend_host: "{{router.web_app_host}}" - backend_host: ~ - backend_protocol: http - balance_algorithm: least_conn - sort_order: 1 - servers: - - host: "proxy" - port: "14013" - url_matches: - - frontend_prefix: "/signup/" - backend_prefix: "/signup/" - - frontend_prefix: "/contact/" - backend_prefix: "/contact/" + disable_api_key: true + rate_limit_mode: unlimited + require_https: optional + disable_analytics: true +- _id: api-umbrella-static-site + name: API Umbrella - Static Site + frontend_host: "{{router.web_app_host}}" + backend_host: + backend_protocol: http + balance_algorithm: least_conn + sort_order: 1 + servers: + - host: proxy + port: '14013' + url_matches: + - frontend_prefix: "/signup/" + backend_prefix: "/signup/" + - frontend_prefix: "/contact/" + backend_prefix: "/contact/" + settings: + require_https: required_return_error + sub_settings: + - http_method: any + regex: "^/signup/*" settings: - require_https: required_return_error - sub_settings: - - http_method: any - regex: "^/signup/*" - settings: - disable_api_key: true - - http_method: any - regex: "^/contact/*" - settings: - disable_api_key: true - - _id: api-umbrella-api-app-backend - name: API Umbrella - HTTP APIs - frontend_host: "{{router.web_app_host}}" - backend_host: ~ - backend_protocol: http - balance_algorithm: least_conn - sort_order: 2 - servers: - - host: "api" - port: "14012" - url_matches: - - frontend_prefix: "/api-umbrella/" - backend_prefix: "/api-umbrella/" + disable_api_key: true + - http_method: any + regex: "^/contact/*" settings: - require_https: required_return_error - - _id: api-umbrella-web-app-backend - name: API Umbrella - Web App - frontend_host: "{{router.web_app_host}}" - backend_host: ~ - backend_protocol: http - balance_algorithm: least_conn - sort_order: 2 - servers: - - host: "ui" - port: "4200" - url_matches: - - frontend_prefix: "/admin/" - backend_prefix: "/admin/" - - frontend_prefix: "/admin" - backend_prefix: "/admin" - exact_match: true - - frontend_prefix: "/admins/" - backend_prefix: "/admins/" - - frontend_prefix: "/admins" - backend_prefix: "/admins" - exact_match: true - - frontend_prefix: "/web-assets/" - backend_prefix: "/web-assets/" + disable_api_key: true +- _id: api-umbrella-api-app-backend + name: API Umbrella - HTTP APIs + frontend_host: "{{router.web_app_host}}" + backend_host: + backend_protocol: http + balance_algorithm: least_conn + sort_order: 2 + servers: + - host: api + port: '14012' + url_matches: + - frontend_prefix: "/api-umbrella/" + backend_prefix: "/api-umbrella/" + settings: + require_https: required_return_error +- _id: api-umbrella-web-app-backend + name: API Umbrella - Web App + frontend_host: "{{router.web_app_host}}" + backend_host: + backend_protocol: http + balance_algorithm: least_conn + sort_order: 2 + servers: + - host: ui + port: '4200' + url_matches: + - frontend_prefix: "/admin/" + backend_prefix: "/admin/" + - frontend_prefix: "/admin" + backend_prefix: "/admin" + exact_match: true + - frontend_prefix: "/admins/" + backend_prefix: "/admins/" + - frontend_prefix: "/admins" + backend_prefix: "/admins" + exact_match: true + - frontend_prefix: "/web-assets/" + backend_prefix: "/web-assets/" + settings: + require_https: required_return_error + sub_settings: + - http_method: any + regex: "^/admin/stats" settings: - require_https: required_return_error - sub_settings: - - http_method: any - regex: "^/admin/stats" - settings: - disable_api_key: true - - http_method: POST - regex: "^/admin/login" - settings: - disable_api_key: true - rate_limit_mode: custom - rate_limits: - - duration: 15000 - accuracy: 1000 - limit_by: ip - limit: 100 - distributed: true - response_headers: true - - http_method: any - regex: "^/(admin|web-assets)" - settings: - disable_api_key: true - rate_limit_mode: unlimited - redirect_https: true - disable_analytics: true + disable_api_key: true + - http_method: POST + regex: "^/admin/login" + settings: + disable_api_key: true + rate_limit_mode: custom + rate_limits: + - duration: 15000 + accuracy: 1000 + limit_by: ip + limit: 100 + distributed: true + response_headers: true + - http_method: any + regex: "^/(admin|web-assets)" + settings: + disable_api_key: true + rate_limit_mode: unlimited + redirect_https: true + disable_analytics: true internal_website_backends: - - _id: api-umbrella-website-backend - frontend_host: "{{router.web_app_host}}" - backend_protocol: http - server_host: "{{static_site.host}}" - server_port: "{{static_site.port}}" +- _id: api-umbrella-website-backend + frontend_host: "{{router.web_app_host}}" + backend_protocol: http + server_host: "{{static_site.host}}" + server_port: "{{static_site.port}}" ember_server: - port: 4200 \ No newline at end of file + port: 4200 diff --git a/docker/compose/docker-compose-full.yaml b/docker/compose/docker-compose-full.yaml index 5a9ee92c0..664a48c23 100644 --- a/docker/compose/docker-compose-full.yaml +++ b/docker/compose/docker-compose-full.yaml @@ -5,17 +5,20 @@ services: # databases elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.8.18 + profiles: ["all"] hostname: elasticsearch expose: - "9200" environment: +# - logger.level=TRACE - xpack.security.enabled=false - discovery.type=single-node networks: - umbrella-network mongo-db: - image: mongo:4.0 + image: mongo:4 + profiles: ["all"] hostname: mongo-db expose: - "27017" @@ -28,15 +31,42 @@ services: networks: - umbrella-network + echo-server: + image: mendhak/http-https-echo:21 + profiles: ["all"] + hostname: echo-server + environment: + - HTTP_PORT=9444 + - HTTPS_PORT=9443 + expose: + - "9444" + - "9443" + networks: + - umbrella-network + + echo-server-2: + image: mendhak/http-https-echo:21 + profiles: ["all"] + hostname: echo-server-2 + environment: + - HTTP_PORT=9444 + - HTTPS_PORT=9443 + expose: + - "9444" + - "9443" + networks: + - umbrella-network + # umbrella services proxy: - image: fiware/api-umbrella-proxy:1.0.0-PRE-45 + image: proxy + profiles: ["umbrella", "all"] hostname: proxy depends_on: - mongo-db - elasticsearch environment: - - API_UMBRELLA_CONFIG=/opt/api-umbrella/config/config.yml + - API_UMBRELLA_CONFIG=/opt/api-umbrella/config/merged-config.yml expose: - "8080" - "8443" @@ -44,12 +74,13 @@ services: - "8080:8080" - "8443:8443" volumes: - - ./config.yml:/opt/api-umbrella/config/config.yml + - ${CONFIG_PATH:-./}:/mounted-config/ networks: - umbrella-network trafficserver: - image: fiware/api-umbrella-trafficserver:1.0.0-PRE-45 + image: trafficserver + profiles: ["umbrella", "all"] hostname: trafficserver depends_on: - mongo-db @@ -57,58 +88,54 @@ services: expose: - "14009" volumes: - - ./config.yml:/config/config.yml + - ${CONFIG_PATH:-./}:/mounted-config/ + - access-log:/opt/ts/var/log/trafficserver networks: - umbrella-network mora: - image: fiware/api-umbrella-mora:1.0.0-PRE-45 + image: fiware/api-umbrella-mora + profiles: ["umbrella", "all"] hostname: mora depends_on: - mongo-db expose: - "8181" volumes: - - ./config.yml:/config/config.yml + - ${CONFIG_PATH:-./}:/mounted-config/ networks: - umbrella-network rsyslog: - image: fiware/api-umbrella-rsyslog:1.0.0-PRE-45 + image: rsyslog + profiles: ["umbrella", "all"] hostname: rsyslog depends_on: - elasticsearch expose: - "14014" volumes: - - ./config.yml:/config/config.yml + - ${CONFIG_PATH:-./}:/mounted-config/ + - access-log:/var/log/trafficserver networks: - umbrella-network api: - image: fiware/api-umbrella-api:1.0.0-PRE-45 + image: api + profiles: ["umbrella", "all"] hostname: api depends_on: - mongo-db expose: - "14012" volumes: - - ./config.yml:/config/config.yml - networks: - - umbrella-network - - static-site: - image: static-site - hostname: static-site - expose: - - "80" - volumes: - - ./config.yml:/config/config.yml + - ${CONFIG_PATH:-./}:/mounted-config/ networks: - umbrella-network ui: - image: fiware/api-umbrella-ui:1.0.0-PRE-45 + image: fiware/api-umbrella-ui + profiles: ["umbrella", "all"] hostname: ui depends_on: - api @@ -117,6 +144,9 @@ services: networks: - umbrella-network +volumes: + config-volume: + access-log: networks: umbrella-network: name: umbrella-network \ No newline at end of file From d7fb12b10b36772d9d2d2c72f57bb40cdec2b869 Mon Sep 17 00:00:00 2001 From: Stefan Wiedemann Date: Fri, 5 Nov 2021 11:40:00 +0100 Subject: [PATCH 24/24] code updates --- config/default.yml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/config/default.yml b/config/default.yml index 469c7741a..8235716c6 100644 --- a/config/default.yml +++ b/config/default.yml @@ -170,7 +170,6 @@ auto_ssl: hook_server: port: 14007 rsyslog: - disable_request_logging: false host: 127.0.0.1 port: 14014 log: @@ -194,10 +193,11 @@ mora: port: 8181 timeout: 0 elasticsearch: - hosts: - - "http://127.0.0.1:9200" - api_version: 2 - template_version: 1 + scheme: http + host: elasticsearch + port: 9200 + api_version: 5 + template_version: 2 aws_signing_proxy: host: 127.0.0.1 port: 14017 @@ -205,6 +205,7 @@ elasticsearch: error_log_level: notice analytics: adapter: elasticsearch + isElasticsearch: true timezone: UTC log_request_url_query_params_separately: false strip_cookies: