Commit Graph

68 Commits

Author SHA1 Message Date
Iain Sproat 444d2ca7dd Structured logging (attempt 2) (#1234)
* Revert "Revert "feat(structured logging): implements structured logging for backend (#1217)" (#1227)"

This reverts commit 63e6581162.

* Use pino-http instead of express pino logger
* Use correct reference to knex and do not instantiate HttpLogger prematurely
* Adds missing dependency for pino to webhook-service
* Do not instantiate middleware when passed to express
* Refactor to move logging into shared
* Copy shared packages into dockerfiles
* Build shared workspace in docker build-stage for fileimport & webhook
2022-12-05 14:49:52 +00:00
Iain Sproat a537d34dcc Rate limit all endpoints (#1213)
* Demonstration of bug to test when middleware added
- Adding middleware, even no-op, causes test to fail

* Make middleware async, but introduce delay.
Revert test back to original.

* Revert tests

* Add a 1ms sleep to the test to reduce likelihood of flakiness

* Rate limiting on all express endpoints using middleware

* Adds all configuration for existing rate limited endpoints

* It is helpful to add the package to yarn first

* Implements respectsLimits using Redis rate limiter

* Fix for test `Should rate-limit user creation`
- if rate limit error, post to `/auth/local/register` will return a 429 status code

* All rate limiting provided by new ratelimiter.ts

* Consolidate typescript interfaces

* Amend signature of function to require source to be passed in, and not try to guess it from the request

* Rename respectsLimits to isWithinRateLimits

* Throw within catch of Promise

* Replace rejectsRequestWithRatelimitStatusIfNeeded throughout code

* Sending rate limit response should deal with other types of error
- Sentry notified of the error

* Express middleware rate limits by a 3 second burst or a daily rate
- Provide action when generating 429 response

* Prevent DOS of Redis

* Add 'Retry-After' for all cases when responding with 429 status code
- default of 1 day, but dynamic based on available information

* Generate rate limiters once, on init
- Improved and consistent handling of exit from functions
- fixed environment variable names

* WIP Refactor rate limiting setup

Co-authored-by: Iain Sproat <iainsproat@users.noreply.github.com>

* WIP: fixed references, now runs but tests fail

* Use getSourceFromRequest where possible

* WIP: unit tests for rate limiter

* Unit tests for ratelimiter

* feat(IFC): WIP IFC parser improvements

* Revert "feat(IFC): WIP IFC parser improvements"

This reverts commit 093089a2c4.

* refactor authz, rate limiting middleware to global

Co-authored-by: Kristaps Fabians Geikins <fabis94@users.noreply.github.com>
Co-authored-by: Iain Sproat <iainsproat@users.noreply.github.com>

* invites tests fix

* fix(server ratelimiter): export public interfaces

* Unit test for rate limiter use in memory rate limiter
- in memory rate limiter is configured with zero limit by default

* Fixed #1219 (#1221)

* WIP: improve auth test for rate limiting user creation

* ci(circleci config): publishing was broken when main branch was tagged (i.e. for releases) (#1224)

* Gitignore CPU profiles

* All tests are  now passing locally

* Fixed an issue in the frontend which was causing the views not to work. Fixed an issue with object selection camera animation where the dolly lerp factor was much too high for smooth animation (#1225)

* feat(structured logging): implements structured logging for backend (#1217)

* each log line is a json object
* structured logging allows logs to be ingested by machines and the logs to be indexed and queried addresses #1105
* structured logging allows arbitrary properties to be appended to each log line, and ingestion of logs to remain robust
* Structured logging provided by `pino` library
* Add `express-pino-logger` dependency
* Remove `debug`, `morgan`, and `morgan-debug` and replace with structured logging
* `console.log` & `console.error` replaced with structured logging in backend
* Remove `DEBUG` environment variable and replace with `LOG_LEVEL`
- Note that there is a test which reads from a logged line on `stdout`. This is not robust, it would be better to use the childProcess.pid to look up the port number.
* Log errors at points we explicitly send error to Sentry
* Amend indentation of a couple of log messages to align indentation with others

* Revert "feat(structured logging): implements structured logging for backend (#1217)" (#1227)

This reverts commit 84cb74e8b3.

* Move error to core/errors
- augmented typescript types moved to type-augmentations

* Added a missing wait in the screenshot generation loop (#1228)

* refactor(server rest api): remove duplicate rate limit requests

* feat(server rate limits): increase rate limits for the upload endpoints

* chore(server rate limits): final cleanup

Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
Co-authored-by: Iain Sproat <iainsproat@users.noreply.github.com>
Co-authored-by: Dimitrie Stefanescu <didimitrie@gmail.com>
Co-authored-by: Kristaps Fabians Geikins <fabis94@users.noreply.github.com>
Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
Co-authored-by: Alexandru Popovici <alexandrupopoviciioan@gmail.com>
2022-11-29 17:06:11 +01:00
Iain Sproat 63e6581162 Revert "feat(structured logging): implements structured logging for backend (#1217)" (#1227)
This reverts commit 84cb74e8b3.
2022-11-25 16:57:28 +00:00
Iain Sproat 84cb74e8b3 feat(structured logging): implements structured logging for backend (#1217)
* each log line is a json object
* structured logging allows logs to be ingested by machines and the logs to be indexed and queried addresses #1105
* structured logging allows arbitrary properties to be appended to each log line, and ingestion of logs to remain robust
* Structured logging provided by `pino` library
* Add `express-pino-logger` dependency
* Remove `debug`, `morgan`, and `morgan-debug` and replace with structured logging
* `console.log` & `console.error` replaced with structured logging in backend
* Remove `DEBUG` environment variable and replace with `LOG_LEVEL`
- Note that there is a test which reads from a logged line on `stdout`. This is not robust, it would be better to use the childProcess.pid to look up the port number.
* Log errors at points we explicitly send error to Sentry
* Amend indentation of a couple of log messages to align indentation with others
2022-11-25 16:05:05 +00:00
Kristaps Fabians Geikins 9860be7fd8 fix: various dependabot vulnerability fixes (#1143)
* fix: updating minimist to resolve vulnerability

* fix: upgrade mocha to fix minimatch vuln

* fix: terser vuln fix

* fix: moment.js vuln fix

* fix: getting rid of perfect toolbar (which resolves vulns)
2022-10-25 17:01:20 +03:00
dependabot[bot] ce2624760c chore(deps): bump undici from 5.5.1 to 5.8.2 (#1142)
Bumps [undici](https://github.com/nodejs/undici) from 5.5.1 to 5.8.2.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](https://github.com/nodejs/undici/compare/v5.5.1...v5.8.2)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-10-25 11:47:40 +01:00
Kristaps Fabians Geikins 5f48ae8086 feat(server): optimized command for importing commits from other servers (#1113) 2022-10-17 10:32:01 +03:00
Kristaps Fabians Geikins 0a58381174 feat: @speckle/shared & some comments fixes (#997) 2022-10-10 16:32:23 +03:00
Kristaps Fabians Geikins db6a3e9367 refactor(server): apollo server v2 -> v3 migration (#1071) 2022-10-06 11:12:16 +03:00
Kristaps Fabians Geikins 1351b6b82a feat(server): fixing double summary emails per week (#1054)
* feat(server task scheduler): sketch out core task scheduler implementation

* feat(server weekly activity digests): add function lock duration to the weekly digest execution

* feat(server scheduled tasks): add scheduled tasks type definition, db schema and migration

* feat(server scheduled tasks): add scheduled tasks repository

* feat(server task scheduler): add task scheduler service implementation

* chore(server deps): add mocha type definitions

* refactor(server scheduled tasks): refactor scheduled tasks migration

* refactor(server scheduled tasks): refactor scheduled task db schema and type definitions

* feat(server scheduled tasks): implement db side lock acquire

* refactor(server scheduled tasks): refactor task scheduler with lock on query mechanism

* test(server scheduled tasks): add tests for scheduled tasks implementation

* refactor(server weekly activity digests): refactor to new task scheduler implementation

* feat(server weekly activity digest): switch to a 1000 seconds trigger period for testing purposes

* fix(server task scheduler): fix not catching lock acquire function errors

Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
2022-10-04 16:11:01 +02:00
Kristaps Fabians Geikins 3da39a7b11 refactor(server): User.streams only returns discoverable streams for non-owners (#1002) 2022-09-22 12:21:06 +03:00
Gergő Jedlicska d1d5984e30 gergo/summaryEmails (#979)
* refactor(server emails): email transports module refactor to TypeScript

* refactor(docker-compose deps): move local email server to common dev compose file

* chore(server launch.json): add ts-node script running example

* chore(server deps): add nodemailer types package

* refactor(server activitystream): add strongly typed activity definitions

* feat(server activitystream): add activity repository

* feat(server info): add canonical url on the service level

* feat(server): add static file serving route to server core

* feat(server): add dependencies for periodical email digests

* feat(server activity stream): call the initialization step from the activity stream module

* feat(server activity digest): add WIP weekly email digest implementation

* feat(server digest email): smul upgrades and fixes to the email template and its contents

* just for Fabs to test

* chore(root package.json): remove deleted docker-compose references

* feat(frontend profile): add notification preferences panel

* feat(server digest emails): set prod ready cron tab and timespan

* refactor(server email digest): move templates into the email module

* refactor(server activity digests): refactor to use notifications infrastructure

* test(server activities): add tests and some refactor to activities and notification preferences

* refactor(notification preferences): fix minor issues

* test(server notification preferences test): fix describe nesting

* fix(server activities): add missing action types

* fix(server activities): fix errors after merging main

* test(server activity notifications): add test coverage for activity notifications service

* refactor(server activities): fixing tests and some cleanup

* feat(server cli): add summary notification command to cli

* chore(dev env db versions): upgrade local dev env versions

* chore(server deps): upgrade local dev db to pg 14

* fix(docker-compose): bind maildev to localhost

* process-scoped notifications test queues

* test(activity tests): add  sleep to fix flaky CI

* feat(activity digests): add demo date for digest trigger

* feat(activity digest): add UK timezone trigger date

Co-authored-by: Iain Sproat <68657+iainsproat@users.noreply.github.com>
Co-authored-by: Fabians <fabis94@live.com>
2022-09-09 12:46:57 +02:00
Kristaps Fabians Geikins ecb9f825bb refactor: email verification flow & email template (#967) 2022-08-31 17:11:19 +03:00
Kristaps Fabians Geikins 774176246e feat: pretty password reset email + bugfixes (#939) 2022-08-24 11:59:30 +03:00
Kristaps Fabians Geikins af45fc2742 feat(server): notify on comment mention + notifications API (#933) 2022-08-19 10:27:48 +03:00
Kristaps Fabians Geikins 0427f5cfd1 feat(server): new base email template + implementation for invites emails (#903)
Co-authored-by: Dimitrie Stefanescu <didimitrie@gmail.com>
2022-08-11 11:00:01 +03:00
Kristaps Fabians Geikins b966f20fdb refactor(server): typescript support (#874)
Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
2022-08-04 14:21:39 +02:00
Gergő Jedlicska ed458fb619 Add blob storage backend (#802)
* feat(server): add server authz pipeline rework first sketch

* feat(server authz): add new server authz middleware poc implementation

* test(server authz): add unittests for the new server authz workflow

* feat(wip rework of fileuploads vs blob storage): add basim impl of separate blob storage service

* feat(fileimport service): refactored file import service to utilize the new asssetstorage service

* refactor(server errors): refactor server errors to use the shared module definitions

Now all the errors inherit from BaseError

* refactor(fileimport service): cleanup after refactor

* feat(frontend fileimports): use the new blob storage for downloading the original file

* refactor(server fileimports): clean up the remnants of S3 storage from file imports

* refactor(server authz): centralize generic authz pipeline configs

* refactor(server blob storage): refactor / rename everything to use the `blob-storage` name

* ci(circleci): add s3 objectstorage environment variables

* ci(circleci): fix missing env variables

* ci(circleci): add minio test container

* ci(circleci): fix minio app startup

* ci(circleci): enable circleci remote docker

* ci(circleci): fix minio startup

* ci(cirleci): detach and wait properly for minio to start

* ci(circleci): revert to additional minio img config, it only fails when the container is stopped ?!

* ci(circleci): disable file uploads

* fix(fileimports): update with blob storage refactor leftovers

* feat(server blob storage): add blob storage graphql api

* refactor(server errors): merge new errors to shared module

* fix(server comments rte): fix import for RTE error

* chore(fileimports): remove node-fetch from dependency

* chore(server): remove body parser dependency

* fix(server blob storage): fix gql api

* fix(frontend): fix fileupload item not loading the new upload status, cause of premature event fire

* feat(server blob storage): fix file size limit and allow for public streams

* Update packages/server/modules/blobstorage/graph/schemas/blobstorage.graphql

Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>

* chore(blobstorage): fix PR review issues

* fix(server): fix import bugs

Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com>
2022-06-16 11:31:03 +02:00
Fabians 1b963ee44d feat: smart text editor & integration into stream comments 2022-06-10 16:46:57 +03:00
Gergő Jedlicska 1d8ffac57a update knex dependency chain (#776)
* chore(root): update packages

* chore(server + preview service): add pg-query-stream peer dependency

* build(dockerfiles): unify and update docker base layer to latest node lts
2022-06-01 10:25:09 +02:00
Gergő Jedlicska 1c234a86b2 gergo/hotfixes (#785)
* ci(circleci): publish npm packages with the implicit default `latest` tag

* feat(helm chart): add a conditional flag for creating k8s namespace in the helm chart

* fix(server package.json): fix cross-env variable string naming

fix #780
2022-05-30 19:40:20 +02:00
Kristaps Fabians Geikins e5880e73f2 feat(backend): comment reply text xss fix (#761)
* feat(backend): comment reply text xss fix

* fix(root): pre-commit npx to yarn

* chore(server): added test
2022-05-23 17:44:28 +03:00
Gergő Jedlicska 638969cd01 gergo/yarn (#753)
* yarn first go

* fix frontend build cache loader

* yarn workspaces built server Docker

* build(yarn): add workspaces plugin config

* chore(package defs): clean package*.json -s

* chore(gitignore): ignore yarn error log

* build(yarn): update yarn lock

* build(preview-service webpack): add extra resolved path to preview service webpack config

because of yarn package hoisting, there are no package level node_modules folder anymore.

* build(docker): update dockerignore with yarn specific configs

* build(docker): update Dockerfiles for yarn workspaces utilization

* ci(circleci): update server test job to yarn

* ci(circle): disable cache restore

* ci(circleci): trying the node orb yarn-run

* ci(circleci): yarn-run again

* ci(circleci): disable node orb

* ci(circleci): change base node image for tests

* ci(circleci): add yarn cache

* ci(circleci): remove node install step

* ci(circleci): add server specific cache archives

* ci(circleci): test build and publish

* ci(circleci): change npm auth method to suit yarn

* ci(circleci): trying new builder image

* ci(circleci): another base image, maybe this works

* ci(circleci): force a specific docker engine version

* ci(circleci): add yarn version plugin and its changes

* ci(circleci): cleanup and remove temp branch config

* chore(package defs): moving from npm run to yarn

* explicitly specifying webpack4 as a frontend dep

* chore(package defs): replace npm with yarn everywhere

* docs(root readme): update with some yarn specific docs

* chore(root workspace): update dev scripts and package lock

* ci(circleci): enable package publish step with yarn

Co-authored-by: Fabians <fabis94@live.com>
2022-05-19 19:53:07 +02:00
Gergő Jedlicska bd543ed38e refactor(server): completely remove app-root-path package 2022-05-03 15:36:18 +02:00
Gergő Jedlicska 0ac118e05c (refactor) server for less app-root-path 2022-05-03 13:10:00 +02:00
AlexandruPopovici 48e085ceaf Revert "chore(release): publish to npm. Done by mistake with lerna"
This reverts commit 8b974d0db5.
2022-04-30 17:48:02 +03:00
AlexandruPopovici 8b974d0db5 chore(release): publish to npm
[skip ci]

 - @speckle/fileimport-service@2.3.17
 - @speckle/frontend@2.3.17
 - @speckle/objectloader@2.4.3
 - @speckle/preview-service@2.4.3
 - @speckle/server@2.3.17
 - @speckle/viewer-sandbox@1.0.1
 - @speckle/viewer@2.4.3
 - @speckle/webhook-service@2.3.17
2022-04-29 12:54:26 +03:00
Cristian Balas 62824ea0bd more server prometheus monitoring (#732) 2022-04-29 00:39:32 +03:00
CI f5573dd59b chore(release): publish %v [skip ci]
- @speckle/fileimport-service@2.3.17-alpha.2889
 - @speckle/frontend@2.3.17-alpha.2889
 - @speckle/objectloader@2.3.17-alpha.2889
 - @speckle/preview-service@2.3.17-alpha.2889
 - @speckle/server@2.3.17-alpha.2889
 - @speckle/viewer@2.3.17-alpha.2889
 - @speckle/webhook-service@2.3.17-alpha.2889
2022-04-07 18:36:41 +00:00
CI ae1bae65de chore(release): publish %v [skip ci]
- @speckle/fileimport-service@2.3.17-alpha.2878
 - @speckle/frontend@2.3.17-alpha.2878
 - @speckle/objectloader@2.3.17-alpha.2878
 - @speckle/preview-service@2.3.17-alpha.2878
 - @speckle/server@2.3.17-alpha.2878
 - @speckle/viewer@2.3.17-alpha.2878
 - @speckle/webhook-service@2.3.17-alpha.2878
2022-04-07 18:22:45 +00:00
CI 826d4546ec chore(release): publish %v [skip ci]
- @speckle/fileimport-service@2.3.17-alpha.2867
 - @speckle/frontend@2.3.17-alpha.2867
 - @speckle/objectloader@2.3.17-alpha.2867
 - @speckle/preview-service@2.3.17-alpha.2867
 - @speckle/server@2.3.17-alpha.2867
 - @speckle/viewer@2.3.17-alpha.2867
 - @speckle/webhook-service@2.3.17-alpha.2867
2022-04-07 18:11:38 +00:00
CI 7e06f4b96c chore(release): publish %v [skip ci]
- @speckle/fileimport-service@2.3.17-alpha.2856
 - @speckle/frontend@2.3.17-alpha.2856
 - @speckle/objectloader@2.3.17-alpha.2856
 - @speckle/preview-service@2.3.17-alpha.2856
 - @speckle/server@2.3.17-alpha.2856
 - @speckle/viewer@2.3.17-alpha.2856
 - @speckle/webhook-service@2.3.17-alpha.2856
2022-04-07 17:53:00 +00:00
CI 963750e64a chore(release): publish %v [skip ci]
- @speckle/fileimport-service@2.3.17-alpha.2844
 - @speckle/frontend@2.3.17-alpha.2844
 - @speckle/objectloader@2.3.17-alpha.2844
 - @speckle/preview-service@2.3.17-alpha.2844
 - @speckle/server@2.3.17-alpha.2844
 - @speckle/viewer@2.3.17-alpha.2844
 - @speckle/webhook-service@2.3.17-alpha.2844
2022-04-07 16:14:33 +00:00
Gergő Jedlicska 55f658b04e Merge branch 'main' of github.com:specklesystems/speckle-server into CI/lernaPublish 2022-04-07 18:12:27 +02:00
CI cb03a52104 chore(release): publish %v [skip ci]
- @speckle/fileimport-service@2.3.17-alpha.2830
 - @speckle/frontend@2.3.17-alpha.2830
 - @speckle/objectloader@2.3.17-alpha.2830
 - @speckle/preview-service@2.3.17-alpha.2830
 - @speckle/server@2.3.17-alpha.2830
 - @speckle/viewer@2.3.17-alpha.2830
 - @speckle/webhook-service@2.3.17-alpha.2830
2022-04-07 15:58:04 +00:00
Fabians 084cf1585e chore: adding node version checks + migrating server lock back to new format 2022-04-07 13:05:25 +03:00
Matteo Cominetti 8b7f539427 feat: removes matomo & changes some CI/CD settings (#670) 2022-04-06 15:58:05 +03:00
Kristaps Fabians Geikins aeeb88340d feat: favoriting streams #620 (#633) 2022-03-29 16:30:49 +03:00
Cristian Balas 5871339a18 Improve express error handling and monitoring (#641) 2022-03-29 13:41:58 +03:00
Kristaps Fabians Geikins 1995b9f09b bringing back junit reporter 2022-03-21 16:02:14 +02:00
Kristaps Fabians Geikins b157a98901 feat(server): simplified test running & IDE integrations 2022-03-16 17:31:53 +02:00
Kristaps Fabians Geikins 8010bf3c4c feat: Standardized & cleaned up formatting & linting across repo #617 (#618)
* feat: Standardized & cleaned up formatting & linting across repo

Co-authored-by: Kristaps Fabians Geikins <fabians@speckle.systems>
Co-authored-by: Gergő Jedlicska <gergo@jedlicska.com>
2022-03-16 10:10:30 +02:00
Cristian Balas 68908525c0 depndency upgrades (#598) 2022-02-17 21:34:53 +02:00
Cristian Balas 9329265708 Upgrade dependencies (#577) 2022-02-07 14:04:26 +02:00
Gergő Jedlicska 8bdb3062f4 rename the new discord bot 2022-01-20 11:37:10 +01:00
Cristian Balas 019b7ac495 Service health (#516)
* health checks, sigterm handling for all services
2022-01-12 15:18:32 +02:00
Gergő Jedlicska 887678a441 chore(server): npm test script forces empty PG user 2021-12-07 11:43:44 +01:00
Gergő Jedlicska 9431099877 ci((server) ci config): running the server in CI with a random port (0) 2021-11-06 14:29:17 +01:00
Gergő Jedlicska 3e5910dcb8 chore(lock files): fix lockfile versioning and some minor chores 2021-11-02 10:48:35 +01:00
Gergő Jedlicska db7694d7c9 build((server) test reporting): add CircleCI test reporting from mocha 2021-10-14 16:49:31 +02:00