diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index 1d2aef77e..595c9d584 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -1,25 +1,9 @@
---
-name: 🐛 Bug report
-about: Create a report to help us improve
+name: 🐛 Bug Report
+about: Create a report to help us to improve.
labels: bug
title: 🐛 [Bug]
---
-## :bug: Bugreport
+## :bug: Bug Report
-
-### Steps to reproduce the behavior
-1.
-2.
-3.
-4. ...
-5. Profit
-
-### Expected behavior
-
-
-### Version & Environment
-
-
-### Additional context
-
diff --git a/.github/ISSUE_TEMPLATE/devops_ticket.md b/.github/ISSUE_TEMPLATE/devops_ticket.md
index 77355d1cf..115664911 100644
--- a/.github/ISSUE_TEMPLATE/devops_ticket.md
+++ b/.github/ISSUE_TEMPLATE/devops_ticket.md
@@ -1,24 +1,9 @@
---
-name: 💥 DevOps ticket
-about: Help us manage our deployed App.
+name: 💥 DevOps Ticket
+about: Help us manage our deployed app.
labels: devops
title: 💥 [DevOps]
---
-## 💥 DevOps ticket
+## 💥 DevOps Ticket
-
-### Motive
-
-
-### Related issues
-
-
-### Implementation
-
-
-### Validation
-
-
-### Additional context
-
diff --git a/.github/ISSUE_TEMPLATE/epic.md b/.github/ISSUE_TEMPLATE/epic.md
new file mode 100644
index 000000000..cf72cd673
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/epic.md
@@ -0,0 +1,12 @@
+---
+name: 🌟 Epic
+about: Define a big development step.
+labels: epic
+title: 🌟 [EPIC]
+---
+
+
+
+## 🌟 EPIC
+
diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md
index ef3b30be2..beae80901 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.md
+++ b/.github/ISSUE_TEMPLATE/feature_request.md
@@ -1,24 +1,9 @@
---
-name: 🚀 Feature request
-about: Suggest an idea for this project
+name: 🚀 Feature Request
+about: Suggest an idea for this project.
labels: feature
title: 🚀 [Feature]
---
-## :rocket: Feature
+## :rocket: Feature Request
-
-### User Problem
-
-
-### Implementation
-
-
-### Design & Layout
-
-
-### Validation
-
-
-### Additional context
-
diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
index aabbc0f0a..40e6e381b 100644
--- a/.github/ISSUE_TEMPLATE/question.md
+++ b/.github/ISSUE_TEMPLATE/question.md
@@ -1,12 +1,12 @@
---
name: 💬 Question
-about: If you need help understanding HumanConnection.
+about: If you need help understanding ocelot.social.
labels: question
title: 💬 [Question]
---
-
-
+
+
-## :speech_balloon: Question
+## 💬 Question
diff --git a/.github/ISSUE_TEMPLATE/refactor_tickets.md b/.github/ISSUE_TEMPLATE/refactor_tickets.md
index b595abd5d..d1841e35e 100644
--- a/.github/ISSUE_TEMPLATE/refactor_tickets.md
+++ b/.github/ISSUE_TEMPLATE/refactor_tickets.md
@@ -1,21 +1,10 @@
---
-name: 🔧 Refactor ticket
+name: 🔧 Refactor
about: Help us improve our code by refactoring it.
labels: refactor
title: 🔧 [Refactor]
---
-## :zap: Refactor ticket
+## 🔧 Refactor
-### Motive
-
-
-### Related issues
-
-
-### Implementation
-
-
-### Additional context
-
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
new file mode 100644
index 000000000..c5433c921
--- /dev/null
+++ b/.github/dependabot.yml
@@ -0,0 +1,179 @@
+version: 2
+updates:
+- package-ecosystem: npm
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: cypress
+ versions:
+ - 6.3.0
+ - 6.4.0
+ - 6.5.0
+ - 6.6.0
+ - 6.7.1
+ - 6.8.0
+ - 7.0.0
+ - 7.0.1
+ - 7.1.0
+ - dependency-name: cypress-cucumber-preprocessor
+ versions:
+ - 4.0.0
+ - 4.0.1
+ - 4.0.3
+ - dependency-name: date-fns
+ versions:
+ - 2.16.1
+ - 2.17.0
+ - 2.18.0
+ - 2.19.0
+ - 2.20.0
+ - 2.20.1
+ - 2.20.2
+ - 2.20.3
+ - 2.21.0
+ - dependency-name: cypress-file-upload
+ versions:
+ - 5.0.2
+ - 5.0.3
+ - 5.0.4
+ - 5.0.5
+ - dependency-name: neo4j-driver
+ versions:
+ - 4.2.2
+- package-ecosystem: npm
+ directory: "/backend"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: y18n
+ versions:
+ - 4.0.1
+ - 4.0.2
+ - dependency-name: metascraper-publisher
+ versions:
+ - 5.16.16
+ - 5.18.1
+ - 5.18.12
+ - 5.18.2
+ - 5.18.4
+ - 5.18.5
+ - 5.18.6
+ - 5.18.9
+ - 5.20.0
+ - 5.21.0
+ - 5.21.2
+ - 5.21.3
+ - 5.21.4
+ - 5.21.5
+ - dependency-name: metascraper-author
+ versions:
+ - 5.16.16
+ - 5.18.1
+ - 5.18.12
+ - 5.18.2
+ - 5.18.4
+ - 5.18.5
+ - 5.18.6
+ - 5.18.9
+ - 5.20.0
+ - 5.21.0
+ - 5.21.2
+ - 5.21.3
+ - 5.21.4
+ - 5.21.5
+ - dependency-name: neo4j-driver
+ versions:
+ - 4.2.2
+ - dependency-name: neo4j-graphql-js
+ versions:
+ - 2.19.1
+ - dependency-name: mustache
+ versions:
+ - 4.1.0
+- package-ecosystem: npm
+ directory: "/webapp"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: nuxt
+ versions:
+ - 2.14.12
+ - 2.15.0
+ - 2.15.1
+ - 2.15.2
+ - 2.15.3
+ - dependency-name: v-tooltip
+ versions:
+ - 2.1.2
+ - dependency-name: "@vue/server-test-utils"
+ versions:
+ - 1.1.2
+ - 1.1.3
+ - dependency-name: node-notifier
+ versions:
+ - 8.0.1
+- package-ecosystem: docker
+ directory: "/webapp"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: node
+ versions:
+ - ">= 15.5.a, < 15.6"
+ - dependency-name: node
+ versions:
+ - 15.10.0.pre.alpine3.10
+ - 15.11.0.pre.alpine3.10
+ - 15.12.0.pre.alpine3.10
+ - 15.13.0.pre.alpine3.10
+ - 15.7.0.pre.alpine3.10
+ - 15.8.0.pre.alpine3.10
+ - 15.9.0.pre.alpine3.10
+- package-ecosystem: docker
+ directory: "/backend"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: node
+ versions:
+ - ">= 15.4.a, < 15.5"
+ - dependency-name: node
+ versions:
+ - ">= 15.5.a, < 15.6"
+ - dependency-name: node
+ versions:
+ - 15.10.0.pre.alpine3.10
+ - 15.11.0.pre.alpine3.10
+ - 15.12.0.pre.alpine3.10
+ - 15.13.0.pre.alpine3.10
+ - 15.7.0.pre.alpine3.10
+ - 15.8.0.pre.alpine3.10
+ - 15.9.0.pre.alpine3.10
+- package-ecosystem: docker
+ directory: "/neo4j"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: neo4j
+ versions:
+ - 4.2.3
+ - 4.2.4
+- package-ecosystem: docker
+ directory: "/deployment/legacy-migration/maintenance-worker"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 24350a81a..1c7927665 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -4,6 +4,7 @@ on:
push:
branches:
- master
+ # - 4451-new-deployment-with-base-and-code # for testing while developing
jobs:
##############################################################################
@@ -55,9 +56,9 @@ jobs:
# NEO4J ##################################################################
##########################################################################
- name: Neo4J | Build `community` image
- run: |
- docker build --target community -t "ocelotsocialnetwork/neo4j:latest" -t "ocelotsocialnetwork/neo4j:community" -t "ocelotsocialnetwork/neo4j:${VERSION}" -t "ocelotsocialnetwork/neo4j:${BUILD_VERSION}" neo4j/
- docker save "ocelotsocialnetwork/neo4j" > /tmp/neo4j.tar
+ run: docker build --target community -t "ocelotsocialnetwork/neo4j:latest" -t "ocelotsocialnetwork/neo4j:community" -t "ocelotsocialnetwork/neo4j:${VERSION}" -t "ocelotsocialnetwork/neo4j:${BUILD_VERSION}" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT neo4j/
+ - name: Neo4J | Save docker image
+ run: docker save "ocelotsocialnetwork/neo4j" > /tmp/neo4j.tar
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
@@ -91,10 +92,13 @@ jobs:
##########################################################################
# BUILD BACKEND DOCKER IMAGE (production) ################################
##########################################################################
- - name: backend | Build `production` image
+ - name: Backend | Build `production` image
run: |
- docker build --target production -t "ocelotsocialnetwork/backend:latest" -t "ocelotsocialnetwork/backend:${VERSION}" -t "ocelotsocialnetwork/backend:${BUILD_VERSION}" backend/
- docker save "ocelotsocialnetwork/backend" > /tmp/backend.tar
+ docker build --target base -t "ocelotsocialnetwork/backend:latest-base" -t "ocelotsocialnetwork/backend:${VERSION}-base" -t "ocelotsocialnetwork/backend:${BUILD_VERSION}-base" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT backend/
+ docker build --target code -t "ocelotsocialnetwork/backend:latest-code" -t "ocelotsocialnetwork/backend:${VERSION}-code" -t "ocelotsocialnetwork/backend:${BUILD_VERSION}-code" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT backend/
+ docker build --target production -t "ocelotsocialnetwork/backend:latest" -t "ocelotsocialnetwork/backend:${VERSION}" -t "ocelotsocialnetwork/backend:${BUILD_VERSION}" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT backend/
+ - name: Backend | Save docker image
+ run: docker save "ocelotsocialnetwork/backend" > /tmp/backend.tar
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
@@ -128,10 +132,13 @@ jobs:
##########################################################################
# BUILD WEBAPP DOCKER IMAGE (build) ######################################
##########################################################################
- - name: webapp | Build `production` image
+ - name: Webapp | Build `production` image
run: |
- docker build --target production -t "ocelotsocialnetwork/webapp:latest" -t "ocelotsocialnetwork/webapp:${VERSION}" -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}" webapp/
- docker save "ocelotsocialnetwork/webapp" > /tmp/webapp.tar
+ docker build --target base -t "ocelotsocialnetwork/webapp:latest-base" -t "ocelotsocialnetwork/webapp:${VERSION}-base" -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}-base" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/
+ docker build --target code -t "ocelotsocialnetwork/webapp:latest-code" -t "ocelotsocialnetwork/webapp:${VERSION}-code" -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}-code" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/
+ docker build --target production -t "ocelotsocialnetwork/webapp:latest" -t "ocelotsocialnetwork/webapp:${VERSION}" -t "ocelotsocialnetwork/webapp:${BUILD_VERSION}" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/
+ - name: Webapp | Save docker image
+ run: docker save "ocelotsocialnetwork/webapp" > /tmp/webapp.tar
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
@@ -165,11 +172,13 @@ jobs:
##########################################################################
# BUILD MAINTENANCE DOCKER IMAGE (build) #################################
##########################################################################
- - name: maintenance | Build `production` image
- # TODO: --target production
+ - name: Maintenance | Build `production` image
run: |
- docker build -t "ocelotsocialnetwork/maintenance:latest" -t "ocelotsocialnetwork/maintenance:${VERSION}" -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}" webapp/ -f webapp/Dockerfile.maintenance
- docker save "ocelotsocialnetwork/maintenance" > /tmp/maintenance.tar
+ docker build --target base -t "ocelotsocialnetwork/maintenance:latest-base" -t "ocelotsocialnetwork/maintenance:${VERSION}-base" -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-base" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ -f webapp/Dockerfile.maintenance
+ docker build --target code -t "ocelotsocialnetwork/maintenance:latest-code" -t "ocelotsocialnetwork/maintenance:${VERSION}-code" -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}-code" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ -f webapp/Dockerfile.maintenance
+ docker build --target production -t "ocelotsocialnetwork/maintenance:latest" -t "ocelotsocialnetwork/maintenance:${VERSION}" -t "ocelotsocialnetwork/maintenance:${BUILD_VERSION}" --build-arg BBUILD_DATE=$BUILD_DATE --build-arg BBUILD_VERSION=$BUILD_VERSION --build-arg BBUILD_COMMIT=$BUILD_COMMIT webapp/ -f webapp/Dockerfile.maintenance
+ - name: Maintenance | Save docker image
+ run: docker save "ocelotsocialnetwork/maintenance" > /tmp/maintenance.tar
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 276589dc0..2bec6cebb 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -194,7 +194,6 @@ jobs:
##########################################################################
# UNIT TESTS BACKEND #####################################################
##########################################################################
- # TODO: Why do we need those .envs?
- name: backend | copy env files webapp
run: cp webapp/.env.template webapp/.env
- name: backend | copy env files backend
@@ -205,6 +204,17 @@ jobs:
run: docker-compose exec -T backend yarn db:migrate init
- name: backend | Unit test
run: docker-compose exec -T backend yarn test
+ ##########################################################################
+ # COVERAGE CHECK BACKEND #################################################
+ ##########################################################################
+ - name: backend | Coverage check
+ uses: webcraftmedia/coverage-check-action@master
+ with:
+ report_name: Coverage Backend
+ type: lcov
+ result_path: ./coverage/lcov.info
+ min_coverage: 58
+ token: ${{ github.token }}
##############################################################################
# JOB: UNIT TEST WEBAPP ######################################################
@@ -230,9 +240,8 @@ jobs:
- name: Load Docker Image
run: docker load < /tmp/webapp.tar
##########################################################################
- # UNIT TESTS WEBAPP #####################################################
+ # UNIT TESTS WEBAPP ######################################################
##########################################################################
- # TODO: Why do we need those .envs?
- name: backend | copy env files webapp
run: cp webapp/.env.template webapp/.env
- name: backend | copy env files backend
@@ -240,5 +249,93 @@ jobs:
- name: backend | docker-compose
run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp
- name: webapp | Unit tests
- #run: docker run --rm ocelotsocialnetwork/webapp:build yarn run test
- run: docker-compose exec -T webapp yarn test
\ No newline at end of file
+ run: docker-compose exec -T webapp yarn test
+ ##########################################################################
+ # COVERAGE REPORT FRONTEND ################################################
+ ##########################################################################
+ #- name: frontend | Coverage report
+ # uses: romeovs/lcov-reporter-action@v0.2.21
+ # with:
+ # github-token: ${{ secrets.GITHUB_TOKEN }}
+ # lcov-file: ./coverage/lcov.info
+ ##########################################################################
+ # COVERAGE CHECK WEBAPP ##################################################
+ ##########################################################################
+ - name: webapp | Coverage check
+ uses: webcraftmedia/coverage-check-action@master
+ with:
+ report_name: Coverage Webapp
+ type: lcov
+ result_path: ./coverage/lcov.info
+ min_coverage: 65
+ token: ${{ github.token }}
+
+ ##############################################################################
+ # JOB: FULLSTACK TESTS #######################################################
+ ##############################################################################
+ fullstack_tests:
+ name: Fullstack tests
+ runs-on: ubuntu-latest
+ needs: [build_test_webapp, build_test_backend, build_test_neo4j]
+ env:
+ jobs: 8
+ strategy:
+ matrix:
+ # run copies of the current job in parallel
+ job: [1, 2, 3, 4, 5, 6, 7, 8]
+ steps:
+ ##########################################################################
+ # CHECKOUT CODE ##########################################################
+ ##########################################################################
+ - name: Checkout code
+ uses: actions/checkout@v2
+ ##########################################################################
+ # DOWNLOAD DOCKER IMAGES #################################################
+ ##########################################################################
+ - name: Download Docker Image (Neo4J)
+ uses: actions/download-artifact@v2
+ with:
+ name: docker-neo4j-image
+ path: /tmp
+ - name: Load Docker Image
+ run: docker load < /tmp/neo4j.tar
+ - name: Download Docker Image (Backend)
+ uses: actions/download-artifact@v2
+ with:
+ name: docker-backend-test
+ path: /tmp
+ - name: Load Docker Image
+ run: docker load < /tmp/backend.tar
+ - name: Download Docker Image (Webapp)
+ uses: actions/download-artifact@v2
+ with:
+ name: docker-webapp-test
+ path: /tmp
+ - name: Load Docker Image
+ run: docker load < /tmp/webapp.tar
+ ##########################################################################
+ # FULLSTACK TESTS CYPRESS ################################################
+ ##########################################################################
+ - name: webapp | copy env files webapp
+ run: cp webapp/.env.template webapp/.env
+ - name: backend | copy env files backend
+ run: cp backend/.env.template backend/.env
+ - name: backend | docker-compose
+ run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps webapp neo4j backend
+ - name: cypress | Fullstack tests
+ run: |
+ yarn install
+ yarn run cypress:run --spec $(cypress/parallel-features.sh ${{ matrix.job }} ${{ env.jobs }} )
+ ##########################################################################
+ # UPLOAD SCREENSHOTS & VIDEO #############################################
+ ##########################################################################
+ - name: Upload Artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: cypress-screenshots
+ path: cypress/screenshots/
+ - name: Upload Artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: cypress-videos
+ path: cypress/videos/
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 09fbb1478..e7e69342a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,16 +4,85 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
-#### [v0.6.15](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.14...v0.6.15)
+#### [v1.0.4](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.3...v1.0.4)
+- fixed wrong env variable [`#4474`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4474)
+- chore: [WIP] 🍰 New Deployment With 'base' And 'code' Docker Images [`#4452`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4452)
+- feat: 🍰 Flexible Footer Links [`#4468`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4468)
+- docs: 🍰 Correct 'Contribution.md' [`#4466`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4466)
+- docs: 🍰 Correct Discord Links And Divers [`#4461`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4461)
+- Implement flexible page footer links [`1bd4af6`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/1bd4af6fd3b5db167575910948a0a72461a1129a)
+- Implement tests for flexible page footer links [`627a20f`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/627a20f66a65450996a5fe3128fd37769fdfd629)
+- Correct Discord links and divers [`0318910`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/0318910488e245c4a1d09181265de63d05a89cf1)
+
+#### [1.0.3](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.2...1.0.3)
+
+> 19 May 2021
+
+- chore: 🍰 Release v1.0.3 [`#4435`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4435)
+- chore: 🍰 Refactor Logos [`#4433`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4433)
+- feat: 🍰 Show Password Component [`#4370`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4370)
+- chore: 🍰 Replace Ocelot Logos 619x593 With 600x570 [`#4428`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4428)
+- Coverage [`#4393`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4393)
+- correct_docker_tagging [`#4391`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4391)
+- 🍰 Get Cypress Tests Running Again [`#4338`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4338)
+- frontend + backend coverage tests [`#4367`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4367)
+- refactor: 🍰 Refactor E-Mail Templates [`#4350`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4350)
+- feat: 🍰 Remove More-Info Of Post [`#4316`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4316)
+- have cypress running locally - the tests still fail [`e3e0341`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e3e03415e1bd9e0be88f33930a52e63d8af64ee1)
+- have cypress running locally - the tests still fail [`0ec0574`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/0ec05743751cfef0cb86c17b87e9e4ef9a2c9e47)
+- Refactor logos, first step [`ff6cc30`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ff6cc306aff6150a924f1a647387e498d050ea9f)
+
+#### [1.0.2](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.1...1.0.2)
+
+> 6 April 2021
+
+- fix: Email Confirmation-Link When An Invite-Code Is Given [`#4336`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4336)
+- release v1.0.2 [`e583010`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e5830101e4b449905fe2d0018627d75af62b2a20)
+- slider jumps to enter-nonce when link contains invite-code, email and nonce and method is invite-code. Thanks @tirokk [`c80b3a2`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/c80b3a212835f76cfc2f11542345d6c3b226995b)
+- fix enail confirmation link when an invite-code is given [`27f0de9`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/27f0de9464685c8f960bde9d07986fdc5b20f8f9)
+
+#### [1.0.1](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/1.0.0...1.0.1)
+
+> 4 April 2021
+
+- readme_update [`#4331`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4331)
+- jwt_expiretime [`#4330`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4330)
+- Clean env, docker & workflow [`#4337`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4337)
+- fix: 🍰 Fixing The Avatars unwanted Border [`#4320`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4320)
+- Change background color of avatar image to white [`e48a99a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e48a99afe63e96cffafe16db7bf5ae35cfdebd7a)
+- removed config warning [`f6c070a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/f6c070a3cb36c5593123b27b4d1b6a5b7a10aba3)
+- include env files in build process [`dfe6f67`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/dfe6f679b3bb0f440aee986d6d12925cccee9050)
+
+### [1.0.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.15...1.0.0)
+
+> 31 March 2021
+
+- v1.0.0 [`#4321`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4321)
+- fix: 🐛 Fix Wrong Truncation Of Hashtags In Admin List Via Adding 'truncateStr' [`#4314`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4314)
+- feat: 🍰Implement Registration Slider [`#4270`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4270)
+- feat: 🍰 Invite Button [`#4301`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4301)
+- fix: 🍰 Suggestion List Filter [`#4296`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4296)
+- fix: JWT Expires In 2 Years [`#4278`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4278)
+- Deployment [`#4263`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4263)
+- feat: 🍰 Redesign Registration Process Frontend [`#4168`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4168)
+- Delete unnecessary code [`3fa7e04`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/3fa7e04d4895161db1f764ccad58e35188c9d065)
+- basic invite button in frontend [`356f026`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/356f02622655a57561fcdecfcc8a735d23cac79f)
+- setting up invite button [`e6dc3f4`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/e6dc3f42cedaf9953d737cf30cf7ed317b634be7)
+
+#### [0.6.15](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.14...0.6.15)
+
+> 1 March 2021
+
+- feat: Count Post Teaser Views [`#4255`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4255)
- feat: 🍰 Count Post Clicks [`#4248`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4248)
- Correct version style [`#4218`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4218)
- dashboard restructuring image [`#4266`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4266)
- fix: 🐛 Adapted Editor List Styles [`#4239`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4239)
- fix: Scrolling On Profile Page [`#4234`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4234)
+- release 0.6.15 [`ef4265d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/ef4265d9387d94aa09db2b80461c2ec90b4623ae)
- count views of post teaser [`1c3f628`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/1c3f628fb2e161400319b32da274952c1b57836e)
- tests fixed for clickedCount [`96066ea`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/96066eae02e659a00bce280f9f97a28ac1446ce0)
-- add clickedCount to PostTeaser [`d3eafc9`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/d3eafc9b69c70e31021c6e2723bd5bcfa6b9d17f)
#### [0.6.14](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.13...0.6.14)
@@ -99,21 +168,11 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
- file upload: refactored [`650e83f`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/650e83f4c250389477933a2e7d21d8245b0ce882)
- change user role: tests are working [`14dfe2a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/14dfe2ae2cd4a24c06c9229893b33586dfceae4f)
-#### [0.6.5](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.6.4...0.6.5)
+#### [0.6.5](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.4...0.6.5)
> 8 February 2021
-- - adjusted changelog to ocelot-social repo [`9603882`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9603882edebf8967e05abfa94e4e1ebf452d4e24)
-- - first steps towards docker image deployment & github autotagging [`5503216`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5503216ad4a0230ac533042e4a69806590fc2a5a)
-- - deploy structure image [`a60400b`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a60400b4fe6f59bbb80e1073db4def3ba205e1a7)
-
-#### [v0.6.4](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.4...v0.6.4)
-
-> 9 February 2021
-
-- chore(release): 0.6.4 [`8b7570d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/8b7570dc35d0ea431f673a711ac051f1e1320acb)
-- change user roles is working, test fails [`8c3310a`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/8c3310abaf87c0e5597fec4f93fb37d27122c9e7)
-- change user role: tests are working [`f10da4b`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/f10da4b09388fe1e2b85abd53f6ffc67c785d4c1)
+- updated CHANGELOG.md [`9d9075f`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9d9075f2117b2eb4b607e7d59ab18c7e655c6ea7)
#### [0.6.4](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.3...0.6.4)
@@ -123,15 +182,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
- fetch full history [`5ecee4d`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5ecee4d73a92d2e5c5ae971d79848ed27f65a72c)
- don't fail if tag exists (release) [`39c82fc`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/39c82fcb37d5c8e7e78a79288e1ef6280f8d0892)
-#### [0.6.3](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.6.3...0.6.3)
-
-> 8 February 2021
-
-- - adjusted changelog to ocelot-social repo [`9603882`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9603882edebf8967e05abfa94e4e1ebf452d4e24)
-- - fixed changelog [`cf70b12`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/cf70b12ed74011924ea788ab932fc9d7ac0e6bd9)
-- - yarn install to allow yarn auto-changelog [`fc496aa`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/fc496aa04cb7e804da4335da0cb5cda26f874ea2)
-
-#### [v0.6.3](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.0...v0.6.3)
+#### [0.6.3](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/0.6.0...0.6.3)
> 8 February 2021
@@ -140,9 +191,9 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
- feat: 🍰 Allow Only Supported Image File Formats [`#3928`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/3928)
- refactor: Disbale Emoji, Language And Catgeory Filter [`#4193`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4193)
- refactor: Remove Catgeories From Post Teaser [`#4191`](https://github.com/Ocelot-Social-Community/Ocelot-Social/pull/4191)
+- - adjusted changelog to ocelot-social repo [`9603882`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/9603882edebf8967e05abfa94e4e1ebf452d4e24)
- - first steps towards docker image deployment & github autotagging [`5503216`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/5503216ad4a0230ac533042e4a69806590fc2a5a)
- - lots of additional tests [`0ba37aa`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/0ba37aab18f537d722aede7b87fa0b8e79f80e66)
-- - deploy structure image [`a60400b`](https://github.com/Ocelot-Social-Community/Ocelot-Social/commit/a60400b4fe6f59bbb80e1073db4def3ba205e1a7)
#### [0.6.0](https://github.com/Ocelot-Social-Community/Ocelot-Social/compare/v0.6.0...0.6.0)
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index b5f74d879..50d3721d1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -4,31 +4,33 @@ Thank you so much for thinking of contributing to the Human Connection project!
## Getting Set Up
-Instructions for how to install all the necessary software and some code guidelines can be found in our [documentation](https://docs.human-connection.org/human-connection/).
+Instructions for how to install all the necessary software and some code guidelines can be found in our main [Readme](/README.md) or in our [documentation](https://docs.human-connection.org/human-connection/).
-To get you started we recommend that you join forces with a regular contributor. Please join [our discord instance](https://human-connection.org/discord) to chat with developers or just get in touch directly on an issue on either [Github](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues) or [Zenhub](https://app.zenhub.com/workspaces/ocelotsocial-5fb21ff922cb410015dd6535/board?filterLogic=any&repos=301151089):
+To get you started we recommend that you join forces with a regular contributor. Please join [our Discord instance](https://discord.gg/AJSX9DCSUA) to chat with developers or just get in touch directly on an issue on either [Github](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues) or [Zenhub](https://app.zenhub.com/workspaces/ocelotsocial-5fb21ff922cb410015dd6535/board?filterLogic=any&repos=301151089):

-We also have regular pair programming sessions that you are very welcome to join! We feel this is often the best way to get to know both the project and the team. Most developers are also available for spontaneous sessions if the times listed below don't work for you – just ping us on discord.
+We also have regular pair programming sessions that you are very welcome to join! We feel this is often the best way to get to know both the project and the team. Most developers are also available for spontaneous sessions if the times listed below don't work for you – just ping us on Discord.
## Development Flow
We operate in two week sprints that are planned, estimated and prioritised on [Zenhub](https://app.zenhub.com/workspaces/ocelotsocial-5fb21ff922cb410015dd6535/board?filterLogic=any&repos=301151089). All issues are also linked to and synced with [Github](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues). Look for the `good first issue` label if you're not sure where to start!
-We try to discuss all questions directly related to a feature or bug in the respective issue, in order to preserve it for the future and for other developers. We use discord for real-time communication.
+We try to discuss all questions directly related to a feature or bug in the respective issue, in order to preserve it for the future and for other developers. We use Discord for real-time communication.
This is how we solve bugs and implement features, step by step:
+
1. We find an issue we want to work on, usually during the sprint planning but as an open source contributor this can happen at any time.
2. We communicate with the team to see if the issue is still available. (When you comment on an issue but don't get an answer there within 1-2 days try to mention @Human-Connection/hc-dev-team to make sure we check in.)
3. We make sure we understand the issue in detail – what problem is it solving and how should it be implemented?
-4. We assign ourselves to the issue and move it to `In Progress` on [Zenhub](https://app.zenhub.com/workspaces/human-connection-nitro-5c0154ecc699f60fc92cf11f).
+4. We assign ourselves to the issue and move it to `In Progress` on [Zenhub](https://app.zenhub.com/workspaces/ocelotsocial-5fb21ff922cb410015dd6535/board?filterLogic=any&repos=301151089).
5. We start working on it in a `new branch` and open a `pull request` prefixed with `[WIP]` (work in progress) to which we regularly push our changes.
6. When questions come up we clarify them with the team (directly in the issue on Github).
7. When we are happy with our work and our PR is passing all tests we remove the `[WIP]` from the PR description and ask for reviews (if you're not sure who to ask there is @Human-Connection/hc-dev-team which pings all core developers).
8. We then incorporate the suggestions from the reviews into our work and once it has been approved it can be merged into master!
Every pull request needs to:
+
* fix an issue (if there is something you want to work on but there is no issue for it, create one first and discuss it with the team)
* include tests for the code that is added or changed
* pass all tests (linter, backend, frontend, end-to-end)
@@ -38,37 +40,46 @@ Every pull request needs to:
There are many volunteers all around the world helping us build this network and without their contributions we wouldn't be where we are today. Big thank you to all of you!
-You can see the core team behind Human Connection [on our website](https://human-connection.org/en/the-team/). On Github you will mostly run into our developers:
-* Robert (@roschaefer)
-* Matt (@mattwr18)
+You can talk to our core team on [Discord](https://discord.gg/AJSX9DCSUA). And on Github you will mostly run into our core developers:
+
+* Ulf (@ulfgebhardt)
+* Moriz (@Mogge)
* Wolle (@Tirokk)
* Alex (@ogerly)
+
+
## Meetings and Pair Programming Sessions
Times below refer to **German Time** – that's CET (GMT+1) in winter and CEST (GMT+2) in summer – because most Human Connection core team members are living in Germany.
Daily standup
-* every Monday–Friday 11:30
-* in the discord `Conference Room`
+
+* every Monday–Thursday 11:30 am (german time see above 👆🏼)
+* in our [Discord](https://discord.gg/AJSX9DCSUA) `Office Cube`
* all contributors welcome!
* everybody shares what they are working on and asks for help if they are blocked
+
## Philosophy
@@ -102,10 +115,9 @@ We use pair programming sessions as a tool for knowledge sharing. We can learn a
As a volunteeer you have no commitment except your own self development and your awesomeness by contributing to this free and open-source software project. Cheers to you!
-
## Open-Source Bounties
-There are so many good reasons to contribute to Human Connection
+There are so many good reasons to contribute to ocelot.social
* You learn state-of-the-art technologies
* You build your portfolio
@@ -121,7 +133,7 @@ pull request approved and merged for free**. You can choose something really
quick and easy. What's important is starting a working relationship with the
team, learning the workflow, and understanding this contribution guide. You can
filter issues by 'good first issue', to get an idea where to start. Please join
-our our [community chat](https://human-connection.org/discord), too.
+our our [Discord community chat](https://discord.gg/AJSX9DCSUA), too.
You can filter Github issues with label [bounty](https://github.com/Ocelot-Social-Community/Ocelot-Social/issues?q=is%3Aopen+is%3Aissue+label%3Abounty). These issues should have a second label `€
+
+
## License
+
See the [LICENSE](LICENSE.md) file for license rights and limitations (MIT).
diff --git a/backend/.env.template b/backend/.env.template
index fc9766478..5858a5d1e 100644
--- a/backend/.env.template
+++ b/backend/.env.template
@@ -10,6 +10,7 @@ SMTP_USERNAME=
SMTP_PASSWORD=
JWT_SECRET="b/&&7b78BF&fv/Vd"
+JWT_EXPIRES="2y"
MAPBOX_TOKEN="pk.eyJ1IjoiYnVzZmFrdG9yIiwiYSI6ImNraDNiM3JxcDBhaWQydG1uczhpZWtpOW4ifQ.7TNRTO-o9aK1Y6MyW_Nd4g"
PRIVATE_KEY_PASSPHRASE="a7dsf78sadg87ad87sfagsadg78"
@@ -17,6 +18,7 @@ PRIVATE_KEY_PASSPHRASE="a7dsf78sadg87ad87sfagsadg78"
SENTRY_DSN_BACKEND=
COMMIT=
PUBLIC_REGISTRATION=false
+INVITE_REGISTRATION=true
AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
diff --git a/backend/Dockerfile b/backend/Dockerfile
index 2f2b70f04..0ebdfb1eb 100644
--- a/backend/Dockerfile
+++ b/backend/Dockerfile
@@ -1,17 +1,20 @@
##################################################################################
-# BASE ###########################################################################
+# BASE (Is pushed to DockerHub for rebranding) ###################################
##################################################################################
FROM node:12.19.0-alpine3.10 as base
-# ENVs (available in production aswell, can be overwritten by commandline or env file)
+# ENVs
## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame
ENV DOCKER_WORKDIR="/app"
## We Cannot do `$(date -u +'%Y-%m-%dT%H:%M:%SZ')` here so we use unix timestamp=0
-ENV BUILD_DATE="1970-01-01T00:00:00.00Z"
+ARG BBUILD_DATE="1970-01-01T00:00:00.00Z"
+ENV BUILD_DATE=$BBUILD_DATE
## We cannot do $(yarn run version)-${BUILD_NUMBER} here so we default to 0.0.0-0
-ENV BUILD_VERSION="0.0.0-0"
+ARG BBUILD_VERSION="0.0.0-0"
+ENV BUILD_VERSION=$BBUILD_VERSION
## We cannot do `$(git rev-parse --short HEAD)` here so we default to 0000000
-ENV BUILD_COMMIT="0000000"
+ARG BBUILD_COMMIT="0000000"
+ENV BUILD_COMMIT=$BBUILD_COMMIT
## SET NODE_ENV
ENV NODE_ENV="production"
## App relevant Envs
@@ -56,12 +59,18 @@ FROM base as development
CMD /bin/sh -c "yarn install && yarn run dev"
##################################################################################
-# BUILD (Does contain all files and is therefore bloated) ########################
+# CODE (Does contain all code files and is pushed to DockerHub for rebranding) ###
##################################################################################
-FROM base as build
+FROM base as code
-# Copy everything
+# copy everything, but do not build.
COPY . .
+
+##################################################################################
+# BUILD (Does contain all files and the compilate and is therefore bloated) ######
+##################################################################################
+FROM code as build
+
# yarn install
RUN yarn install --production=false --frozen-lockfile --non-interactive
# yarn build
@@ -82,7 +91,6 @@ FROM base as production
# Copy "binary"-files from build image
COPY --from=build ${DOCKER_WORKDIR}/dist ./dist
-COPY --from=build ${DOCKER_WORKDIR}/node_modules ./node_modules
# Copy static files
# TODO - externalize the uploads so we can copy the whole folder
COPY --from=build ${DOCKER_WORKDIR}/public/img/ ./public/img/
@@ -91,4 +99,4 @@ COPY --from=build ${DOCKER_WORKDIR}/public/providers.json ./public/providers.jso
COPY --from=build ${DOCKER_WORKDIR}/package.json ./package.json
# Run command
-CMD /bin/sh -c "yarn run start"
\ No newline at end of file
+CMD /bin/sh -c "yarn run start"
diff --git a/backend/package.json b/backend/package.json
index ff448e293..c923cb0e3 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -1,6 +1,6 @@
{
"name": "ocelot-social-backend",
- "version": "0.6.15",
+ "version": "1.0.4",
"description": "GraphQL Backend for ocelot.social",
"repository": "https://github.com/Ocelot-Social-Community/Ocelot-Social",
"author": "ocelot.social Community",
@@ -15,7 +15,7 @@
"dev": "nodemon --exec babel-node src/ -e js,gql",
"dev:debug": "nodemon --exec babel-node --inspect=0.0.0.0:9229 src/ -e js,gql",
"lint": "eslint src --config .eslintrc.js",
- "test": "cross-env NODE_ENV=test jest --forceExit --detectOpenHandles --runInBand",
+ "test": "cross-env NODE_ENV=test jest --forceExit --detectOpenHandles --runInBand --coverage",
"db:clean": "babel-node src/db/clean.js",
"db:reset": "yarn run db:clean",
"db:seed": "babel-node src/db/seed.js",
@@ -39,6 +39,12 @@
]
},
"dependencies": {
+ "@babel/cli": "~7.8.4",
+ "@babel/core": "~7.9.0",
+ "@babel/node": "~7.8.7",
+ "@babel/plugin-proposal-throw-expressions": "^7.8.3",
+ "@babel/preset-env": "~7.9.5",
+ "@babel/register": "^7.9.0",
"@hapi/joi": "^17.1.1",
"@sentry/node": "^5.15.4",
"apollo-cache-inmemory": "~1.6.5",
@@ -48,12 +54,15 @@
"apollo-server": "~2.14.2",
"apollo-server-express": "^2.14.2",
"aws-sdk": "^2.652.0",
+ "babel-core": "~7.0.0-0",
+ "babel-eslint": "~10.1.0",
+ "babel-jest": "~25.2.6",
"babel-plugin-transform-runtime": "^6.23.0",
"bcryptjs": "~2.4.3",
"cheerio": "~1.0.0-rc.3",
"cors": "~2.8.5",
"cross-env": "~7.0.2",
- "date-fns": "2.11.1",
+ "date-fns": "2.22.1",
"debug": "~4.1.1",
"dotenv": "~8.2.0",
"express": "^4.17.1",
@@ -72,7 +81,7 @@
"languagedetect": "^2.0.0",
"linkifyjs": "~2.1.8",
"lodash": "~4.17.14",
- "merge-graphql-schemas": "^1.7.7",
+ "merge-graphql-schemas": "^1.7.8",
"metascraper": "^5.11.8",
"metascraper-audio": "^5.14.26",
"metascraper-author": "^5.14.22",
@@ -111,16 +120,7 @@
"xregexp": "^4.3.0"
},
"devDependencies": {
- "@babel/cli": "~7.8.4",
- "@babel/core": "~7.9.0",
- "@babel/node": "~7.8.7",
- "@babel/plugin-proposal-throw-expressions": "^7.8.3",
- "@babel/preset-env": "~7.9.5",
- "@babel/register": "^7.9.0",
"apollo-server-testing": "~2.11.0",
- "babel-core": "~7.0.0-0",
- "babel-eslint": "~10.1.0",
- "babel-jest": "~25.2.6",
"chai": "~4.2.0",
"cucumber": "~6.0.5",
"eslint": "~6.8.0",
@@ -134,7 +134,7 @@
"eslint-plugin-standard": "~4.0.1",
"jest": "~25.3.0",
"nodemon": "~2.0.2",
- "prettier": "~2.2.0",
+ "prettier": "~2.3.2",
"rosie": "^2.0.1",
"supertest": "~4.0.2"
},
diff --git a/backend/src/config/index.js b/backend/src/config/index.js
index 47771029b..f3a8fb63c 100644
--- a/backend/src/config/index.js
+++ b/backend/src/config/index.js
@@ -7,9 +7,8 @@ if (require.resolve) {
try {
dotenv.config({ path: require.resolve('../../.env') })
} catch (error) {
- if (error.code === 'MODULE_NOT_FOUND') {
- console.log('WARN: No `.env` file found in `/app` (docker) or `/backend` (no docker)') // eslint-disable-line no-console
- } else {
+ // This error is thrown when the .env is not found
+ if (error.code !== 'MODULE_NOT_FOUND') {
throw error
}
}
@@ -35,13 +34,14 @@ const required = {
const server = {
CLIENT_URI: env.CLIENT_URI || 'http://localhost:3000',
GRAPHQL_URI: env.GRAPHQL_URI || 'http://localhost:4000',
+ JWT_EXPIRES: env.JWT_EXPIRES || '2y',
}
const smtp = {
SMTP_HOST: env.SMTP_HOST,
SMTP_PORT: env.SMTP_PORT,
- SMTP_IGNORE_TLS: env.SMTP_IGNORE_TLS === 'true' || true,
- SMTP_SECURE: env.SMTP_IGNORE_TLS === 'true' || false,
+ SMTP_IGNORE_TLS: env.SMTP_IGNORE_TLS !== 'false', // default = true
+ SMTP_SECURE: env.SMTP_SECURE === 'true',
SMTP_USERNAME: env.SMTP_USERNAME,
SMTP_PASSWORD: env.SMTP_PASSWORD,
}
@@ -82,7 +82,8 @@ const options = {
SUPPORT_URL: links.SUPPORT,
APPLICATION_NAME: metadata.APPLICATION_NAME,
ORGANIZATION_URL: links.ORGANIZATION,
- PUBLIC_REGISTRATION: env.PUBLIC_REGISTRATION === 'true',
+ PUBLIC_REGISTRATION: env.PUBLIC_REGISTRATION === 'true' || false,
+ INVITE_REGISTRATION: env.INVITE_REGISTRATION !== 'false', // default = true
}
// Check if all required configs are present
diff --git a/backend/src/config/links.js b/backend/src/config/links.js
index 494e449ba..6b945a5e0 100644
--- a/backend/src/config/links.js
+++ b/backend/src/config/links.js
@@ -1,6 +1,13 @@
+// this file is duplicated in `backend/src/config/links.js` and `webapp/constants/links.js` and replaced on rebranding
export default {
ORGANIZATION: 'https://ocelot.social',
- DONATE: 'https://ocelot-social.herokuapp.com/donations',
- FAQ: 'https://ocelot.social',
SUPPORT: 'https://ocelot.social',
+
+ // on null or empty strings internal imprint is used, see 'webapp/locales/html/'
+ DONATE: 'https://ocelot-social.herokuapp.com/donations', // we use 'ocelot-social.herokuapp.com' at the moment, because redirections of 'ocelot.social' subpages are not working correctly
+ IMPRINT: 'https://ocelot-social.herokuapp.com/imprint', // we use 'ocelot-social.herokuapp.com' at the moment, because redirections of 'ocelot.social' subpages are not working correctly
+ TERMS_AND_CONDITIONS: null,
+ CODE_OF_CONDUCT: null,
+ DATA_PRIVACY: null,
+ FAQ: 'https://ocelot.social',
}
diff --git a/backend/src/config/logos.js b/backend/src/config/logos.js
new file mode 100644
index 000000000..d093c7b46
--- /dev/null
+++ b/backend/src/config/logos.js
@@ -0,0 +1,10 @@
+// this file is duplicated in `backend/src/config/logos.js` and `webapp/constants/logos.js` and replaced on rebranding
+// this are the paths in the webapp
+export default {
+ LOGO_HEADER_PATH: '/img/custom/logo-horizontal.svg',
+ LOGO_SIGNUP_PATH: '/img/custom/logo-squared.svg',
+ LOGO_WELCOME_PATH: '/img/custom/logo-squared.svg',
+ LOGO_LOGOUT_PATH: '/img/custom/logo-squared.svg',
+ LOGO_PASSWORD_RESET_PATH: '/img/custom/logo-squared.svg',
+ LOGO_MAINTENACE_RESET_PATH: '/img/custom/logo-squared.svg',
+}
diff --git a/backend/src/config/metadata.js b/backend/src/config/metadata.js
index 68d353eea..d40308e80 100644
--- a/backend/src/config/metadata.js
+++ b/backend/src/config/metadata.js
@@ -1,7 +1,9 @@
+// this file is duplicated in `backend/src/config/metadata.js` and `webapp/constants/metadata.js` and replaced on rebranding
export default {
APPLICATION_NAME: 'ocelot.social',
APPLICATION_SHORT_NAME: 'ocelot',
APPLICATION_DESCRIPTION: 'ocelot.social Community Network',
+ COOKIE_NAME: 'ocelot-social-token',
ORGANIZATION_NAME: 'ocelot.social Community',
ORGANIZATION_JURISDICTION: 'City of Angels',
}
diff --git a/backend/src/db/factories.js b/backend/src/db/factories.js
index 717926413..bedf592ed 100644
--- a/backend/src/db/factories.js
+++ b/backend/src/db/factories.js
@@ -105,12 +105,12 @@ Factory.define('user')
})
Factory.define('post')
- .option('categoryIds', [])
+ /* .option('categoryIds', [])
.option('categories', ['categoryIds'], (categoryIds) => {
if (categoryIds.length) return Promise.all(categoryIds.map((id) => neode.find('Category', id)))
// there must be at least one category
return Promise.all([Factory.build('category')])
- })
+ }) */
.option('tagIds', [])
.option('tags', ['tagIds'], (tagIds) => {
return Promise.all(tagIds.map((id) => neode.find('Tag', id)))
@@ -147,16 +147,16 @@ Factory.define('post')
return language || 'en'
})
.after(async (buildObject, options) => {
- const [post, author, image, categories, tags] = await Promise.all([
+ const [post, author, image, /* categories, */ tags] = await Promise.all([
neode.create('Post', buildObject),
options.author,
options.image,
- options.categories,
+ // options.categories,
options.tags,
])
await Promise.all([
post.relateTo(author, 'author'),
- Promise.all(categories.map((c) => c.relateTo(post, 'post'))),
+ // Promise.all(categories.map((c) => c.relateTo(post, 'post'))),
Promise.all(tags.map((t) => t.relateTo(post, 'post'))),
])
if (image) await post.relateTo(image, 'image')
diff --git a/backend/src/db/seed.js b/backend/src/db/seed.js
index 713a03142..7d9b5e954 100644
--- a/backend/src/db/seed.js
+++ b/backend/src/db/seed.js
@@ -137,100 +137,93 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
}),
])
- const [
- peterLustig,
- bobDerBaumeister,
- jennyRostock,
- huey,
- dewey,
- louie,
- dagobert,
- ] = await Promise.all([
- Factory.build(
- 'user',
- {
- id: 'u1',
- name: 'Peter Lustig',
- slug: 'peter-lustig',
- role: 'admin',
- },
- {
- email: 'admin@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u2',
- name: 'Bob der Baumeister',
- slug: 'bob-der-baumeister',
- role: 'moderator',
- },
- {
- email: 'moderator@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u3',
- name: 'Jenny Rostock',
- slug: 'jenny-rostock',
- role: 'user',
- },
- {
- email: 'user@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u4',
- name: 'Huey',
- slug: 'huey',
- role: 'user',
- },
- {
- email: 'huey@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u5',
- name: 'Dewey',
- slug: 'dewey',
- role: 'user',
- },
- {
- email: 'dewey@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u6',
- name: 'Louie',
- slug: 'louie',
- role: 'user',
- },
- {
- email: 'louie@example.org',
- },
- ),
- Factory.build(
- 'user',
- {
- id: 'u7',
- name: 'Dagobert',
- slug: 'dagobert',
- role: 'user',
- },
- {
- email: 'dagobert@example.org',
- },
- ),
- ])
+ const [peterLustig, bobDerBaumeister, jennyRostock, huey, dewey, louie, dagobert] =
+ await Promise.all([
+ Factory.build(
+ 'user',
+ {
+ id: 'u1',
+ name: 'Peter Lustig',
+ slug: 'peter-lustig',
+ role: 'admin',
+ },
+ {
+ email: 'admin@example.org',
+ },
+ ),
+ Factory.build(
+ 'user',
+ {
+ id: 'u2',
+ name: 'Bob der Baumeister',
+ slug: 'bob-der-baumeister',
+ role: 'moderator',
+ },
+ {
+ email: 'moderator@example.org',
+ },
+ ),
+ Factory.build(
+ 'user',
+ {
+ id: 'u3',
+ name: 'Jenny Rostock',
+ slug: 'jenny-rostock',
+ role: 'user',
+ },
+ {
+ email: 'user@example.org',
+ },
+ ),
+ Factory.build(
+ 'user',
+ {
+ id: 'u4',
+ name: 'Huey',
+ slug: 'huey',
+ role: 'user',
+ },
+ {
+ email: 'huey@example.org',
+ },
+ ),
+ Factory.build(
+ 'user',
+ {
+ id: 'u5',
+ name: 'Dewey',
+ slug: 'dewey',
+ role: 'user',
+ },
+ {
+ email: 'dewey@example.org',
+ },
+ ),
+ Factory.build(
+ 'user',
+ {
+ id: 'u6',
+ name: 'Louie',
+ slug: 'louie',
+ role: 'user',
+ },
+ {
+ email: 'louie@example.org',
+ },
+ ),
+ Factory.build(
+ 'user',
+ {
+ id: 'u7',
+ name: 'Dagobert',
+ slug: 'dagobert',
+ role: 'user',
+ },
+ {
+ email: 'dagobert@example.org',
+ },
+ ),
+ ])
await Promise.all([
peterLustig.relateTo(Berlin, 'isIn'),
@@ -561,7 +554,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
const hashtagAndMention1 =
'The new physics of #QuantenFlussTheorie can explain #QuantumGravity! @peter-lustig got that already. ;-)'
const createPostMutation = gql`
- mutation($id: ID, $title: String!, $content: String!, $categoryIds: [ID]) {
+ mutation ($id: ID, $title: String!, $content: String!, $categoryIds: [ID]) {
CreatePost(id: $id, title: $title, content: $content, categoryIds: $categoryIds) {
id
}
@@ -618,7 +611,7 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
const mentionInComment2 =
'Did @peter-lustig tell you?'
const createCommentMutation = gql`
- mutation($id: ID, $postId: ID!, $content: String!) {
+ mutation ($id: ID, $postId: ID!, $content: String!) {
CreateComment(id: $id, postId: $postId, content: $content) {
id
}
diff --git a/backend/src/jwt/encode.js b/backend/src/jwt/encode.js
index 50e439474..baeb62d3d 100644
--- a/backend/src/jwt/encode.js
+++ b/backend/src/jwt/encode.js
@@ -5,7 +5,7 @@ import CONFIG from './../config'
export default function encode(user) {
const { id, name, slug } = user
const token = jwt.sign({ id, name, slug }, CONFIG.JWT_SECRET, {
- expiresIn: '2y',
+ expiresIn: CONFIG.JWT_EXPIRES,
issuer: CONFIG.GRAPHQL_URI,
audience: CONFIG.CLIENT_URI,
subject: user.id.toString(),
diff --git a/backend/src/middleware/email/emailMiddleware.js b/backend/src/middleware/email/emailMiddleware.js
index 1143e3d0f..571b733d5 100644
--- a/backend/src/middleware/email/emailMiddleware.js
+++ b/backend/src/middleware/email/emailMiddleware.js
@@ -43,9 +43,14 @@ if (!hasEmailConfig) {
}
const sendSignupMail = async (resolve, root, args, context, resolveInfo) => {
+ const { inviteCode } = args
const response = await resolve(root, args, context, resolveInfo)
const { email, nonce } = response
- await sendMail(signupTemplate({ email, nonce }))
+ if (inviteCode) {
+ await sendMail(signupTemplate({ email, nonce, inviteCode }))
+ } else {
+ await sendMail(signupTemplate({ email, nonce }))
+ }
delete response.nonce
return response
}
@@ -71,6 +76,5 @@ export default {
AddEmailAddress: sendEmailVerificationMail,
requestPasswordReset: sendPasswordResetMail,
Signup: sendSignupMail,
- SignupByInvitation: sendSignupMail,
},
}
diff --git a/backend/src/middleware/email/templateBuilder.js b/backend/src/middleware/email/templateBuilder.js
index 6e147d752..872b86b29 100644
--- a/backend/src/middleware/email/templateBuilder.js
+++ b/backend/src/middleware/email/templateBuilder.js
@@ -1,10 +1,11 @@
import mustache from 'mustache'
import CONFIG from '../../config'
+import logosWebapp from '../../config/logos.js'
import * as templates from './templates'
const from = CONFIG.EMAIL_DEFAULT_SENDER
-const welcomeImageUrl = new URL(`/img/custom/welcome.svg`, CONFIG.CLIENT_URI)
+const welcomeImageUrl = new URL(logosWebapp.LOGO_WELCOME_PATH, CONFIG.CLIENT_URI)
const defaultParams = {
supportUrl: CONFIG.SUPPORT_URL,
@@ -13,11 +14,18 @@ const defaultParams = {
welcomeImageUrl,
}
-export const signupTemplate = ({ email, nonce }) => {
+export const signupTemplate = ({ email, nonce, inviteCode = null }) => {
const subject = `Willkommen, Bienvenue, Welcome to ${CONFIG.APPLICATION_NAME}!`
- const actionUrl = new URL('/registration/create-user-account', CONFIG.CLIENT_URI)
- actionUrl.searchParams.set('nonce', nonce)
+ // dev format example: http://localhost:3000/registration?method=invite-mail&email=wolle.huss%40pjannto.com&nonce=64853
+ const actionUrl = new URL('/registration', CONFIG.CLIENT_URI)
actionUrl.searchParams.set('email', email)
+ actionUrl.searchParams.set('nonce', nonce)
+ if (inviteCode) {
+ actionUrl.searchParams.set('inviteCode', inviteCode)
+ actionUrl.searchParams.set('method', 'invite-code')
+ } else {
+ actionUrl.searchParams.set('method', 'invite-mail')
+ }
return {
from,
@@ -34,8 +42,8 @@ export const signupTemplate = ({ email, nonce }) => {
export const emailVerificationTemplate = ({ email, nonce, name }) => {
const subject = 'Neue E-Mail Adresse | New E-Mail Address'
const actionUrl = new URL('/settings/my-email-address/verify', CONFIG.CLIENT_URI)
- actionUrl.searchParams.set('nonce', nonce)
actionUrl.searchParams.set('email', email)
+ actionUrl.searchParams.set('nonce', nonce)
return {
from,
@@ -77,7 +85,7 @@ export const wrongAccountTemplate = ({ email }) => {
subject,
html: mustache.render(
templates.layout,
- { actionUrl, supportUrl: CONFIG.SUPPORT_URL, welcomeImageUrl },
+ { ...defaultParams, actionUrl, supportUrl: CONFIG.SUPPORT_URL, welcomeImageUrl },
{ content: templates.wrongAccount },
),
}
diff --git a/backend/src/middleware/email/templates/emailVerification.html b/backend/src/middleware/email/templates/emailVerification.html
index 3fc421dc5..35ce27e5a 100644
--- a/backend/src/middleware/email/templates/emailVerification.html
+++ b/backend/src/middleware/email/templates/emailVerification.html
@@ -7,8 +7,8 @@
@@ -105,8 +105,8 @@
diff --git a/backend/src/middleware/email/templates/resetPassword.html b/backend/src/middleware/email/templates/resetPassword.html
index 1f8c74ded..43c45455e 100644
--- a/backend/src/middleware/email/templates/resetPassword.html
+++ b/backend/src/middleware/email/templates/resetPassword.html
@@ -7,8 +7,8 @@
@@ -105,8 +105,8 @@
diff --git a/backend/src/middleware/email/templates/signup.html b/backend/src/middleware/email/templates/signup.html
index f4155a91e..4bf17fd61 100644
--- a/backend/src/middleware/email/templates/signup.html
+++ b/backend/src/middleware/email/templates/signup.html
@@ -7,8 +7,8 @@
@@ -118,8 +118,8 @@
diff --git a/backend/src/middleware/email/templates/wrongAccount.html b/backend/src/middleware/email/templates/wrongAccount.html
index cab4c91a6..8f17e3335 100644
--- a/backend/src/middleware/email/templates/wrongAccount.html
+++ b/backend/src/middleware/email/templates/wrongAccount.html
@@ -7,8 +7,8 @@
@@ -105,8 +105,8 @@
diff --git a/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js b/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js
index be9039a6f..613bd6b62 100644
--- a/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js
+++ b/backend/src/middleware/hashtags/hashtagsMiddleware.spec.js
@@ -13,7 +13,7 @@ const driver = getDriver()
const neode = getNeode()
const categoryIds = ['cat9']
const createPostMutation = gql`
- mutation($id: ID, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
+ mutation ($id: ID, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
CreatePost(id: $id, title: $title, content: $postContent, categoryIds: $categoryIds) {
id
title
@@ -22,7 +22,7 @@ const createPostMutation = gql`
}
`
const updatePostMutation = gql`
- mutation($id: ID!, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
+ mutation ($id: ID!, $title: String!, $postContent: String!, $categoryIds: [ID]!) {
UpdatePost(id: $id, content: $postContent, title: $title, categoryIds: $categoryIds) {
title
content
@@ -95,7 +95,7 @@ describe('hashtags', () => {
{{ $t('login.no-account') }}
-
And I am a paragraph.
@@ -46,7 +47,7 @@ storiesOf('Generic/BaseCard', module) template: `And I am a paragraph.
diff --git a/webapp/components/_new/generic/UserAvatar/UserAvatar.story.js b/webapp/components/_new/generic/UserAvatar/UserAvatar.story.js index 0748a6266..d4830f09a 100644 --- a/webapp/components/_new/generic/UserAvatar/UserAvatar.story.js +++ b/webapp/components/_new/generic/UserAvatar/UserAvatar.story.js @@ -4,6 +4,7 @@ import StoryRouter from 'storybook-vue-router' import UserAvatar from '~/components/_new/generic/UserAvatar/UserAvatar' import helpers from '~/storybook/helpers' import { user } from '~/components/UserTeaser/UserTeaser.story.js' +import imageFile from './storybook/critical-avatar-white-background.png' helpers.init() const anonymousUser = { @@ -13,45 +14,64 @@ const anonymousUser = { } const userWithoutAvatar = { ...user, - avatar: null, name: 'Ana Paula Nunes Marques', + avatar: null, +} +const userWithAvatar = { + ...user, + name: 'Jochen Image', + avatar: { url: imageFile }, } storiesOf('UserAvatar', module) .addDecorator(withA11y) .addDecorator(helpers.layout) .addDecorator(StoryRouter()) - .add('with image', () => ({ + .add('normal, with image', () => ({ components: { UserAvatar }, data: () => ({ - user, + user: userWithAvatar, }), template: 'Ich bin der Inhalt vom Verhaltenskodex
diff --git a/webapp/locales/html/de/data-privacy.html b/webapp/locales/html/de/data-privacy.html index d8d28577e..3e1cc4d08 100644 --- a/webapp/locales/html/de/data-privacy.html +++ b/webapp/locales/html/de/data-privacy.html @@ -1 +1,3 @@ + +Das hier wäre der Inhalt der Datenschutzbestimmungen
diff --git a/webapp/locales/html/de/faq.html b/webapp/locales/html/de/faq.html new file mode 100644 index 000000000..6b04c72aa --- /dev/null +++ b/webapp/locales/html/de/faq.html @@ -0,0 +1,3 @@ + + +Hier stehen die FAQs
diff --git a/webapp/locales/html/de/imprint.html b/webapp/locales/html/de/imprint.html index dc02c735a..4cd4eafa4 100644 --- a/webapp/locales/html/de/imprint.html +++ b/webapp/locales/html/de/imprint.html @@ -1 +1,3 @@ + +Ich bin das Impressum
diff --git a/webapp/locales/html/de/index.js b/webapp/locales/html/de/index.js index 498bbb866..a97b217d6 100644 --- a/webapp/locales/html/de/index.js +++ b/webapp/locales/html/de/index.js @@ -1,11 +1,13 @@ import termsAndConditions from './terms-and-conditions.html' import codeOfConduct from './code-of-conduct.html' import dataPrivacy from './data-privacy.html' +import faq from './faq.html' import imprint from './imprint.html' export default { termsAndConditions, codeOfConduct, dataPrivacy, + faq, imprint, } diff --git a/webapp/locales/html/de/terms-and-conditions.html b/webapp/locales/html/de/terms-and-conditions.html index a4414ed4b..87bdaf672 100644 --- a/webapp/locales/html/de/terms-and-conditions.html +++ b/webapp/locales/html/de/terms-and-conditions.html @@ -1 +1,3 @@ + +Ich bin der Inhalt der Seite "Nutzungsbedingungen"
diff --git a/webapp/locales/html/en/code-of-conduct.html b/webapp/locales/html/en/code-of-conduct.html index f483d0c74..b6d8ca55a 100644 --- a/webapp/locales/html/en/code-of-conduct.html +++ b/webapp/locales/html/en/code-of-conduct.html @@ -1 +1,3 @@ + +I am the content of the code of conduct
diff --git a/webapp/locales/html/en/data-privacy.html b/webapp/locales/html/en/data-privacy.html index 63b763368..5a6c5d86f 100644 --- a/webapp/locales/html/en/data-privacy.html +++ b/webapp/locales/html/en/data-privacy.html @@ -1 +1,3 @@ + +This would be our data privacy section
diff --git a/webapp/locales/html/en/faq.html b/webapp/locales/html/en/faq.html new file mode 100644 index 000000000..c8a173b37 --- /dev/null +++ b/webapp/locales/html/en/faq.html @@ -0,0 +1,3 @@ + + +Here are the FAQs
diff --git a/webapp/locales/html/en/imprint.html b/webapp/locales/html/en/imprint.html index 56a1b2cf5..03fa2f136 100644 --- a/webapp/locales/html/en/imprint.html +++ b/webapp/locales/html/en/imprint.html @@ -1 +1,3 @@ + +I am the imprint
diff --git a/webapp/locales/html/en/index.js b/webapp/locales/html/en/index.js index 498bbb866..a97b217d6 100644 --- a/webapp/locales/html/en/index.js +++ b/webapp/locales/html/en/index.js @@ -1,11 +1,13 @@ import termsAndConditions from './terms-and-conditions.html' import codeOfConduct from './code-of-conduct.html' import dataPrivacy from './data-privacy.html' +import faq from './faq.html' import imprint from './imprint.html' export default { termsAndConditions, codeOfConduct, dataPrivacy, + faq, imprint, } diff --git a/webapp/locales/html/en/terms-and-conditions.html b/webapp/locales/html/en/terms-and-conditions.html index 62e416b6a..a93ad6642 100644 --- a/webapp/locales/html/en/terms-and-conditions.html +++ b/webapp/locales/html/en/terms-and-conditions.html @@ -1 +1,3 @@ + +I am the content of the page "terms and conditions"
diff --git a/webapp/locales/it.json b/webapp/locales/it.json
index 982f6f871..a9121d184 100644
--- a/webapp/locales/it.json
+++ b/webapp/locales/it.json
@@ -105,7 +105,6 @@
"letsTalk": "Discutiamo",
"loading": "Caricamento in corso",
"loadMore": "Caricare di più",
- "moreInfo": "Ulteriori informazioni",
"name": "Nome",
"organization": "Organizzazione ::: Organizzazioni",
"post": "Messaggio ::: Messaggi",
@@ -123,16 +122,6 @@
"versus": "Verso"
},
"components": {
- "enter-nonce": {
- "form": {
- "description": null,
- "next": null,
- "nonce": null,
- "validations": {
- "length": null
- }
- }
- },
"password-reset": {
"change-password": {
"error": "Modifica della password non riuscita. Forse il codice di sicurezza non era corretto?",
@@ -155,16 +144,23 @@
"success": null,
"title": null
},
+ "email-nonce": {
+ "form": {
+ "description": null,
+ "next": null,
+ "nonce": null,
+ "validations": {
+ "length": null
+ }
+ }
+ },
"signup": {
"form": {
"data-privacy": null,
"description": null,
"errors": {
- "email-exists": null,
- "invalid-invitation-token": "Sembra che l'invito sia già stato utilizzato. I link di invito possono essere utilizzati una sola volta."
+ "email-exists": null
},
- "invitation-code": null,
- "minimum-age": null,
"submit": null,
"success": null,
"terms-and-condition": null
@@ -364,14 +360,6 @@
"unpin": null,
"unpinnedSuccessfully": null
},
- "moreInfo": {
- "description": null,
- "name": "Ulteriori informazioni",
- "title": null,
- "titleOfCategoriesSection": null,
- "titleOfHashtagsSection": null,
- "titleOfRelatedContributionsSection": null
- },
"name": "Messaggio",
"pinned": null,
"takeAction": {
@@ -624,7 +612,7 @@
"faq": null,
"germany": "Germania",
"imprint": "Impressum",
- "made": "Con ❤ fatto",
+ "made": "Con ❤️ fatto",
"register": "numero di registro",
"responsible": "Responsabile ai sensi del § 55 Abs. 2 RStV (Germania)",
"taxident": "Numero di identificazione dell'imposta sul valore aggiunto ai sensi del § 27 a Legge sull'imposta sul valore aggiunto (Germania)",
@@ -645,9 +633,7 @@
}
},
"termsAndConditions": {
- "agree": "Sono d'accordo!",
"newTermsAndConditions": "Nuovi Termini e Condizioni",
- "termsAndConditionsConfirmed": "Ho letto e confermato i Termini e condizioni.",
"termsAndConditionsNewConfirm": "Ho letto e accetto le nuove condizioni generali di contratto.",
"termsAndConditionsNewConfirmText": "Si prega di leggere le nuove condizioni d'uso ora!"
},
diff --git a/webapp/locales/nl.json b/webapp/locales/nl.json
index 1b6b6c6ed..3bf453655 100644
--- a/webapp/locales/nl.json
+++ b/webapp/locales/nl.json
@@ -52,7 +52,6 @@
"letsTalk": "Laten we praten",
"loading": "inlading",
"loadMore": "meer laden",
- "moreInfo": "Meer info",
"name": "Naam",
"organization": "Organisatie ::: Organisaties",
"post": "Bericht ::: Berichten",
@@ -166,7 +165,7 @@
"director": "Directeur",
"germany": "Duitsland",
"imprint": "Afdruk",
- "made": "Met ❤ gemaakt",
+ "made": "Met ❤️ gemaakt",
"register": "inschrijfnummer",
"responsible": "Verantwoordelijk volgens § 55 Abs. 2 RStV (Duitsland).",
"taxident": "Identificatienummer voor de belasting over de toegevoegde waarde overeenkomstig § 27 a Wet op de belasting over de toegevoegde waarde (Duitsland).",
diff --git a/webapp/locales/pl.json b/webapp/locales/pl.json
index 8489609a6..7cb3ee3dc 100644
--- a/webapp/locales/pl.json
+++ b/webapp/locales/pl.json
@@ -67,7 +67,6 @@
"letsTalk": "Porozmawiajmy",
"loading": "załadunek",
"loadMore": "Obciążenie więcej",
- "moreInfo": "Więcej informacji",
"name": "Nazwa",
"organization": "Organization ::: Organizations",
"post": "Poczta ::: Posty",
@@ -83,16 +82,6 @@
"versus": "werset"
},
"components": {
- "enter-nonce": {
- "form": {
- "description": "Otwórz swoją skrzynkę odbiorczą i wpisz kod, który do Ciebie wysłaliśmy.",
- "next": "Kontynuuj",
- "nonce": "Wprowadź swój kod",
- "validations": {
- "length": "musi mieć długość 6 znaków."
- }
- }
- },
"password-reset": {
"change-password": {
"error": "Zmiana hasła nie powiodła się. Może kod bezpieczeństwa nie był poprawny?",
@@ -107,6 +96,18 @@
},
"title": "Zresetuj hasło"
}
+ },
+ "registration": {
+ "email-nonce": {
+ "form": {
+ "description": "Otwórz swoją skrzynkę odbiorczą i wpisz kod, który do Ciebie wysłaliśmy.",
+ "next": "Kontynuuj",
+ "nonce": "Wprowadź swój kod",
+ "validations": {
+ "length": "musi mieć długość 5 znaków."
+ }
+ }
+ }
}
},
"contribution": {
@@ -201,9 +202,6 @@
"delete": "Usuń wpis",
"edit": "Edytuj wpis"
},
- "moreInfo": {
- "name": "Więcej informacji"
- },
"name": "Poczta",
"takeAction": {
"name": "Podejmij działanie"
@@ -352,7 +350,7 @@
"director": "Dyrektor zarządzający",
"germany": "Niemcy",
"imprint": "Nadruk",
- "made": "Z ❤ zrobiony",
+ "made": "Z ❤️ zrobiony",
"register": "numer rejestracyjny",
"responsible": "Odpowiedzialny zgodnie z § 55 Abs. 2 RStV (Niemcy)",
"taxident": "Numer identyfikacyjny podatku od wartości dodanej zgodnie z § 27 a Ustawa o podatku od wartości dodanej (Niemcy)",
diff --git a/webapp/locales/pt.json b/webapp/locales/pt.json
index 6afddc3bb..277fb9e0b 100644
--- a/webapp/locales/pt.json
+++ b/webapp/locales/pt.json
@@ -145,7 +145,6 @@
"letsTalk": "Vamos Conversar",
"loading": "Carregando",
"loadMore": "Carregar mais",
- "moreInfo": "Mais informações",
"name": "Nome",
"organization": "Organização ::: Organizações",
"post": "Postagem ::: Postagens",
@@ -163,16 +162,6 @@
"versus": "Contra"
},
"components": {
- "enter-nonce": {
- "form": {
- "description": "Abra a sua caixa de entrada e digite o código que lhe enviamos.",
- "next": "Continue",
- "nonce": "Digite seu código",
- "validations": {
- "length": "deve ter 6 caracteres"
- }
- }
- },
"password-reset": {
"change-password": {
"error": "A alteração da sua senha falhou. Talvez o código de segurança não estava correto?",
@@ -195,16 +184,23 @@
"success": "A sua conta foi criada!",
"title": "Criar uma conta de usuário"
},
+ "email-nonce": {
+ "form": {
+ "description": "Abra a sua caixa de entrada e digite o código que lhe enviamos.",
+ "next": "Continue",
+ "nonce": "Digite seu código",
+ "validations": {
+ "length": "deve ter 5 caracteres"
+ }
+ }
+ },
"signup": {
"form": {
"data-privacy": "Eu li e entendi o Política de Privacidade.",
"description": "Para começar, digite seu endereço de e-mail:",
"errors": {
- "email-exists": "Já existe uma conta de usuário com este endereço de e-mail!",
- "invalid-invitation-token": "Parece que o convite já foi usado. Os links para convites só podem ser usados uma vez."
+ "email-exists": "Já existe uma conta de usuário com este endereço de e-mail!"
},
- "invitation-code": "O seu código de convite é: {code}",
- "minimum-age": "Tenho 18 anos ou mais.",
"submit": "Criar uma conta",
"success": "Um e-mail com um link para completar o seu registo foi enviado para {email}",
"terms-and-condition": "Eu concordo com os Termos e condições."
@@ -400,14 +396,6 @@
"unpin": "Desafixar publicação",
"unpinnedSuccessfully": "Publicação desafixada com sucesso!"
},
- "moreInfo": {
- "description": "Aqui você pode encontrar mais informações sobre este tópico.",
- "name": "Mais informações",
- "title": "Mais informações",
- "titleOfCategoriesSection": "Categorias",
- "titleOfHashtagsSection": "Hashtags",
- "titleOfRelatedContributionsSection": "Publicações relacionadas"
- },
"name": "Postar",
"pinned": "Anúncio",
"takeAction": {
@@ -659,7 +647,7 @@
"faq": "FAQ",
"germany": "Alemanha",
"imprint": "Impressão",
- "made": "Feito com ❤",
+ "made": "Feito com ❤️",
"register": "número de registo",
"responsible": "Responsável segundo § 55 Abs. 2 RStV (Alemanha) ",
"taxident": "Número de identificação do imposto sobre o valor acrescentado de acordo com o § 27 da Lei do Imposto sobre o Valor Acrescentado (Alemanha)",
@@ -680,9 +668,7 @@
}
},
"termsAndConditions": {
- "agree": "Eu concordo!",
"newTermsAndConditions": "Novos Termos e Condições",
- "termsAndConditionsConfirmed": "Eu li e confirmei os Terms and Conditions.",
"termsAndConditionsNewConfirm": "Eu li e concordo com os novos termos de condições.",
"termsAndConditionsNewConfirmText": "Por favor, leia os novos termos de uso agora!"
},
diff --git a/webapp/locales/ru.json b/webapp/locales/ru.json
index fe2e35969..31a189e02 100644
--- a/webapp/locales/ru.json
+++ b/webapp/locales/ru.json
@@ -98,7 +98,6 @@
"letsTalk": "Давай поговорим",
"loading": "загрузка",
"loadMore": "Загрузить ещё",
- "moreInfo": "Больше информации",
"name": "Имя",
"organization": "Организация ::: Организации ::: Организации",
"post": "Пост ::: Посты ::: Посты",
@@ -116,16 +115,6 @@
"versus": "Против"
},
"components": {
- "enter-nonce": {
- "form": {
- "description": "Откройте папку \\\"Входящие\\\" и введите код из сообщения.",
- "next": "Продолжить",
- "nonce": "Введите код",
- "validations": {
- "length": "длина должна быть 6 символов"
- }
- }
- },
"password-reset": {
"change-password": {
"error": "Смена пароля не удалась. Может быть, код безопасности был неправильным?",
@@ -148,18 +137,23 @@
"success": "Учетная запись успешно создана!",
"title": "Создать учетную запись"
},
+ "email-nonce": {
+ "form": {
+ "description": "Откройте папку \\\"Входящие\\\" и введите код из сообщения.",
+ "next": "Продолжить",
+ "nonce": "Введите код",
+ "validations": {
+ "length": "длина должна быть 5 символов"
+ }
+ }
+ },
"signup": {
"form": {
"data-privacy": "Я прочитал и понял Заявление о конфиденциальности",
"description": "Для начала работы введите свой адрес электронной почты:",
"errors": {
- "email-exists": "Уже есть учетная запись пользователя с этим адресом электронной почты!",
- "invalid-invitation-token": "Похоже, что приглашение уже было использовано. Ссылку из приглашения можно использовать только один раз."
+ "email-exists": "Уже есть учетная запись пользователя с этим адресом электронной почты!"
},
- "invitation-code": "Код приглашения: {code}",
- "minimum-age": "Мне 18 лет или более",
- "no-commercial": "У меня нет коммерческих намерений, и я не представляю коммерческое предприятие или организацию.",
- "no-political": "Я не от имени какой-либо партии или политической организации в сети.",
"submit": "Создать учетную запись",
"success": "Письмо со ссылкой для завершения регистрации было отправлено на {email} ",
"terms-and-condition": "Принимаю Условия и положения."
@@ -266,6 +260,20 @@
"addLetter": "Введите букву",
"noHashtagsFound": "Хэштеги не найдены"
},
+ "legend": {
+ "bold": "Полужирный",
+ "heading3": "Заголовок 3",
+ "heading4": "Заголовок 4",
+ "italic": "Курсив",
+ "legendTitle": "Клавиатурные сокращения и код разметки",
+ "link": "Ссылка",
+ "orderedList": "Нумерованный список",
+ "paragraph": "Параграф",
+ "quote": "Кавычки",
+ "ruler": "Горизонтальная линия",
+ "underline": "Подчеркнутый",
+ "unorderedList": "Маркированный список"
+ },
"mention": {
"noUsersFound": "Пользователи не найдены"
},
@@ -425,14 +433,6 @@
"unpin": "Открепить пост",
"unpinnedSuccessfully": "Пост успешно не закреплено!"
},
- "moreInfo": {
- "description": "Здесь содержится дополнительная информация по теме.",
- "name": "Дополнительная информация",
- "title": "Дополнительная информация",
- "titleOfCategoriesSection": "Категории",
- "titleOfHashtagsSection": "Хэштеги",
- "titleOfRelatedContributionsSection": "Похожие посты"
- },
"name": "Пост",
"pinned": "Объявление",
"takeAction": {
@@ -708,7 +708,7 @@
"faq": "ЧаВо (FAQ)",
"germany": "Германия",
"imprint": "Импрессум",
- "made": "Сделано с ❤",
+ "made": "Сделано с ❤️",
"register": "Регистрационный номер",
"responsible": "ответственный за содержание этой страницы (§ 55 Abs. 2 RStV)",
"taxident": "UST-ID. в соответствии с §27a Закона о налоге с продаж Германии:",
@@ -729,9 +729,7 @@
}
},
"termsAndConditions": {
- "agree": "Я согласен(на)!",
"newTermsAndConditions": "Новые условия и положения",
- "termsAndConditionsConfirmed": "Я прочитал(а) и подтверждаю Условия и положения.",
"termsAndConditionsNewConfirm": "Я прочитал(а) и согласен(на) с новыми условиями.",
"termsAndConditionsNewConfirmText": "Пожалуйста, ознакомьтесь с новыми условиями использования!"
},
diff --git a/webapp/maintenance/source/package.json b/webapp/maintenance/source/package.json
index a639ec418..2fcf86443 100644
--- a/webapp/maintenance/source/package.json
+++ b/webapp/maintenance/source/package.json
@@ -1,6 +1,6 @@
{
"name": "@ocelot-social/maintenance",
- "version": "0.6.3",
+ "version": "1.0.3",
"description": "Maintenance page for ocelot.social",
"repository": "https://github.com/Ocelot-Social-Community/Ocelot-Social",
"author": "ocelot.social Community",
diff --git a/webapp/maintenance/source/pages/index.vue b/webapp/maintenance/source/pages/index.vue
index 59c7d4027..2e2cdfe3b 100644
--- a/webapp/maintenance/source/pages/index.vue
+++ b/webapp/maintenance/source/pages/index.vue
@@ -9,11 +9,7 @@
+
+
Werde aktiv!
-
-
-
-