From 3ad2766f826c55ac11b53b4ac3d9b33b6fd98d37 Mon Sep 17 00:00:00 2001 From: Andras Schmelczer Date: Thu, 28 May 2026 08:42:34 +0100 Subject: [PATCH] Merge with store --- .dockerignore | 1 + Dockerfile | 25 + docker-compose.yml | 83 +++ .editorconfig => frontend/.editorconfig | 0 .gitignore => frontend/.gitignore | 0 .prettierrc => frontend/.prettierrc | 0 README.md => frontend/README.md | 0 angular.json => frontend/angular.json | 0 firebase.json => frontend/firebase.json | 0 .../package-lock.json | 0 package.json => frontend/package.json | 0 .../src}/app/app-routing.module.ts | 0 {src => frontend/src}/app/app.component.html | 0 {src => frontend/src}/app/app.component.scss | 0 {src => frontend/src}/app/app.component.ts | 0 {src => frontend/src}/app/app.module.ts | 0 .../app/components/modal/modal.component.html | 0 .../app/components/modal/modal.component.scss | 0 .../app/components/modal/modal.component.ts | 0 .../modal/modals/blocks/blocks.component.html | 0 .../modal/modals/blocks/blocks.component.scss | 0 .../modal/modals/blocks/blocks.component.ts | 0 .../get-started/get-started.component.html | 0 .../get-started/get-started.component.scss | 0 .../get-started/get-started.component.ts | 0 .../remove-page/remove-page.component.html | 0 .../remove-page/remove-page.component.scss | 0 .../remove-page/remove-page.component.ts | 0 .../remove-tower/remove-tower.component.html | 0 .../remove-tower/remove-tower.component.scss | 0 .../remove-tower/remove-tower.component.ts | 0 .../modals/settings/settings.component.html | 0 .../modals/settings/settings.component.scss | 0 .../modals/settings/settings.component.ts | 0 .../components/pages/page/page.component.html | 0 .../components/pages/page/page.component.scss | 0 .../components/pages/page/page.component.ts | 0 .../page/tower/block/block.component.html | 0 .../page/tower/block/block.component.scss | 0 .../pages/page/tower/block/block.component.ts | 0 .../page/tower/tasks/tasks.component.html | 0 .../page/tower/tasks/tasks.component.scss | 0 .../pages/page/tower/tasks/tasks.component.ts | 0 .../pages/page/tower/tower.component.html | 0 .../pages/page/tower/tower.component.scss | 0 .../pages/page/tower/tower.component.ts | 0 .../app/components/pages/pages.component.html | 0 .../app/components/pages/pages.component.scss | 0 .../app/components/pages/pages.component.ts | 0 .../double-slider.component.html | 0 .../double-slider.component.scss | 0 .../double-slider/double-slider.component.ts | 0 .../select-add/select-add.component.html | 0 .../select-add/select-add.component.scss | 0 .../shared/select-add/select-add.component.ts | 0 .../shared/toggle/toggle.component.html | 0 .../shared/toggle/toggle.component.scss | 0 .../shared/toggle/toggle.component.ts | 0 {src => frontend/src}/app/interfaces/color.ts | 0 .../src}/app/interfaces/persistance/block.ts | 0 .../src}/app/interfaces/persistance/data.ts | 0 .../src}/app/interfaces/persistance/page.ts | 0 .../src}/app/interfaces/persistance/tower.ts | 0 .../src}/app/interfaces/persistance/unique.ts | 0 {src => frontend/src}/app/interfaces/range.ts | 0 .../src}/app/interfaces/serializable.ts | 0 {src => frontend/src}/app/model/block.ts | 0 {src => frontend/src}/app/model/data.ts | 0 {src => frontend/src}/app/model/page.ts | 0 {src => frontend/src}/app/model/tower.ts | 0 {src => frontend/src}/app/pipes/color.pipe.ts | 0 .../src}/app/pipes/format-date.pipe.ts | 0 .../src}/app/services/api.service.ts | 0 .../src}/app/services/cancel.service.ts | 0 .../src}/app/services/data.service.ts | 0 .../src}/app/services/map-store.service.ts | 0 .../src}/app/services/modal.service.ts | 0 {src => frontend/src}/app/store/inner-node.ts | 0 {src => frontend/src}/app/store/node.ts | 0 {src => frontend/src}/app/store/root.ts | 0 {src => frontend/src}/app/store/unique.ts | 0 {src => frontend/src}/app/utils/color.ts | 0 {src => frontend/src}/app/utils/hash.ts | 0 {src => frontend/src}/app/utils/range.ts | 0 {src => frontend/src}/app/utils/top.ts | 0 {src => frontend/src}/assets/.gitkeep | 0 {src => frontend/src}/assets/arrow.svg | 0 {src => frontend/src}/assets/pen.svg | 0 {src => frontend/src}/assets/plus-sign.svg | 0 {src => frontend/src}/assets/trash.svg | 0 {src => frontend/src}/assets/x-sign.svg | 0 {src => frontend/src}/browserslist | 0 .../src}/environments/environment.prod.ts | 0 .../src}/environments/environment.ts | 0 {src => frontend/src}/favicon.ico | Bin {src => frontend/src}/index.html | 0 {src => frontend/src}/karma.conf.js | 0 {src => frontend/src}/library/animations.scss | 0 .../src}/library/common-variables.scss | 0 {src => frontend/src}/library/forms.scss | 0 {src => frontend/src}/library/main.scss | 0 {src => frontend/src}/library/spacing.scss | 0 {src => frontend/src}/library/text.scss | 0 {src => frontend/src}/library/utils.scss | 0 {src => frontend/src}/main.ts | 0 {src => frontend/src}/polyfills.ts | 0 {src => frontend/src}/styles.scss | 0 {src => frontend/src}/test.ts | 0 {src => frontend/src}/tsconfig.app.json | 0 {src => frontend/src}/tsconfig.spec.json | 0 {src => frontend/src}/tslint.json | 0 tsconfig.json => frontend/tsconfig.json | 0 tslint.json => frontend/tslint.json | 0 yarn.lock => frontend/yarn.lock | 0 ingress/nginx-config/nginx.conf | 90 +++ store/.dockerignore | 1 + store/.gitignore | 1 + store/.vscode/settings.json | 3 + store/Dockerfile | 13 + store/README.md | 51 ++ store/__init__.py | 0 store/db.py | 20 + store/migration.py | 688 ++++++++++++++++++ store/requirements.txt | 3 + store/schema.sql | 79 ++ store/server.py | 105 +++ store/start-backend.service | 11 + store/store.ini | 11 + 128 files changed, 1185 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml rename .editorconfig => frontend/.editorconfig (100%) mode change 100755 => 100644 rename .gitignore => frontend/.gitignore (100%) mode change 100755 => 100644 rename .prettierrc => frontend/.prettierrc (100%) mode change 100755 => 100644 rename README.md => frontend/README.md (100%) mode change 100755 => 100644 rename angular.json => frontend/angular.json (100%) mode change 100755 => 100644 rename firebase.json => frontend/firebase.json (100%) mode change 100755 => 100644 rename package-lock.json => frontend/package-lock.json (100%) mode change 100755 => 100644 rename package.json => frontend/package.json (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/app-routing.module.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/app.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/app.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/app.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/app.module.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modal.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modal.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modal.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/blocks/blocks.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/blocks/blocks.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/blocks/blocks.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/get-started/get-started.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/get-started/get-started.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/get-started/get-started.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/remove-page/remove-page.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/remove-page/remove-page.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/remove-page/remove-page.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/remove-tower/remove-tower.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/remove-tower/remove-tower.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/remove-tower/remove-tower.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/settings/settings.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/settings/settings.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/modal/modals/settings/settings.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/page.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/page.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/page.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/block/block.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/block/block.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/block/block.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/tasks/tasks.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/tasks/tasks.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/tasks/tasks.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/tower.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/tower.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/page/tower/tower.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/pages.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/pages.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/pages/pages.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/double-slider/double-slider.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/double-slider/double-slider.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/double-slider/double-slider.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/select-add/select-add.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/select-add/select-add.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/select-add/select-add.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/toggle/toggle.component.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/toggle/toggle.component.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/components/shared/toggle/toggle.component.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/interfaces/color.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/interfaces/persistance/block.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/interfaces/persistance/data.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/interfaces/persistance/page.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/interfaces/persistance/tower.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/interfaces/persistance/unique.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/interfaces/range.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/interfaces/serializable.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/model/block.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/model/data.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/model/page.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/model/tower.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/pipes/color.pipe.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/pipes/format-date.pipe.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/services/api.service.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/services/cancel.service.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/services/data.service.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/services/map-store.service.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/services/modal.service.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/store/inner-node.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/store/node.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/store/root.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/store/unique.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/utils/color.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/utils/hash.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/utils/range.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/app/utils/top.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/assets/.gitkeep (100%) mode change 100755 => 100644 rename {src => frontend/src}/assets/arrow.svg (100%) mode change 100755 => 100644 rename {src => frontend/src}/assets/pen.svg (100%) mode change 100755 => 100644 rename {src => frontend/src}/assets/plus-sign.svg (100%) mode change 100755 => 100644 rename {src => frontend/src}/assets/trash.svg (100%) mode change 100755 => 100644 rename {src => frontend/src}/assets/x-sign.svg (100%) mode change 100755 => 100644 rename {src => frontend/src}/browserslist (100%) mode change 100755 => 100644 rename {src => frontend/src}/environments/environment.prod.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/environments/environment.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/favicon.ico (100%) mode change 100755 => 100644 rename {src => frontend/src}/index.html (100%) mode change 100755 => 100644 rename {src => frontend/src}/karma.conf.js (100%) mode change 100755 => 100644 rename {src => frontend/src}/library/animations.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/library/common-variables.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/library/forms.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/library/main.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/library/spacing.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/library/text.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/library/utils.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/main.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/polyfills.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/styles.scss (100%) mode change 100755 => 100644 rename {src => frontend/src}/test.ts (100%) mode change 100755 => 100644 rename {src => frontend/src}/tsconfig.app.json (100%) mode change 100755 => 100644 rename {src => frontend/src}/tsconfig.spec.json (100%) mode change 100755 => 100644 rename {src => frontend/src}/tslint.json (100%) mode change 100755 => 100644 rename tsconfig.json => frontend/tsconfig.json (100%) mode change 100755 => 100644 rename tslint.json => frontend/tslint.json (100%) mode change 100755 => 100644 rename yarn.lock => frontend/yarn.lock (100%) create mode 100644 ingress/nginx-config/nginx.conf create mode 100644 store/.dockerignore create mode 100644 store/.gitignore create mode 100644 store/.vscode/settings.json create mode 100644 store/Dockerfile create mode 100644 store/README.md create mode 100644 store/__init__.py create mode 100644 store/db.py create mode 100644 store/migration.py create mode 100644 store/requirements.txt create mode 100644 store/schema.sql create mode 100644 store/server.py create mode 100644 store/start-backend.service create mode 100644 store/store.ini diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4e6927f --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +**/node_modules diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9d464f4 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM schmelczera/error-pages as build-error-pages +RUN python build.py 401 403 404 502 50x + + +FROM node:latest as build-webpage +WORKDIR /home/node + +COPY frontend . + +RUN npm install +RUN npm run build + + +FROM nginx:alpine +WORKDIR /var/www +RUN rm -rf * + +COPY --from=build-error-pages /home/python/built errors +COPY --from=build-webpage /home/node/dist/frontend . +RUN find . -type f | xargs gzip -k9 &&\ + chmod -R 555 . + +VOLUME ["/var/www/sockets"] + +COPY ingress/nginx-config /etc/nginx/ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..e353d1c --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,83 @@ +version: "3.8" + +services: + towers-ingress: + init: true + depends_on: + - store + image: schmelczera/towers-ingress + networks: + - network + deploy: + replicas: 1 + resources: + limits: + cpus: "0.2" + memory: 32M + reservations: + cpus: "0.1" + memory: 16M + placement: + constraints: + - "node.hostname == node-2" + update_config: + parallelism: 1 + failure_action: rollback + delay: 10s + monitor: 10s + restart_policy: + condition: on-failure + window: 30s + volumes: + - sockets:/var/www/sockets + + towers-store: + init: true + image: schmelczera/towers-store + networks: + - network + deploy: + replicas: 1 + resources: + limits: + cpus: "0.2" + memory: 64M + reservations: + cpus: "0.05" + memory: 32M + placement: + constraints: + - "node.hostname == node-2" + restart_policy: + condition: on-failure + window: 30s + volumes: + - sockets:/home/backend/sockets + + towers-db: + init: true + image: postgres:12.1-alpine + networks: + - network + deploy: + replicas: 1 + resources: + limits: + cpus: "0.2" + memory: 64M + reservations: + cpus: "0.05" + memory: 32M + restart_policy: + condition: on-failure + window: 30s + volumes: + - /shared/towers/db:/var/lib/postgresql/data + +networks: + network: + driver: overlay + +volumes: + sockets: + driver: local diff --git a/.editorconfig b/frontend/.editorconfig old mode 100755 new mode 100644 similarity index 100% rename from .editorconfig rename to frontend/.editorconfig diff --git a/.gitignore b/frontend/.gitignore old mode 100755 new mode 100644 similarity index 100% rename from .gitignore rename to frontend/.gitignore diff --git a/.prettierrc b/frontend/.prettierrc old mode 100755 new mode 100644 similarity index 100% rename from .prettierrc rename to frontend/.prettierrc diff --git a/README.md b/frontend/README.md old mode 100755 new mode 100644 similarity index 100% rename from README.md rename to frontend/README.md diff --git a/angular.json b/frontend/angular.json old mode 100755 new mode 100644 similarity index 100% rename from angular.json rename to frontend/angular.json diff --git a/firebase.json b/frontend/firebase.json old mode 100755 new mode 100644 similarity index 100% rename from firebase.json rename to frontend/firebase.json diff --git a/package-lock.json b/frontend/package-lock.json old mode 100755 new mode 100644 similarity index 100% rename from package-lock.json rename to frontend/package-lock.json diff --git a/package.json b/frontend/package.json old mode 100755 new mode 100644 similarity index 100% rename from package.json rename to frontend/package.json diff --git a/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/app-routing.module.ts rename to frontend/src/app/app-routing.module.ts diff --git a/src/app/app.component.html b/frontend/src/app/app.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/app.component.html rename to frontend/src/app/app.component.html diff --git a/src/app/app.component.scss b/frontend/src/app/app.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/app.component.scss rename to frontend/src/app/app.component.scss diff --git a/src/app/app.component.ts b/frontend/src/app/app.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/app.component.ts rename to frontend/src/app/app.component.ts diff --git a/src/app/app.module.ts b/frontend/src/app/app.module.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/app.module.ts rename to frontend/src/app/app.module.ts diff --git a/src/app/components/modal/modal.component.html b/frontend/src/app/components/modal/modal.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modal.component.html rename to frontend/src/app/components/modal/modal.component.html diff --git a/src/app/components/modal/modal.component.scss b/frontend/src/app/components/modal/modal.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modal.component.scss rename to frontend/src/app/components/modal/modal.component.scss diff --git a/src/app/components/modal/modal.component.ts b/frontend/src/app/components/modal/modal.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modal.component.ts rename to frontend/src/app/components/modal/modal.component.ts diff --git a/src/app/components/modal/modals/blocks/blocks.component.html b/frontend/src/app/components/modal/modals/blocks/blocks.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/blocks/blocks.component.html rename to frontend/src/app/components/modal/modals/blocks/blocks.component.html diff --git a/src/app/components/modal/modals/blocks/blocks.component.scss b/frontend/src/app/components/modal/modals/blocks/blocks.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/blocks/blocks.component.scss rename to frontend/src/app/components/modal/modals/blocks/blocks.component.scss diff --git a/src/app/components/modal/modals/blocks/blocks.component.ts b/frontend/src/app/components/modal/modals/blocks/blocks.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/blocks/blocks.component.ts rename to frontend/src/app/components/modal/modals/blocks/blocks.component.ts diff --git a/src/app/components/modal/modals/get-started/get-started.component.html b/frontend/src/app/components/modal/modals/get-started/get-started.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/get-started/get-started.component.html rename to frontend/src/app/components/modal/modals/get-started/get-started.component.html diff --git a/src/app/components/modal/modals/get-started/get-started.component.scss b/frontend/src/app/components/modal/modals/get-started/get-started.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/get-started/get-started.component.scss rename to frontend/src/app/components/modal/modals/get-started/get-started.component.scss diff --git a/src/app/components/modal/modals/get-started/get-started.component.ts b/frontend/src/app/components/modal/modals/get-started/get-started.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/get-started/get-started.component.ts rename to frontend/src/app/components/modal/modals/get-started/get-started.component.ts diff --git a/src/app/components/modal/modals/remove-page/remove-page.component.html b/frontend/src/app/components/modal/modals/remove-page/remove-page.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/remove-page/remove-page.component.html rename to frontend/src/app/components/modal/modals/remove-page/remove-page.component.html diff --git a/src/app/components/modal/modals/remove-page/remove-page.component.scss b/frontend/src/app/components/modal/modals/remove-page/remove-page.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/remove-page/remove-page.component.scss rename to frontend/src/app/components/modal/modals/remove-page/remove-page.component.scss diff --git a/src/app/components/modal/modals/remove-page/remove-page.component.ts b/frontend/src/app/components/modal/modals/remove-page/remove-page.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/remove-page/remove-page.component.ts rename to frontend/src/app/components/modal/modals/remove-page/remove-page.component.ts diff --git a/src/app/components/modal/modals/remove-tower/remove-tower.component.html b/frontend/src/app/components/modal/modals/remove-tower/remove-tower.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/remove-tower/remove-tower.component.html rename to frontend/src/app/components/modal/modals/remove-tower/remove-tower.component.html diff --git a/src/app/components/modal/modals/remove-tower/remove-tower.component.scss b/frontend/src/app/components/modal/modals/remove-tower/remove-tower.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/remove-tower/remove-tower.component.scss rename to frontend/src/app/components/modal/modals/remove-tower/remove-tower.component.scss diff --git a/src/app/components/modal/modals/remove-tower/remove-tower.component.ts b/frontend/src/app/components/modal/modals/remove-tower/remove-tower.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/remove-tower/remove-tower.component.ts rename to frontend/src/app/components/modal/modals/remove-tower/remove-tower.component.ts diff --git a/src/app/components/modal/modals/settings/settings.component.html b/frontend/src/app/components/modal/modals/settings/settings.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/settings/settings.component.html rename to frontend/src/app/components/modal/modals/settings/settings.component.html diff --git a/src/app/components/modal/modals/settings/settings.component.scss b/frontend/src/app/components/modal/modals/settings/settings.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/settings/settings.component.scss rename to frontend/src/app/components/modal/modals/settings/settings.component.scss diff --git a/src/app/components/modal/modals/settings/settings.component.ts b/frontend/src/app/components/modal/modals/settings/settings.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/modal/modals/settings/settings.component.ts rename to frontend/src/app/components/modal/modals/settings/settings.component.ts diff --git a/src/app/components/pages/page/page.component.html b/frontend/src/app/components/pages/page/page.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/page.component.html rename to frontend/src/app/components/pages/page/page.component.html diff --git a/src/app/components/pages/page/page.component.scss b/frontend/src/app/components/pages/page/page.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/page.component.scss rename to frontend/src/app/components/pages/page/page.component.scss diff --git a/src/app/components/pages/page/page.component.ts b/frontend/src/app/components/pages/page/page.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/page.component.ts rename to frontend/src/app/components/pages/page/page.component.ts diff --git a/src/app/components/pages/page/tower/block/block.component.html b/frontend/src/app/components/pages/page/tower/block/block.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/block/block.component.html rename to frontend/src/app/components/pages/page/tower/block/block.component.html diff --git a/src/app/components/pages/page/tower/block/block.component.scss b/frontend/src/app/components/pages/page/tower/block/block.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/block/block.component.scss rename to frontend/src/app/components/pages/page/tower/block/block.component.scss diff --git a/src/app/components/pages/page/tower/block/block.component.ts b/frontend/src/app/components/pages/page/tower/block/block.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/block/block.component.ts rename to frontend/src/app/components/pages/page/tower/block/block.component.ts diff --git a/src/app/components/pages/page/tower/tasks/tasks.component.html b/frontend/src/app/components/pages/page/tower/tasks/tasks.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/tasks/tasks.component.html rename to frontend/src/app/components/pages/page/tower/tasks/tasks.component.html diff --git a/src/app/components/pages/page/tower/tasks/tasks.component.scss b/frontend/src/app/components/pages/page/tower/tasks/tasks.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/tasks/tasks.component.scss rename to frontend/src/app/components/pages/page/tower/tasks/tasks.component.scss diff --git a/src/app/components/pages/page/tower/tasks/tasks.component.ts b/frontend/src/app/components/pages/page/tower/tasks/tasks.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/tasks/tasks.component.ts rename to frontend/src/app/components/pages/page/tower/tasks/tasks.component.ts diff --git a/src/app/components/pages/page/tower/tower.component.html b/frontend/src/app/components/pages/page/tower/tower.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/tower.component.html rename to frontend/src/app/components/pages/page/tower/tower.component.html diff --git a/src/app/components/pages/page/tower/tower.component.scss b/frontend/src/app/components/pages/page/tower/tower.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/tower.component.scss rename to frontend/src/app/components/pages/page/tower/tower.component.scss diff --git a/src/app/components/pages/page/tower/tower.component.ts b/frontend/src/app/components/pages/page/tower/tower.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/page/tower/tower.component.ts rename to frontend/src/app/components/pages/page/tower/tower.component.ts diff --git a/src/app/components/pages/pages.component.html b/frontend/src/app/components/pages/pages.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/pages.component.html rename to frontend/src/app/components/pages/pages.component.html diff --git a/src/app/components/pages/pages.component.scss b/frontend/src/app/components/pages/pages.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/pages.component.scss rename to frontend/src/app/components/pages/pages.component.scss diff --git a/src/app/components/pages/pages.component.ts b/frontend/src/app/components/pages/pages.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/pages/pages.component.ts rename to frontend/src/app/components/pages/pages.component.ts diff --git a/src/app/components/shared/double-slider/double-slider.component.html b/frontend/src/app/components/shared/double-slider/double-slider.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/double-slider/double-slider.component.html rename to frontend/src/app/components/shared/double-slider/double-slider.component.html diff --git a/src/app/components/shared/double-slider/double-slider.component.scss b/frontend/src/app/components/shared/double-slider/double-slider.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/double-slider/double-slider.component.scss rename to frontend/src/app/components/shared/double-slider/double-slider.component.scss diff --git a/src/app/components/shared/double-slider/double-slider.component.ts b/frontend/src/app/components/shared/double-slider/double-slider.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/double-slider/double-slider.component.ts rename to frontend/src/app/components/shared/double-slider/double-slider.component.ts diff --git a/src/app/components/shared/select-add/select-add.component.html b/frontend/src/app/components/shared/select-add/select-add.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/select-add/select-add.component.html rename to frontend/src/app/components/shared/select-add/select-add.component.html diff --git a/src/app/components/shared/select-add/select-add.component.scss b/frontend/src/app/components/shared/select-add/select-add.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/select-add/select-add.component.scss rename to frontend/src/app/components/shared/select-add/select-add.component.scss diff --git a/src/app/components/shared/select-add/select-add.component.ts b/frontend/src/app/components/shared/select-add/select-add.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/select-add/select-add.component.ts rename to frontend/src/app/components/shared/select-add/select-add.component.ts diff --git a/src/app/components/shared/toggle/toggle.component.html b/frontend/src/app/components/shared/toggle/toggle.component.html old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/toggle/toggle.component.html rename to frontend/src/app/components/shared/toggle/toggle.component.html diff --git a/src/app/components/shared/toggle/toggle.component.scss b/frontend/src/app/components/shared/toggle/toggle.component.scss old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/toggle/toggle.component.scss rename to frontend/src/app/components/shared/toggle/toggle.component.scss diff --git a/src/app/components/shared/toggle/toggle.component.ts b/frontend/src/app/components/shared/toggle/toggle.component.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/components/shared/toggle/toggle.component.ts rename to frontend/src/app/components/shared/toggle/toggle.component.ts diff --git a/src/app/interfaces/color.ts b/frontend/src/app/interfaces/color.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/interfaces/color.ts rename to frontend/src/app/interfaces/color.ts diff --git a/src/app/interfaces/persistance/block.ts b/frontend/src/app/interfaces/persistance/block.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/interfaces/persistance/block.ts rename to frontend/src/app/interfaces/persistance/block.ts diff --git a/src/app/interfaces/persistance/data.ts b/frontend/src/app/interfaces/persistance/data.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/interfaces/persistance/data.ts rename to frontend/src/app/interfaces/persistance/data.ts diff --git a/src/app/interfaces/persistance/page.ts b/frontend/src/app/interfaces/persistance/page.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/interfaces/persistance/page.ts rename to frontend/src/app/interfaces/persistance/page.ts diff --git a/src/app/interfaces/persistance/tower.ts b/frontend/src/app/interfaces/persistance/tower.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/interfaces/persistance/tower.ts rename to frontend/src/app/interfaces/persistance/tower.ts diff --git a/src/app/interfaces/persistance/unique.ts b/frontend/src/app/interfaces/persistance/unique.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/interfaces/persistance/unique.ts rename to frontend/src/app/interfaces/persistance/unique.ts diff --git a/src/app/interfaces/range.ts b/frontend/src/app/interfaces/range.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/interfaces/range.ts rename to frontend/src/app/interfaces/range.ts diff --git a/src/app/interfaces/serializable.ts b/frontend/src/app/interfaces/serializable.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/interfaces/serializable.ts rename to frontend/src/app/interfaces/serializable.ts diff --git a/src/app/model/block.ts b/frontend/src/app/model/block.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/model/block.ts rename to frontend/src/app/model/block.ts diff --git a/src/app/model/data.ts b/frontend/src/app/model/data.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/model/data.ts rename to frontend/src/app/model/data.ts diff --git a/src/app/model/page.ts b/frontend/src/app/model/page.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/model/page.ts rename to frontend/src/app/model/page.ts diff --git a/src/app/model/tower.ts b/frontend/src/app/model/tower.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/model/tower.ts rename to frontend/src/app/model/tower.ts diff --git a/src/app/pipes/color.pipe.ts b/frontend/src/app/pipes/color.pipe.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/pipes/color.pipe.ts rename to frontend/src/app/pipes/color.pipe.ts diff --git a/src/app/pipes/format-date.pipe.ts b/frontend/src/app/pipes/format-date.pipe.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/pipes/format-date.pipe.ts rename to frontend/src/app/pipes/format-date.pipe.ts diff --git a/src/app/services/api.service.ts b/frontend/src/app/services/api.service.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/services/api.service.ts rename to frontend/src/app/services/api.service.ts diff --git a/src/app/services/cancel.service.ts b/frontend/src/app/services/cancel.service.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/services/cancel.service.ts rename to frontend/src/app/services/cancel.service.ts diff --git a/src/app/services/data.service.ts b/frontend/src/app/services/data.service.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/services/data.service.ts rename to frontend/src/app/services/data.service.ts diff --git a/src/app/services/map-store.service.ts b/frontend/src/app/services/map-store.service.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/services/map-store.service.ts rename to frontend/src/app/services/map-store.service.ts diff --git a/src/app/services/modal.service.ts b/frontend/src/app/services/modal.service.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/services/modal.service.ts rename to frontend/src/app/services/modal.service.ts diff --git a/src/app/store/inner-node.ts b/frontend/src/app/store/inner-node.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/store/inner-node.ts rename to frontend/src/app/store/inner-node.ts diff --git a/src/app/store/node.ts b/frontend/src/app/store/node.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/store/node.ts rename to frontend/src/app/store/node.ts diff --git a/src/app/store/root.ts b/frontend/src/app/store/root.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/store/root.ts rename to frontend/src/app/store/root.ts diff --git a/src/app/store/unique.ts b/frontend/src/app/store/unique.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/store/unique.ts rename to frontend/src/app/store/unique.ts diff --git a/src/app/utils/color.ts b/frontend/src/app/utils/color.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/utils/color.ts rename to frontend/src/app/utils/color.ts diff --git a/src/app/utils/hash.ts b/frontend/src/app/utils/hash.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/utils/hash.ts rename to frontend/src/app/utils/hash.ts diff --git a/src/app/utils/range.ts b/frontend/src/app/utils/range.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/utils/range.ts rename to frontend/src/app/utils/range.ts diff --git a/src/app/utils/top.ts b/frontend/src/app/utils/top.ts old mode 100755 new mode 100644 similarity index 100% rename from src/app/utils/top.ts rename to frontend/src/app/utils/top.ts diff --git a/src/assets/.gitkeep b/frontend/src/assets/.gitkeep old mode 100755 new mode 100644 similarity index 100% rename from src/assets/.gitkeep rename to frontend/src/assets/.gitkeep diff --git a/src/assets/arrow.svg b/frontend/src/assets/arrow.svg old mode 100755 new mode 100644 similarity index 100% rename from src/assets/arrow.svg rename to frontend/src/assets/arrow.svg diff --git a/src/assets/pen.svg b/frontend/src/assets/pen.svg old mode 100755 new mode 100644 similarity index 100% rename from src/assets/pen.svg rename to frontend/src/assets/pen.svg diff --git a/src/assets/plus-sign.svg b/frontend/src/assets/plus-sign.svg old mode 100755 new mode 100644 similarity index 100% rename from src/assets/plus-sign.svg rename to frontend/src/assets/plus-sign.svg diff --git a/src/assets/trash.svg b/frontend/src/assets/trash.svg old mode 100755 new mode 100644 similarity index 100% rename from src/assets/trash.svg rename to frontend/src/assets/trash.svg diff --git a/src/assets/x-sign.svg b/frontend/src/assets/x-sign.svg old mode 100755 new mode 100644 similarity index 100% rename from src/assets/x-sign.svg rename to frontend/src/assets/x-sign.svg diff --git a/src/browserslist b/frontend/src/browserslist old mode 100755 new mode 100644 similarity index 100% rename from src/browserslist rename to frontend/src/browserslist diff --git a/src/environments/environment.prod.ts b/frontend/src/environments/environment.prod.ts old mode 100755 new mode 100644 similarity index 100% rename from src/environments/environment.prod.ts rename to frontend/src/environments/environment.prod.ts diff --git a/src/environments/environment.ts b/frontend/src/environments/environment.ts old mode 100755 new mode 100644 similarity index 100% rename from src/environments/environment.ts rename to frontend/src/environments/environment.ts diff --git a/src/favicon.ico b/frontend/src/favicon.ico old mode 100755 new mode 100644 similarity index 100% rename from src/favicon.ico rename to frontend/src/favicon.ico diff --git a/src/index.html b/frontend/src/index.html old mode 100755 new mode 100644 similarity index 100% rename from src/index.html rename to frontend/src/index.html diff --git a/src/karma.conf.js b/frontend/src/karma.conf.js old mode 100755 new mode 100644 similarity index 100% rename from src/karma.conf.js rename to frontend/src/karma.conf.js diff --git a/src/library/animations.scss b/frontend/src/library/animations.scss old mode 100755 new mode 100644 similarity index 100% rename from src/library/animations.scss rename to frontend/src/library/animations.scss diff --git a/src/library/common-variables.scss b/frontend/src/library/common-variables.scss old mode 100755 new mode 100644 similarity index 100% rename from src/library/common-variables.scss rename to frontend/src/library/common-variables.scss diff --git a/src/library/forms.scss b/frontend/src/library/forms.scss old mode 100755 new mode 100644 similarity index 100% rename from src/library/forms.scss rename to frontend/src/library/forms.scss diff --git a/src/library/main.scss b/frontend/src/library/main.scss old mode 100755 new mode 100644 similarity index 100% rename from src/library/main.scss rename to frontend/src/library/main.scss diff --git a/src/library/spacing.scss b/frontend/src/library/spacing.scss old mode 100755 new mode 100644 similarity index 100% rename from src/library/spacing.scss rename to frontend/src/library/spacing.scss diff --git a/src/library/text.scss b/frontend/src/library/text.scss old mode 100755 new mode 100644 similarity index 100% rename from src/library/text.scss rename to frontend/src/library/text.scss diff --git a/src/library/utils.scss b/frontend/src/library/utils.scss old mode 100755 new mode 100644 similarity index 100% rename from src/library/utils.scss rename to frontend/src/library/utils.scss diff --git a/src/main.ts b/frontend/src/main.ts old mode 100755 new mode 100644 similarity index 100% rename from src/main.ts rename to frontend/src/main.ts diff --git a/src/polyfills.ts b/frontend/src/polyfills.ts old mode 100755 new mode 100644 similarity index 100% rename from src/polyfills.ts rename to frontend/src/polyfills.ts diff --git a/src/styles.scss b/frontend/src/styles.scss old mode 100755 new mode 100644 similarity index 100% rename from src/styles.scss rename to frontend/src/styles.scss diff --git a/src/test.ts b/frontend/src/test.ts old mode 100755 new mode 100644 similarity index 100% rename from src/test.ts rename to frontend/src/test.ts diff --git a/src/tsconfig.app.json b/frontend/src/tsconfig.app.json old mode 100755 new mode 100644 similarity index 100% rename from src/tsconfig.app.json rename to frontend/src/tsconfig.app.json diff --git a/src/tsconfig.spec.json b/frontend/src/tsconfig.spec.json old mode 100755 new mode 100644 similarity index 100% rename from src/tsconfig.spec.json rename to frontend/src/tsconfig.spec.json diff --git a/src/tslint.json b/frontend/src/tslint.json old mode 100755 new mode 100644 similarity index 100% rename from src/tslint.json rename to frontend/src/tslint.json diff --git a/tsconfig.json b/frontend/tsconfig.json old mode 100755 new mode 100644 similarity index 100% rename from tsconfig.json rename to frontend/tsconfig.json diff --git a/tslint.json b/frontend/tslint.json old mode 100755 new mode 100644 similarity index 100% rename from tslint.json rename to frontend/tslint.json diff --git a/yarn.lock b/frontend/yarn.lock similarity index 100% rename from yarn.lock rename to frontend/yarn.lock diff --git a/ingress/nginx-config/nginx.conf b/ingress/nginx-config/nginx.conf new file mode 100644 index 0000000..9655591 --- /dev/null +++ b/ingress/nginx-config/nginx.conf @@ -0,0 +1,90 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; + +events { + worker_connections 768; + # multi_accept on; +} + +http { + + ## + # Basic Settings + ## + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + # server_tokens off; + + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ## + # SSL Settings + ## + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## + # Logging Settings + ## + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + ## + # Gzip Settings + ## + + gzip on; + + # gzip_vary on; + # gzip_proxied any; + # gzip_comp_level 6; + # gzip_buffers 16 8k; + # gzip_http_version 1.1; + # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; + + ## + # Virtual Host Configs + ## + + server { + listen [::]:443 ssl ipv6only=on; # managed by Certbot + listen 443 ssl; # managed by Certbot + + server_name default_server; + server_tokens off; + + ssl_certificate /etc/letsencrypt/live/store.schmelczer.dev/fullchain.pem; # managed by Certbot + ssl_certificate_key /etc/letsencrypt/live/store.schmelczer.dev/privkey.pem; # managed by Certbot + include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot + + location ~ ^/api/store(?.*)$ { + include uwsgi_params; + uwsgi_param PATH_INFO $api_uri; + uwsgi_pass unix:/var/www/sockets/store.sock; + } + } + + server { + if ($host = store.schmelczer.dev) { + return 301 https://$host$request_uri; + } # managed by Certbot + + + listen 80 ; + listen [::]:80 ; + server_name store.schmelczer.dev; + return 404; # managed by Certbot + } +} diff --git a/store/.dockerignore b/store/.dockerignore new file mode 100644 index 0000000..eb5a316 --- /dev/null +++ b/store/.dockerignore @@ -0,0 +1 @@ +target diff --git a/store/.gitignore b/store/.gitignore new file mode 100644 index 0000000..c6b6498 --- /dev/null +++ b/store/.gitignore @@ -0,0 +1 @@ +secrets.py \ No newline at end of file diff --git a/store/.vscode/settings.json b/store/.vscode/settings.json new file mode 100644 index 0000000..f5aadc8 --- /dev/null +++ b/store/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.pythonPath": "/Users/andras/Projects/store/server/bin/python3" +} \ No newline at end of file diff --git a/store/Dockerfile b/store/Dockerfile new file mode 100644 index 0000000..5fdf095 --- /dev/null +++ b/store/Dockerfile @@ -0,0 +1,13 @@ +FROM python:3.8-slim + +WORKDIR /home/backend + +RUN apt update && apt install libpq-dev gcc libpcre3 libpcre3-dev -y + +COPY requirements.txt . +RUN pip install -r requirements.txt +COPY . . + +VOLUME ["/home/backend/sockets"] + +ENTRYPOINT ["uwsgi", "--ini", "/home/backend/store.ini"] diff --git a/store/README.md b/store/README.md new file mode 100644 index 0000000..8ba8376 --- /dev/null +++ b/store/README.md @@ -0,0 +1,51 @@ +# Store backend + +## API + +- / + + - POST: + - Register a new user with the provided token. + - body + - token: uuid + +- /me + + - POST: + - Log the login of the user. + - Authorization header + - \_ token: uuid + +- /me/root + + - PUT: + + - Set the root of user data. + - body + - root_id: uuid + - Authorization header + - \_ token: uuid + + - GET: + - Get the root of user data. + - Authorization header + - \_ token: uuid + - response + - uuid + +- /me/{id: string} + + - POST: + + - Upload a new object with id. + - body + - data: string + - Authorization header + - \_ token: uuid + + - GET: + - Retrieve an object with id. + - Authorization header + - \_ token: uuid + - response + - string diff --git a/store/__init__.py b/store/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/store/db.py b/store/db.py new file mode 100644 index 0000000..fc79081 --- /dev/null +++ b/store/db.py @@ -0,0 +1,20 @@ +import psycopg2 + + +def _create_connection(): + return psycopg2.connect( + user="storebackend", host="localhost", port="5432", database="store" + ) + + +def execute(query, params): + with _create_connection() as connection: + cursor = connection.cursor() + cursor.execute(query, params) + + +def get_first(query, params): + with _create_connection() as connection: + cursor = connection.cursor() + cursor.execute(query, params) + return cursor.fetchone() diff --git a/store/migration.py b/store/migration.py new file mode 100644 index 0000000..e7cbf08 --- /dev/null +++ b/store/migration.py @@ -0,0 +1,688 @@ +from uuid import uuid4 +import json + +old = [ + { + "userData": { + "hideCreateTowerButton": True + }, + "towers": [ + { + "name": "life", + "baseColor": { + "l": 50, + "s": 100, + "h": 180 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-04-12T22:00:00.000Z", + "tag": "go home", + "description": "done it" + }, + { + "isDone": True, + "created": "2019-05-12T22:00:00.000Z", + "tag": "go home" + }, + { + "isDone": True, + "created": "2019-05-14T22:00:00.000Z", + "tag": "go to work", + "description": "done it" + }, + { + "isDone": True, + "created": "2019-05-15T12:00:00.000Z", + "tag": "go to work" + }, + { + "isDone": True, + "created": "2019-08-21T19:25:12.765Z", + "tag": "go home", + "description": "Df" + }, + { + "isDone": True, + "created": "2019-08-21T19:25:17.014Z", + "tag": "Bruh", + "description": "" + }, + { + "isDone": False, + "created": "2019-08-21T19:25:21.050Z", + "tag": "Bruh", + "description": "Xhsksj mentsd el" + }, + { + "isDone": False, + "created": "2019-09-15T20:21:59.928Z", + "tag": "go home", + "description": "Ggggg" + } + ] + }, + { + "name": "work", + "baseColor": { + "l": 50, + "s": 100, + "h": 0 + }, + "blocks": [ + { + "isDone": True, + "created": "2015-03-12T23:00:00.000Z", + "tag": "a", + "description": "done it" + }, + { + "isDone": True, + "created": "2016-03-14T23:00:00.000Z", + "tag": "go to school", + "description": "done it" + }, + { + "isDone": True, + "created": "2017-03-14T23:00:00.000Z", + "tag": "go to work" + }, + { + "isDone": True, + "created": "2018-03-12T23:00:00.000Z", + "tag": "go to work", + "description": "done it" + }, + { + "isDone": True, + "created": "2019-04-12T22:00:00.000Z", + "tag": "go to work" + }, + { + "isDone": True, + "created": "2020-03-14T23:00:00.000Z", + "tag": "go to school", + "description": "done it" + }, + { + "isDone": True, + "created": "2021-03-14T23:00:00.000Z", + "tag": "go to school" + } + ] + }, + { + "name": "", + "baseColor": { + "l": 50, + "s": 100, + "h": 294.9292268766079 + }, + "blocks": [] + }, + { + "name": "", + "baseColor": { + "l": 50, + "s": 100, + "h": 345.9634764049032 + }, + "blocks": [] + } + ], + "name": "Work & life" + }, + { + "userData": { + "hideCreateTowerButton": True + }, + "towers": [ + { + "name": "barátok", + "baseColor": { + "l": 50, + "s": 100, + "h": 172.2967317706582 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-08-19T07:25:28.918Z", + "tag": "szoba", + "description": "5. féléves szoba elintézése" + }, + { + "isDone": True, + "created": "2019-08-20T11:06:38.851Z", + "tag": "szoba", + "description": "Kopaszi-gáton lőtt képek kiválogatása, szerkesztése." + }, + { + "isDone": True, + "created": "2019-08-21T08:24:29.545Z", + "tag": "srácok", + "description": "Augusztus 20.-i tűzijáték" + }, + { + "isDone": True, + "created": "2019-08-24T20:57:34.315Z", + "tag": "srácok", + "description": "Ádámmal sétáltunk a városban." + }, + { + "isDone": True, + "created": "2019-08-25T20:40:58.238Z", + "tag": "srácok", + "description": "Ádámmal kondiztunk, bicikliztünk és filmeztünk is." + }, + { + "isDone": False, + "created": "2019-09-01T10:30:43.397Z", + "tag": "barátnő", + "description": "Tinder?" + }, + { + "isDone": True, + "created": "2019-09-02T18:57:25.047Z", + "tag": "ismerősök", + "description": "Eljöttem inni az ismerőseinek (nem barátok)" + }, + { + "isDone": True, + "created": "2019-09-04T06:40:35.979Z", + "tag": "szoba", + "description": "Elmentünk IKEA-zni, ott vacsoráztunk, majd vettem pár apróságot." + }, + { + "isDone": True, + "created": "2019-09-11T21:50:06.110Z", + "tag": "srácok", + "description": "Balázs elhívott a félévnyitó bulijára, egész jó volt, több embert is megismertem." + }, + { + "isDone": True, + "created": "2019-09-11T21:51:45.161Z", + "tag": "srácok", + "description": "Elmentem az egyetemi napokra. Az NB zenekar megtetszett." + }, + { + "isDone": False, + "created": "2019-09-15T20:20:59.632Z", + "tag": "barátok", + "description": "Judit" + }, + { + "isDone": True, + "created": "2019-09-20T19:58:32.223Z", + "tag": "szoba", + "description": "Olivér mellé feküdni." + } + ] + }, + { + "name": "külföld", + "baseColor": { + "l": 50, + "s": 100, + "h": 328.5326579421781 + }, + "blocks": [ + { + "isDone": False, + "created": "2019-08-24T15:30:44.696Z", + "tag": "észak", + "description": "lista a lehetséges egyetemekről" + }, + { + "isDone": False, + "created": "2019-08-26T18:33:14.150Z", + "tag": "vizsgák", + "description": "Szükséges vizsgák" + }, + { + "isDone": False, + "created": "2019-09-03T05:48:10.664Z", + "tag": "svájc", + "description": "Lausanne" + } + ] + }, + { + "name": "család", + "baseColor": { + "l": 50, + "s": 100, + "h": 304.3554194102233 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-08-18T13:30:55.730Z", + "tag": "mama", + "description": "Segítettem megcsinálni a tabletét." + }, + { + "isDone": True, + "created": "2019-08-18T20:59:51.241Z", + "tag": "anya", + "description": "Önéletrajz, grillezés, utóbbi nem volt túl élvezetes." + }, + { + "isDone": True, + "created": "2019-08-19T17:39:45.406Z", + "tag": "anya", + "description": "A mai nap a Balatonra jöttünk, hazajövet mekiztünk is." + }, + { + "isDone": True, + "created": "2019-08-26T18:29:49.887Z", + "tag": "mama", + "description": "Beszéltem mamával és anyával" + }, + { + "isDone": True, + "created": "2019-09-07T20:47:06.526Z", + "tag": "apa", + "description": "Elmentem a szüretre, jó volt, szeretek apukámmal találkozni." + }, + { + "isDone": True, + "created": "2019-09-18T20:42:40.300Z", + "tag": "apa", + "description": "Apukámmal találkoztunk, megnéztük a Westendben a Lego Bugatti Chiront." + } + ] + }, + { + "name": "schdesign", + "baseColor": { + "l": 50, + "s": 100, + "h": 126.70173577740843 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-08-18T13:43:35.783Z", + "tag": "mentorság", + "description": "Első közös fejlesztés megszervezése." + }, + { + "isDone": True, + "created": "2019-08-21T19:24:49.641Z", + "tag": "mentorság", + "description": "Angular workshop tartása" + }, + { + "isDone": True, + "created": "2019-09-01T10:29:36.360Z", + "tag": "mentorság", + "description": "Tanfolyamoldalon dolgozni" + }, + { + "isDone": False, + "created": "2019-09-01T10:29:54.133Z", + "tag": "mentorság", + "description": "Web workshop tartása" + }, + { + "isDone": False, + "created": "2019-09-01T20:44:36.023Z", + "tag": "mentorság", + "description": "Felvételizők munkáinak átnézése." + }, + { + "isDone": True, + "created": "2019-09-15T20:20:28.031Z", + "tag": "mentorság", + "description": "Kiírtam egy poll-t angular webworkshopra, és meglepően gyorsan, meglepően sokan jeleztek vissza." + }, + { + "isDone": True, + "created": "2019-09-16T20:27:13.032Z", + "tag": "felvételi", + "description": "Kifejezetten jó érzés volt a felvételi bizottságban ülni, izgalmas volt vezényelni a történéseket és a felvételizőket jobban megismerni.\nA jövőben szívesen foglalkoznék ezzel is." + } + ] + }, + { + "name": "új skillek", + "baseColor": { + "l": 50, + "s": 100, + "h": 79.00679913000361 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-08-18T11:49:34.869Z", + "tag": "társasági", + "description": "Érdekes kérdések\n\nBemelegítés\n\nHol nőttél fel, mi volt az első háziállatod neve, milyen színű volt az első autód?\n\nKérdések\n\nHa egy idegen 24 órán át a helyedben lenne, az idő lejártával milyen kérdést tenne fel neked?\n\nHa meg lehetne téged idézni egy olyan pentagrammaval, aminek az 5 csúcsába 5 rád jellemző tárgyat helyezünk, mik lennének ezek a tárgyak?\n\nEgy varázsló jön a , kipakol a főtéren és a következő ajánlatot adja; annyi pénzt adhatsz neki, amennyit szeretnél, és ezzel arányosan vonzóbbá fog téged tenni.\nEzt demonstrálja is, elvesz egy 200 forintost egy helyi hajléktalantól és elvégzi rajta a varázslatot. Nem tudod mi változott rajta, de egy kicsit tényleg szebb lett. Arra jutsz, hogy adsz neki egy esélyt. Mármint a varázslónak, nem a csövinek.\nMennyi pénzt adsz neki?\n(A csavar, hogy nem tudod előre, hogy a penzedert cserében mennyivel leszel vonzóbb, csak azt tudod, hogy a mennyiséggel pozitívan arányosan)\n\nEgyütt lennél egy transzneművel, ha minden szempontból olyan lenne, mint egy tieddel ellentétes nemű ember? Rövidtávon, vagy akár hosszútávon is működne?\n\nMivel töltöd a szabadidőd mostanában?" + }, + { + "isDone": True, + "created": "2019-08-19T17:39:20.118Z", + "tag": "programozás", + "description": "Effective JS elolvasva." + }, + { + "isDone": True, + "created": "2019-08-24T14:24:04.086Z", + "tag": "programozás", + "description": "learngitbranching.js.org végigcsinálása" + }, + { + "isDone": True, + "created": "2019-08-26T18:29:15.447Z", + "tag": "pénzügyek", + "description": "Befektettem 1 milliót állampapírba." + }, + { + "isDone": True, + "created": "2019-08-26T18:30:54.781Z", + "tag": "programozás", + "description": "A FLUX architektúrát megtanítottak nekem a munkahelyen." + }, + { + "isDone": True, + "created": "2019-09-01T10:30:07.643Z", + "tag": "programozás", + "description": "Observable gyakorlása a life oldalon." + }, + { + "isDone": False, + "created": "2019-09-01T10:30:25.734Z", + "tag": "programozás", + "description": "PWA kipróbálása ezen az oldalon." + }, + { + "isDone": True, + "created": "2019-09-11T21:51:05.774Z", + "tag": "programozás", + "description": "rxjs" + }, + { + "isDone": True, + "created": "2019-09-15T20:16:10.740Z", + "tag": "programozás", + "description": "Tetszik a pagination absztrakció, amit az új platformhoz csináltam, kíváncsi vagyok, hogy mit fognak hozzá szólni a többiek." + }, + { + "isDone": True, + "created": "2019-09-15T20:18:04.862Z", + "tag": "pénzügyek", + "description": "A témalabor miatt elkezdtem megismerkedni a Forex-szel, egész érdekes, lehet érdemes lenne kipróbálni." + } + ] + } + ], + "name": "My life" + }, + { + "userData": { + "hideCreateTowerButton": True + }, + "towers": [ + { + "name": "Jó dolgok", + "baseColor": { + "l": 50, + "s": 100, + "h": 320.2226045855286 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-08-23T21:16:14.785Z", + "tag": "munka", + "description": "Azt mondta PG, hogy értékes tagja vagyok a csapatnak." + }, + { + "isDone": True, + "created": "2019-08-24T21:00:19.375Z", + "tag": "filmek", + "description": "Nagyon tetszik az Euphoria képivilága." + }, + { + "isDone": True, + "created": "2019-08-25T14:04:03.994Z", + "tag": "barátok", + "description": "Dorkával jót beszélgettünk." + }, + { + "isDone": True, + "created": "2019-09-01T10:29:12.381Z", + "tag": "programozás", + "description": "Az immutable fát, ami az app jelenlegi verziójában van, izgalmas kihívás volt elkészíteni." + }, + { + "isDone": True, + "created": "2019-09-02T15:36:57.236Z", + "tag": "munka", + "description": "Fogok kapni egy MacBook Pro-t, már alig várom. " + }, + { + "isDone": True, + "created": "2019-09-07T20:44:02.422Z", + "tag": "munka", + "description": "Nagyon tetszik a MacBook, biztos vagyok benne, hogy ilyen gépet szeretnék használni ezután is." + }, + { + "isDone": True, + "created": "2019-09-11T21:48:51.651Z", + "tag": "programozás", + "description": "Stöki megkért a fizika gyakorló oldal frissítésére, amiért azt sokan használják az érettségire való készüléshez." + }, + { + "isDone": True, + "created": "2019-09-11T21:53:59.384Z", + "tag": "barátok", + "description": "Szerintem jó döntést hozok azzal, hogy nem megyek el a hétvégi tanyaparádéra. Szerintem nem érezném jól magam, szükségem van egy kis emberek nélküli pihenésre." + }, + { + "isDone": True, + "created": "2019-09-12T21:07:39.213Z", + "tag": "munka", + "description": "Jó érzés, hogy értékelik a munkámat, és értékes része vagyok a csapatnak." + }, + { + "isDone": True, + "created": "2019-09-12T21:08:12.154Z", + "tag": "barátok", + "description": "Jó volt Ricsivel beszélgetni, kicsit jobban megismerni." + }, + { + "isDone": True, + "created": "2019-09-15T15:24:23.022Z", + "tag": "barátok", + "description": "Judit majdnem egy év után rám írt, hogy hiányzok neki, és szeretne találkozni, belementem. Kíváncsi vagyok, hogy mi a helyzet vele. " + } + ] + }, + { + "name": "Emlékezetes dolgok", + "baseColor": { + "h": 357.0621032334518, + "s": 100, + "l": 50 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-09-01T10:28:07.649Z", + "tag": "munka", + "description": "Keményen dolgoztam egész héten, hogy a demóra elkészüljünk. Rossz érzés volt nem minőségi kódot írni, azért hogy hamar elkészüljünk." + }, + { + "isDone": True, + "created": "2019-09-04T06:41:43.480Z", + "tag": "munka", + "description": "Reménytelennek érzem a cég jövőjét. Az is aggaszt, hogy hogyan fogok egyetem mellett ennyit dolgozni. Ezt még át kell gondolnom." + }, + { + "isDone": True, + "created": "2019-09-07T20:45:27.670Z", + "tag": "barátok", + "description": "Rosszul esik, hogy Balázs nem hívott meg a bulijára, nem tudom miért zavart ennyire, a FOMO kifog rajtam." + }, + { + "isDone": True, + "created": "2019-09-09T10:16:23.967Z", + "tag": "anya", + "description": "Nem értem, hogy miért akad ki apróságokon. Nem tud konfliktust kezelni." + }, + { + "isDone": True, + "created": "2019-09-11T21:52:54.984Z", + "tag": "egyetem", + "description": "Tiltakozásból nem mentem el az AB osztóra." + }, + { + "isDone": True, + "created": "2019-09-11T21:56:01.110Z", + "tag": "barátnő", + "description": "Elég magányosnak érzem magam mostanában, irigykedem a boldog párokra, kezdek rájönni, hogy eddig milyen rossz barát voltam. Mit csináljak?" + } + ] + } + ], + "name": "Memorable" + }, + { + "userData": {}, + "towers": [ + { + "name": "", + "baseColor": { + "l": 50, + "s": 100, + "h": 17.635188105608712 + }, + "blocks": [ + { + "isDone": False, + "created": "2019-08-25T14:05:41.560Z", + "tag": "Hjj", + "description": "Bjjfvjk fgjjj fjkkj ghnmn" + } + ] + }, + { + "name": "", + "baseColor": { + "l": 50, + "s": 100, + "h": 202.96345104830144 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-08-25T14:04:59.102Z", + "tag": "Vnj", + "description": None + }, + { + "isDone": True, + "created": "2019-08-25T14:05:06.280Z", + "tag": "Vnj", + "description": "Vjkv" + } + ] + }, + { + "name": "", + "baseColor": { + "l": 50, + "s": 100, + "h": 244.5895191614271 + }, + "blocks": [ + { + "isDone": True, + "created": "2019-08-25T14:05:30.137Z", + "tag": "Hh", + "description": None + } + ] + } + ], + "name": "test" + }, + { + "userData": { + "hideCreateTowerButton": True + }, + "towers": [ + { + "name": "", + "baseColor": { + "h": 284.3072429732195, + "s": 100, + "l": 50 + }, + "blocks": [] + }, + { + "name": "", + "baseColor": { + "h": 340.06459179946825, + "s": 100, + "l": 50 + }, + "blocks": [] + }, + { + "name": "Akckflf", + "baseColor": { + "h": 260.7613227015375, + "s": 100, + "l": 50 + }, + "blocks": [] + }, + { + "name": "", + "baseColor": { + "h": 302.87743163951694, + "s": 100, + "l": 50 + }, + "blocks": [] + } + ], + "name": "Xncm" + } +] + + +data = { + 'pages': old +} + + +child_aliases = ['pages', 'towers', 'blocks'] + +def for_children(e, f): + for child_alias in child_aliases: + if child_alias in e: + for child in e[child_alias]: + f(child) + + +def add_id(e): + e['id'] = str(uuid4()) + for_children(e, add_id) + + +objects = {} +def serialize(e): + result = {p: ([c['id'] for c in e[p]] if p in child_aliases else e[p]) for p in e} + objects[e['id']] = result + for_children(e, serialize) + + +add_id(data) +serialize(data) + +print(json.dumps(objects, indent=2)) diff --git a/store/requirements.txt b/store/requirements.txt new file mode 100644 index 0000000..b57435b --- /dev/null +++ b/store/requirements.txt @@ -0,0 +1,3 @@ +psycopg2==2.8.4 +flask==1.1.1 +uWSGI==2.0.18 diff --git a/store/schema.sql b/store/schema.sql new file mode 100644 index 0000000..3132359 --- /dev/null +++ b/store/schema.sql @@ -0,0 +1,79 @@ +CREATE DATABASE store; +CREATE USER storebackend; + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 12.1 +-- Dumped by pg_dump version 12.3 (Ubuntu 12.3-1.pgdg18.04+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +SET default_tablespace = ''; + +SET default_table_access_method = heap; + +-- +-- Name: latest; Type: TABLE; Schema: public; Owner: storebackend +-- + +CREATE TABLE public.latest ( + userid uuid, + id uuid, + "timestamp" timestamp without time zone +); + + +ALTER TABLE public.latest OWNER TO storebackend; + +-- +-- Name: logins; Type: TABLE; Schema: public; Owner: storebackend +-- + +CREATE TABLE public.logins ( + id uuid, + info text, + "time" timestamp without time zone +); + + +ALTER TABLE public.logins OWNER TO storebackend; + +-- +-- Name: objects; Type: TABLE; Schema: public; Owner: storebackend +-- + +CREATE TABLE public.objects ( + id uuid, + userid uuid, + serialized text +); + + +ALTER TABLE public.objects OWNER TO storebackend; + +-- +-- Name: users; Type: TABLE; Schema: public; Owner: storebackend +-- + +CREATE TABLE public.users ( + id uuid, + enabled boolean +); + + +ALTER TABLE public.users OWNER TO storebackend; + +-- +-- PostgreSQL database dump complete +-- diff --git a/store/server.py b/store/server.py new file mode 100644 index 0000000..adb24a7 --- /dev/null +++ b/store/server.py @@ -0,0 +1,105 @@ +from datetime import datetime + +from db import execute, get_first +from flask import Flask, Response, request + +app = Flask(__name__) + + +def getUserId(): + try: + header = request.headers["Authorization"] + return header.split()[1] + except: + return None + + +@app.route("/", methods=["POST"]) +def register(): + try: + id = request.json["token"] + execute("insert into users(id, enabled) values(%s, true)", (id,)) + return "", 201 + except: + return "", 400 + + +@app.route("/me", methods=["POST"]) +def track(): + try: + execute( + "insert into logins(id, info, time) values(%s, %s, %s)", + (getUserId(), request.user_agent.string, datetime.now()), + ) + return "", 204 + except: + return "", 400 + + +@app.route("/me/root", methods=["PUT"]) +def set_root(): + try: + root_id = request.json["root_id"] + execute( + "insert into latest(id, userID, timestamp) values(%s, %s, %s)", + (root_id, getUserId(), datetime.now()), + ) + return "", 201 + except Exception as e: + return str(e), 400 + + +@app.route("/me/root", methods=["GET"]) +def get_root(): + try: + print(f"get root") + result = get_first( + "select id from latest where userID = %s order by timestamp desc", + (getUserId(),), + ) + if result is None: + return "", 404 + return result[0], 200 + except Exception as e: + return str(e), 400 + + +@app.route("/me/", methods=["POST"]) +def create(id): + try: + payload = request.json["data"] + execute( + "insert into objects(id, userID, serialized) values(%s, %s, %s)", + (id, getUserId(), payload), + ) + return "", 201 + except: + return "", 400 + + +@app.route("/me/", methods=["GET"]) +def read(id): + try: + result = get_first( + "select serialized from objects where userID = %s and id = %s", + (getUserId(), id), + ) + if result is None: + return "", 404 + return result[0], 200 + except: + return "", 400 + + +@app.after_request +def postprocess(response): + response.headers["Access-Control-Allow-Origin"] = "*" + response.headers["Access-Control-Allow-Methods"] = "GET,POST,PUT,DELETE,OPTIONS" + response.headers[ + "Access-Control-Allow-Headers" + ] = "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With" + return response + + +if __name__ == "__main__": + app.run(host="0.0.0.0") diff --git a/store/start-backend.service b/store/start-backend.service new file mode 100644 index 0000000..beb5f86 --- /dev/null +++ b/store/start-backend.service @@ -0,0 +1,11 @@ +[Unit] +Description=Start backend + +[Service] +User=root +Type=oneshot +WorkingDirectory=/home/store +ExecStart=uwsgi --ini /home/store/store.ini + +[Install] +WantedBy=multi-user.target diff --git a/store/store.ini b/store/store.ini new file mode 100644 index 0000000..903a726 --- /dev/null +++ b/store/store.ini @@ -0,0 +1,11 @@ +[uwsgi] +module = server:app + +master = true +processes = 10 + +socket = sockets/store.sock +chmod-socket = 666 +vacuum = true + +die-on-term = true