Compare commits

..
Author SHA1 Message Date
Rainer Killinger f3f6181c29 docs: update changelogs for release
ci: publish release
2026-10-21 10:47:00 +02:00
Rainer Killinger 13e95c96d0 refactor: add angular 20 hotfix 2026-10-21 10:45:12 +02:00
Rainer Killinger ae1cad3bb5 refactor: add changeset for typescript 5.9 2026-10-21 10:35:34 +02:00
Rainer Killinger 93c38b749c refactor: dependency updates 2026-10-20 17:00:52 +02:00
Jovan Krunić 3547ad19f6 fix: news settings filter 2026-10-20 15:43:40 +02:00
Jovan Krunić d5fbd8654c feat: app now requests backend version 4.1.0 2026-10-20 15:24:11 +02:00
Jovan Krunić c9ada93f87 fix: remove expired label from the id cards 2026-10-19 17:33:15 +02:00
Jovan Krunić 6d782ecb10 fix: don't use token param for assessments in prod 2026-10-19 16:18:28 +02:00
Jovan Krunić 1cc3ffedf8 fix: remove assessments cache immediately on user change
Closes #256
2026-10-19 15:59:09 +02:00
Rainer Killinger 05a0525320 refactor: update app licenses mentions 2026-10-19 15:40:11 +02:00
Rainer Killinger 3c08704345 ci: fix publish docs job 2026-10-19 12:54:54 +02:00
Jovan Krunić 6b17416d61 docs: update changelogs for release
ci: publish release
2026-10-19 10:43:27 +02:00
Jovan Krunić 019f80134d refactor: update changesets 2026-10-19 10:40:26 +02:00
Jovan Krunić ba728d551b feat: use only one identity provider
Additionally remove ionic-appauth dependency,
refactor the relevant code and fix some issues.

Closes #245
2026-10-18 16:10:13 +02:00
Jovan Krunić c6dfbd6add fix: use same width as other about pages 2026-10-13 16:12:25 +02:00
Jovan Krunić 27877c6607 fix: flickering in chrome when switching views
Related to #253
2026-10-13 11:57:46 +02:00
Jovan Krunić f552586b50 fix: show calendar label using a proper soft hyphen
Closes #254
2026-10-12 10:36:03 +02:00
Rainer Killinger 4c3f3ef14c fix: app resources:ios script 2026-10-09 16:16:53 +02:00
Rainer Killinger 4c5d529589 docs: update changelogs for release
ci: publish release
2026-10-09 14:13:12 +02:00
Rainer Killinger 09ad903a30 refactor: update changesets 2026-10-09 13:48:01 +02:00
Rainer Killinger a482f0bf0b refactor: update capactior and native sdk projects 2026-10-09 13:48:01 +02:00
Jovan Krunić da81e06bc2 fix: flickering in chrome when switching views
Closes #253
2026-10-09 13:48:00 +02:00
Rainer Killinger 3efd5d4b31 fix: bump critical peer dependencies 2026-10-09 13:48:00 +02:00
Jovan Krunić 3ee036c85e fix: blurred news image background detail in firefox 2026-10-09 13:48:00 +02:00
Jovan Krunić 8cec8bacbe fix: properly show places on the map in detail view
Closes #252
2026-10-09 13:48:00 +02:00
Jovan Krunić 790b10e57b fix: show 3d buildings only when the map is tilted 2026-10-09 13:48:00 +02:00
Rainer Killinger 2a5c8724b1 ci: update app-builder image 2026-10-09 13:47:59 +02:00
Jovan Krunić 4b145f3b2f fix: make gelocation work reliably
Closes #249
2026-10-09 13:47:59 +02:00
Jovan Krunić 2438873fd0 fix: translate service injection
Closes #250
2026-10-09 13:47:59 +02:00
Jovan Krunić fbb42042bf fix: replace deprecated sass import with use rules 2026-10-09 13:47:59 +02:00
Rainer Killinger 209469c6a7 refactor: fix map controlls 2026-10-09 13:47:59 +02:00
Rainer Killinger 736950e064 refactor: id-cards related test 2026-10-09 13:47:59 +02:00
Rainer Killinger 090ec17ccb refactor: upgrade typescript-eslint and start the stylistic migration 2026-10-09 13:47:58 +02:00
Rainer Killinger 66ae7a39a1 refactor: upgrade project to Typescript 5.9 2026-10-09 13:47:58 +02:00
Rainer Killinger 58b4822265 refactor: apply Angular 20 inject rules 2026-10-09 13:47:58 +02:00
Rainer Killinger 9026c88fac refactor: angular 20 upgrade 2026-10-09 13:47:58 +02:00
Rainer Killinger 1f7b010dc9 refactor: maplibre update 2026-10-09 13:47:57 +02:00
Rainer Killinger 01c9b63eb9 refactor: fix new Angular warnings 2026-10-09 13:47:57 +02:00
Rainer Killinger b109100257 refactor: migrate sass/scss deprecations 2026-10-09 13:47:57 +02:00
Rainer Killinger 5f48bca962 fix: update @ionic/angular* and patch dependencies 2026-10-09 13:47:56 +02:00
Rainer Killinger d1709c3353 refactor: update to Angular 19.2 2026-10-09 13:47:56 +02:00
Rainer Killinger 65facc131a refactor: update to typescript 5.5.4 2026-10-09 13:47:56 +02:00
Jovan Krunić a1de793993 refactor: open external links without javascript in browser
Close #246
2026-10-09 13:47:56 +02:00
Jovan Krunić 592e655990 refactor: remove library features
Closes #244
2026-10-09 13:47:55 +02:00
Rainer Killinger 5d0d2dd136 fix: update critical production dependencies 2026-10-09 13:47:55 +02:00
Rainer Killinger f5582e91fe docs: update changelogs for release
ci: publish release
2026-06-03 16:33:57 +02:00
Rainer Killinger 2c7bed0b8b ci: enable failed audit jobs for main 2026-06-03 16:14:42 +02:00
Rainer Killinger 87d0af5a39 ci: remove edge browser from cypress 2026-06-03 16:14:35 +02:00
Rainer Killinger 8ccbfac0b1 refactor: bump proxy version to rebuild image from latest source 2026-06-03 12:38:50 +02:00
Rainer Killinger 8550bf976b refactor: capacitor 8 upgrade 2026-03-13 13:10:50 +01:00
Rainer Killinger 86004881b0 fix: update node-glob dependency 2026-01-05 10:44:02 +01:00
Rainer Killinger 3d19fc87e3 fix: hot fix for android 35 edge to edge window rendering 2025-08-28 13:05:52 +02:00
Rainer Killinger 80bcdad851 refactor: update app licenses file 2025-08-27 13:49:57 +02:00
Rainer Killinger afd1c8d87e docs: update changelogs for release
ci: publish release
2025-08-27 13:00:27 +02:00
Rainer Killinger 6941f83b8f refactor: complete changeset 2025-08-27 12:02:10 +02:00
Rainer Killinger 3a274a3a7f refactor: upgrade to Capacitor 7 & Angular 18 2025-08-27 11:27:11 +02:00
Rainer Killinger 5a48342a8d docs: update changelogs for release
ci: publish release
2025-07-30 14:15:24 +02:00
Rainer Killinger 6b06de4019 refactor: update audit relevant nodemailer dependency 2025-07-30 13:58:25 +02:00
Rainer Killinger c5c9bcf433 docs: update changelogs for release
ci: publish release
2025-07-30 12:44:30 +02:00
Rainer Killinger b40ba7ad63 refactor: update elasticsearch and audit relevant dependencies 2025-07-30 12:40:59 +02:00
Jovan Krunić 362f6adf07 fix: use modal instead of menu inside of a split pane
Closes #234
2025-07-08 14:05:30 +02:00
Rainer Killinger bbd6b0f874 fix: app missing chevron buttons in schedule module 2025-07-02 16:44:23 +02:00
Rainer Killinger b1a9ba44d0 fix: app now requests backend version 4.0.0 2025-07-02 12:04:41 +02:00
Rainer Killinger bee38d4a59 docs: update changelogs for release
ci: publish release
2025-07-01 16:29:42 +02:00
Rainer Killinger a5c5c31d09 fix: app cypress e2e tests failing on core major version change 2025-07-01 15:33:27 +02:00
Rainer Killinger c8e290200f refactor: update to node 22 2025-06-30 16:55:33 +02:00
Rainer Killinger ef4e1f8ded refactor: move ion-menu-button for context menu filtering in ion-toolbar 2025-06-18 15:29:18 +02:00
Rainer Killinger 5759a1cbb1 refactor: update to ionic 8 and update capactior 6 + angular 17 dependencies 2025-06-18 15:29:11 +02:00
Theaninova b8ac30b9d0 refactor: migrate to angular esbuild
refactor: migrate to ionic standalone components
refactor: migrate ion icons to a custom element
2025-06-18 14:19:56 +02:00
Rainer Killinger 436e1471a7 docs: update changelogs for release
ci: publish release
2024-12-02 11:26:24 +01:00
Rainer Killinger 4c9d330c88 fix: update jsonpath-plus depenency 2024-12-02 11:08:58 +01:00
Thea Schöbl 580ebee362 fix: user gets logged out when their token expires
Closes #230
2024-11-28 18:04:08 +00:00
Rainer Killinger 07e5c80223 docs: update changelogs for release
ci: publish release
2024-11-05 11:40:19 +01:00
Jovan Krunić 2ac840d845 fix: observable immediately returns false if scheduled beyond max delay
Closes #229
2024-11-04 18:04:48 +01:00
Thea Schöbl 8b581ef9ca feat: rework about pages changelog 2024-11-04 07:50:47 +00:00
Rainer Killinger e2d5d4f187 docs: update changelogs for release
ci: publish release
2024-10-18 16:52:57 +02:00
Rainer Killinger 496b50d892 fix: update jsonpath-plus depenency 2024-10-18 16:12:29 +02:00
Theaninova e6c17c860b fix: id cards are wiped/replaced when an error happens in the pipe 2024-10-11 15:33:03 +02:00
Jovan Krunić bb1f596bfc fix: enable starting the app without backend
Closes #223
2024-09-30 11:03:53 +00:00
Theaninova 0c49fd8c34 refactor: update nix dependencies 2024-09-30 13:00:59 +02:00
Thea Schöbl ce5016a992 fix: text of the feedback form not fully visible
Closes #227
2024-09-18 09:53:50 +00:00
Theaninova 3ac8c04765 fix: date range is now pipe has issues around boundaries 2024-08-06 17:43:59 +02:00
Rainer Killinger 5c260dd26b refactor: update android build dependencies for API level 34 2024-08-05 12:51:47 +00:00
Rainer Killinger f2e1a6ddd5 docs: update changelogs for release
ci: publish release
2024-08-02 10:19:44 +02:00
Rainer Killinger ccacfbf710 fix: publish-packages script 2024-08-02 10:18:57 +02:00
Rainer Killinger b249b329f7 refactor: use development backend for non production environment 2024-08-01 17:44:21 +02:00
Jovan Krunić 7afc24f1bc fix: use major version config from storage when offline
Closes #218
2024-08-01 17:44:20 +02:00
Rainer Killinger 7276525dfa fix: app-builder image build due to nodejs versions <18.19 not being supported by angular 17 2024-08-01 15:24:59 +02:00
Jovan Krunić c9e881582f refactor: set production version of the backend 2024-07-19 15:20:06 +02:00
Jovan Krunić df681de083 feat: show title if available on library account profile
Closes #215
2024-07-19 15:20:06 +02:00
Theaninova 802a7a3fa7 fix: docs generation 2024-07-19 15:20:06 +02:00
Jovan Krunić 343d03e647 feat: library account adjustments
Closes #214
2024-07-19 15:20:06 +02:00
Theaninova 727b92911e fix: list item layout broken 2024-07-19 15:20:06 +02:00
Theaninova 11bc987807 fix: elasticsearch integration spams errors 2024-07-19 15:20:06 +02:00
Rainer Killinger b8faae5988 docs: update changelogs for release
ci: publish release
2024-06-28 17:39:39 +02:00
Theaninova 67ab1fd613 fix: geo.point has wrong mapping 2024-06-28 17:25:32 +02:00
Rainer Killinger 142079bf0e refactor: set app backend to dev version 2024-06-28 12:02:59 +02:00
Rainer Killinger 5050ac90eb docs: update changelogs for release
ci: publish release
2024-06-28 09:28:39 +02:00
Rainer Killinger 688bc5f2e7 refactor: add changeset 2024-06-28 09:03:54 +02:00
Rainer Killinger ad174dd7d7 refactor: use static map files from backend 2024-06-28 08:59:08 +02:00
Rainer Killinger 26e654f5b8 fix: app license overview 2024-06-27 14:57:24 +02:00
Rainer Killinger 5439484a90 fix: changelog typo 2024-06-27 12:06:52 +02:00
Rainer Killinger 68f3366a27 refactor: adjustments for recent PAIA changes 2024-06-27 09:23:55 +00:00
Jovan Krunić dea9a82105 fix: do not fetch remote configuration if offline
Closes #206
2024-06-17 09:55:29 +00:00
Theaninova 39d2801114 feat: store id cards 2024-06-12 13:51:46 +02:00
Rainer Killinger 341b209092 refactor: display id-cards in their own modal 2024-06-05 11:07:30 +00:00
Rainer Killinger a6b88d3534 refactor: add f-u specific changelogs 2024-05-27 16:27:37 +02:00
Rainer Killinger be863daaef refactor: updated used licences within the app 2024-05-27 15:36:00 +02:00
Theaninova 2f64d69693 feat: migrate to protomaps and maplibre 2024-05-27 15:07:27 +02:00
Theaninova 964516d3cf fix: remove noUnused* TSConfig options
TSConfig options prevent Angular from compiling the app. This is
specifically harsh with the noUnused* rules, which require you to
strictly remove any unused variables even in dev mode while testing.
Since this case is already covered by ESLint, the TSConfig option was
removed.
2024-05-27 15:07:27 +02:00
Theaninova 71ff9fd960 fix: favorite button 2024-05-27 15:07:27 +02:00
Theaninova abf9999461 feat: type-safe sc-icons 2024-05-27 15:07:26 +02:00
Theaninova 53c3d0ba0c refactor: replace rfdc with native structuredClone 2024-05-27 15:07:25 +02:00
Rainer Killinger 622481a3c9 docs: update changelogs for release\n\nci: publish release 2024-03-28 14:27:56 +01:00
Thea Schöbl 1ab5c0c355 fix: inPlace in list items is placed weird 2024-03-27 13:45:22 +00:00
Rainer Killinger b0f6ffb21c refactor: ajdust app environment to backend version >= v3.1.0 2024-03-27 10:11:32 +01:00
Rainer Killinger e658cff9d2 refactor: use GET for id-cards requests 2024-03-27 09:55:31 +01:00
Rainer Killinger e71355a2fb fix: malformed Bearer header in id-cards provider 2024-03-27 09:55:30 +01:00
Theaninova 100607740b fix: angular lsp broken 2024-03-27 09:55:30 +01:00
Thea Schöbl 10c4466b37 feat: update to angular 17 2024-03-27 09:55:30 +01:00
Rainer Killinger 09faa66e98 fix: broken build and test stage 2024-03-27 09:55:30 +01:00
Rainer Killinger 7c5687111f fix: check-icons script in app 2024-03-27 09:55:30 +01:00
Rainer Killinger c066028e49 refactor: update asdf .tool-versions 2024-03-27 09:55:30 +01:00
Theaninova 0858a26dc1 fix: dish prices sometimes go missing 2024-03-27 09:55:30 +01:00
Theaninova 8667603bd6 feat: export core version in package 2024-03-27 09:55:29 +01:00
Theaninova 65bc9a76b6 feat: add syncpack semver ranges 2024-03-27 09:55:29 +01:00
Theaninova 912ae42270 feat: add ability to check for existence of a field 2024-03-27 09:55:29 +01:00
Theaninova c4a5d6e73b fix: exclude app.js and lib from typescript compliation 2024-03-27 09:55:29 +01:00
Theaninova deed376c24 feat: enable checkJs by default 2024-03-27 09:55:29 +01:00
Theaninova a4cc23e9a8 feat: add direnv for nix
feat: update nix flake to not rely on buildFHSUserEnv
2024-03-27 09:55:29 +01:00
Theaninova e8d72683ef fix: backend tests break every year
refactor: update some backend unit tests
2024-03-27 09:55:28 +01:00
Rainer Killinger e3d068f8d4 fix: iOS build resources 2024-03-27 09:55:28 +01:00
Rainer Killinger b346d216a3 refactor: add asdf tool versioning file 2024-03-27 09:55:28 +01:00
Theaninova dbb558508f fix: changeset crashes because it uses internal prettier version 2024-03-27 09:55:28 +01:00
Rainer Killinger 754d99c1b4 refactor: overhaul minimal-deployment compose file 2024-03-27 09:55:27 +01:00
Rainer Killinger 689ac68be3 fix: pin alpine version to 3.18 and add healthchecks 2024-03-06 11:45:40 +01:00
Rainer Killinger d36d9596fc docs: update changelogs for release 2023-12-19 15:32:42 +01:00
Thea Schöbl 8d50f669e7 feat: collapse detail titles into header bar 2023-12-19 14:16:38 +01:00
Jovan Krunić dce08d9c03 fix: reverse workaround after update of capacitor
Closes #179
2023-12-19 13:12:25 +00:00
Rainer Killinger 296054c8e0 docs: update changelogs for release
ci: publish release
2023-12-13 16:42:45 +01:00
Theaninova 859763367e fix: throw error if config import fails
feat: log used config in backend
2023-12-12 14:37:24 +01:00
Rainer Killinger 848fde4660 refactor: increase maxRequestBodySize to 2 MB 2023-12-11 13:00:52 +01:00
Rainer Killinger bd1046a19a docs: update changelogs for release
ci: publish release
2023-12-08 18:03:41 +01:00
Rainer Killinger 3b9068197c fix: pettier config causing changeset to crash 2023-12-08 17:35:00 +01:00
Thea Schöbl d2c8120255 feat: simplify version history api 2023-12-08 13:49:53 +00:00
Theaninova d44204cf8d fix: remove old console.log statements 2023-12-06 17:15:03 +01:00
Theaninova 9d5dd05bb6 refactor: remove nullish coalecing pipe 2023-12-06 17:15:03 +01:00
Theaninova 288a49113f refactor: migrate to strict template checking 2023-12-06 17:14:55 +01:00
Theaninova 791b5c895d fix: hide navigation from jop posting search 2023-12-05 15:51:57 +00:00
Theaninova d7a85b7fae feat: improved e2e tests 2023-12-05 15:17:00 +00:00
Rainer Killinger bff2d985aa refactor: use latest backend (4.1.0) 2023-12-05 12:06:11 +00:00
Rainer Killinger 655efc9d29 fix: map location preview collapsed in webkit 2023-12-05 12:06:11 +00:00
Rainer Killinger 66712bdd24 fix: iOS app not starting 2023-12-05 11:19:46 +00:00
Theaninova 8b5b4c765b fix: my app card layout 2023-12-05 10:36:22 +00:00
Thea Schöbl 31a6ebfd3f feat: upgrade prettier to v3 2023-12-05 10:36:04 +00:00
Rainer Killinger 991ed1cb1f docs: update changelogs for release
ci: publish release
2023-12-01 19:05:06 +01:00
Rainer Killinger 1efe5c1449 refactor: don't open webpack-bundle-analyzer 2023-12-01 18:28:41 +01:00
Rainer Killinger 4dbeb9936c refactor: adjust f-u release version history 2023-12-01 18:19:36 +01:00
Rainer Killinger 29e6128141 fix: resources:ios script not being BSD compatible 2023-12-01 18:15:15 +01:00
Rainer Killinger 753dc7cd11 docs: update changelogs for release
ci: publish release
2023-12-01 16:42:33 +01:00
Rainer Killinger 4f3834c20e refactor: update capacitor-secure-storage-plugin 2023-12-01 13:42:22 +00:00
Rainer Killinger cfb4aa364f refactor: add new book and periodical categories 2023-12-01 12:50:28 +00:00
Thea Schöbl 37945f7d19 feat: app release notes 2023-12-01 12:34:20 +00:00
Theaninova 5d47a17629 fix: android system bars always have light buttons 2023-12-01 12:23:38 +01:00
Theaninova 61587c7ba1 feat: add alert when critical errors prevent an app launch 2023-11-28 09:01:23 +00:00
Theaninova 066e374462 feat: upgrade to capacitor 5.0 2023-11-28 09:01:23 +00:00
Theaninova a02190fe5a fix: flaky tests due to console.error checks 2023-11-27 19:54:28 +01:00
Theaninova 04e275e967 feat: add share option in detail views 2023-11-14 16:37:12 +01:00
Theaninova f618725598 feat: full database clone feature in api-cli 2023-10-20 15:13:26 +02:00
theld 06b8ca109e feat: job portal
fix: disable function scoping lint rule
fix: outdated contributing docs for adding SCThings
2023-10-20 15:13:26 +02:00
Theaninova f3ba8af051 fix: prevent duplicate publishes 2023-10-20 14:19:07 +02:00
Theaninova 2e0020b5c8 fix: non-publish branches fail on main 2023-10-20 14:15:22 +02:00
Theaninova d17e8abea3 fix: docs fail to generate 2023-10-20 14:04:08 +02:00
Theaninova ef092a8bff fix: library login fails 2023-10-17 18:00:55 +02:00
Theaninova 656f2266e3 feat: add scripts to enable login flow from localhost 2023-10-17 14:50:34 +02:00
Rainer Killinger 5c8c151917 docs: update changelogs for release
ci: publish release
2023-10-15 21:50:05 +02:00
Rainer Killinger c020f075be fix: missing dependencies 2023-10-15 21:48:18 +02:00
Theaninova 98f21ac23b fix: distance disappears after 10 seconds 2023-10-15 16:41:52 +00:00
Theaninova c460a3dbc0 fix: safari crashes with long opening hours change times 2023-10-15 16:28:42 +00:00
Rainer Killinger 5db3b7948a docs: update changelogs for release
ci: publish release
2023-10-13 18:22:48 +02:00
Theaninova e7607360e2 feat: section dynamic slide buttons 2023-10-12 11:47:59 +02:00
Theaninova 1f62b5c5b0 feat: backend-supplied id cards on profile page
feat: SCIdCard thing
2023-10-12 11:47:59 +02:00
Theaninova 905ebf8c59 refactor: update capacitor build files 2023-10-12 11:14:28 +02:00
Theaninova b210e0d9c3 fix: change leaflet tiles to be inverted as a whole 2023-10-12 10:18:18 +02:00
Theaninova 3a79d57c8d fix: detail view should not reuse things without references 2023-10-09 08:53:28 +00:00
Theaninova 9e6d4fe054 fix: week overview button broken on webkit 2023-10-06 17:57:02 +02:00
Theaninova 7b96500a75 fix: backend tests failing since the start of this semester 2023-10-06 15:36:00 +02:00
Theaninova e0b7e616b3 fix: live update distance in list items 2023-09-21 09:38:52 +00:00
Theaninova 38fb7a398d fix: long branch names prevent review deployment 2023-09-21 09:55:35 +02:00
Theaninova a99e08cd68 refactor: change opening hours handling
fix: opening hours not updating
feat: lazy-load opening hours module
feat: add e2e tests for opening hours
refactor: migrate opening hours to on-push change detection
feat: show exact minutes in opening hours starting one hour before next change
2023-09-21 09:55:35 +02:00
Theaninova a5c9d22016 feat: add external directions referral
feat: change map page
feat: add error handling and timeout to location fetching in directions

resolves #124
resolves #122
2023-09-15 18:52:28 +00:00
Theaninova 3c49c4cf6d fix: route stack service causes needless network traffic 2023-09-06 15:29:47 +02:00
Theaninova f2c4ee308f feat: share loaded data to detail views across routes 2023-09-06 14:52:02 +02:00
Theaninova bd09b36620 refactor: use observable chains in rating component 2023-08-29 10:20:35 +00:00
Theaninova ca146b7761 refactor: separate dashboard schedule nav e2e tests 2023-08-28 13:48:34 +02:00
Thea Schöbl 001f978bf9 feat: cleanup profile page 2023-08-25 14:43:25 +00:00
Thea Schöbl 57a5b6061b fix: type errors in easy-ast when generating docs 2023-08-23 08:45:47 +00:00
Rainer Killinger 4fb5941c56 ci: prepare e2e jobs for non nonexistent cache 2023-08-22 17:09:14 +02:00
Rainer Killinger 314e6a6e86 ci: move most pipelines to GitLab OSS large runner 2023-08-08 17:31:14 +02:00
Thea Schöbl e1cc33bba2 refactor: rename "recurring" to "week overview"
refactor: replace dashboard calendar icon
resolves #128

refactor: route dashboard "next unit" to date series instead of events
resolves #126
2023-08-07 15:51:23 +00:00
Rainer Killinger 9abd397578 refactor: update changelog
ci: publish release
2023-08-03 16:30:40 +02:00
Rainer Killinger 69fe8c6ac8 ci: polish publishing via ci pipelines 2023-08-03 16:30:35 +02:00
Thea Schöbl cbc59795b7 feat: connection timeout 2023-08-02 17:59:51 +02:00
Thea Schöbl 945ae039eb feat: nix flake for development 2023-08-02 17:59:51 +02:00
Thea Schöbl 06f3120345 feat: use takeUntilDestroy instead of manually unsubscribing 2023-08-02 17:59:21 +02:00
Thea Schöbl bebee6b4d0 feat: migrate app collection helpers to use the collecion-utils package 2023-08-02 17:59:21 +02:00
Theaninova 2f59ab9707 fix: parallax replacer might fail to find shadow root on its first try 2023-08-02 17:59:20 +02:00
Thea Schöbl 23481d0d73 feat: upgrade to Angular 16.1 2023-08-02 17:59:20 +02:00
Rainer Killinger df37c6c185 refactor: remove app release template from monorepo 2023-08-02 17:58:20 +02:00
Theaninova d3268b50c2 feat: add stylelint 2023-07-18 15:40:17 +02:00
Theaninova b085850207 feat: dish certifications 2023-07-18 14:42:30 +02:00
Theaninova c9240f289e feat: rating for dishes 2023-07-18 14:24:15 +02:00
Rainer Killinger 2fe8275f2f refactor: app core version check 2023-07-18 13:13:08 +02:00
Rainer Killinger 9ec35e65f8 ci: fixup todos 2023-07-18 13:13:07 +02:00
Rainer Killinger 59e8e6e264 docs: fix license files 2023-07-14 11:54:24 +02:00
Rainer Killinger 982b4feb3c ci: add scheduled builds 2023-07-14 11:05:46 +02:00
Theaninova 107a7c5e9e test: fix app unit tests 2023-07-06 11:52:11 +02:00
Theaninova 16a039a16e docs: add api doc 2023-07-05 11:43:26 +02:00
Theaninova 11c9d742cd refactor: move node and builder images 2023-07-03 15:18:30 +02:00
Theaninova 4e4c7b5cc9 feat: publishing workflow
refactor: update changelog
v3.0.0-next.0
2023-07-03 13:44:42 +02:00
Theaninova 0a7e6af141 refactor: migrate es mapping types from es-mapping-generator to .d.ts next to generated mappings 2023-06-30 12:46:48 +02:00
Theaninova 1aaf85b444 fix: upgrade @ionic/angular to fix broken popups in chrome 2023-06-29 19:43:11 +02:00
Theaninova 98546a97a3 refactor: migrate @krlwlfrt/async-pool to @openstapps/collection-utils 2023-06-29 19:12:09 +02:00
Theaninova 64caebafe5 refactor: migrate changelogs to changesets format
refactor: add changesets
refactor: chose packages to publish
2023-06-29 18:55:26 +02:00
Theaninova f1bc41c4df refactor: speed up the pipeline by directly deploying the review app from the build step 2023-06-29 16:01:42 +02:00
Theaninova 6a8b3d2fe2 feat: migrate app to AOT compilation
refactor: temporarily replace @ionic/storage-angular with custom file until upgrade to Angular 14+
2023-06-29 16:01:42 +02:00
Theaninova 129f25d1f0 feat: docker publishing 2023-06-29 16:01:42 +02:00
Theaninova c4260dc882 feat: add openapi gen to core 2023-06-29 16:01:42 +02:00
Theaninova 5b4d2bd16c refactor: app deployment 2023-06-29 16:01:42 +02:00
Rainer Killinger d61d16e752 ci: include backend integration tests 2023-06-29 16:01:42 +02:00
Theaninova 3b8a344d73 refactor: app deployment 2023-06-29 16:01:42 +02:00
Theaninova b21833de40 refactor: split api into api, api-cli & api-plugin 2023-06-29 15:56:25 +02:00
Theaninova 495a63977c test: add unit tests to pipeline 2023-06-29 15:56:25 +02:00
Theaninova 45444d9373 fix: pipeline 2023-05-31 15:30:25 +02:00
Theaninova 68400f2480 fix: tests 2023-05-31 15:05:41 +02:00
Theaninova 0d60b8bfad feat: update tests
feat: update tests

feat: update tests
2023-05-31 14:05:45 +02:00
Theaninova d6d4f6e5c4 fix: rebase cleanup
fix: rebase cleanup

fix: rebase cleanup
2023-05-31 14:04:38 +02:00
Theaninova 0a76427ba8 feat: migrate backend to cosmiconfig 2023-05-31 14:04:05 +02:00
Theaninova d8c79256c9 feat: tests 2023-05-31 14:04:05 +02:00
Theaninova 8cb9285462 refactor: build system 2023-05-31 14:04:05 +02:00
Theaninova 4df19e8c20 feat: migrate to esm 2023-05-31 14:04:03 +02:00
Theaninova fd740b3091 fix: build 2023-05-31 14:01:59 +02:00
Theaninova 3792a14e90 Merge remote-tracking branch 'backend/master' 2023-05-31 14:00:29 +02:00
Theaninova be1774b1cd refactor: move backend to monorepo 2023-05-31 13:54:58 +02:00
Thea Schöbl 7c3ccc35af fix: search uses inactive indices 2023-05-31 11:40:08 +00:00
Theaninova 881734c29e Merge remote-tracking branch 'app/develop' 2023-05-24 14:31:00 +02:00
Theaninova ac62e621d5 refactor: move app to monorepo 2023-05-24 14:26:54 +02:00
Theaninova cc7406c07f Merge remote-tracking branch 'logger/master' 2023-05-24 14:23:43 +02:00
Theaninova 3ab8bc1517 refactor: move logger to monorepo 2023-05-24 14:22:25 +02:00
Theaninova 44f2b4a2b3 Merge remote-tracking branch 'api/master' 2023-05-24 14:16:58 +02:00
Theaninova 2dc8fd98b8 refactor: move api to monorepo 2023-05-24 14:16:07 +02:00
Theaninova 2d139e478a Merge remote-tracking branch 'core/master' 2023-05-24 14:09:07 +02:00
Theaninova 9aad8eda9a refactor: move core to monorepo 2023-05-24 14:06:57 +02:00
Theaninova 522b951490 refactor: update es-mapping-generator 2023-05-24 13:31:41 +02:00
Theaninova b819dba17f Merge remote-tracking branch 'es-mapping-generator/master' 2023-05-24 13:29:50 +02:00
Theaninova e76ffe9371 refactor: move es-mapping-generator to monorepo 2023-05-24 13:23:12 +02:00
Theaninova c8703ec66b Merge remote-tracking branch 'proxy/master' 2023-05-24 13:14:30 +02:00
Theaninova 23d0c6971c refactor: move proxy to monorepo 2023-05-24 13:13:13 +02:00
Theaninova f69edc6393 Merge remote-tracking branch 'backend/master' 2023-05-23 14:26:05 +02:00
Theaninova 1ea219b1ef refactor: move backend to monorepo 2023-05-23 14:07:16 +02:00
Theaninova 857e829e8b Merge remote-tracking branch 'database/main' 2023-05-23 13:58:13 +02:00
Theaninova b6b745310a migrate database to monorepo 2023-05-23 13:14:35 +02:00
Theaninova 1bd1672276 1.1.0 2023-05-19 12:59:09 +02:00
Theaninova 1fdcae7aaf refactor: update dependencies 2023-05-19 12:58:10 +02:00
Theaninova 927f8df900 1.1.0 2023-05-19 11:07:55 +02:00
Thea Schöbl fd63fb764f feat: add certification thing 2023-05-15 13:38:11 +00:00
Rainer Killinger 35611af501 ci: replace deprecated CI variables for Gitlab 16 2023-05-11 14:12:40 +02:00
Rainer Killinger 826eaa7825 refactor: update dependencies 2023-05-11 13:38:56 +02:00
Rainer Killinger b7407eb057 ci: replace deprecated CI variables for Gitlab 16 2023-05-11 13:37:30 +02:00
Rainer Killinger 20a336d3c4 ci: replace deprecated CI variables for Gitlab 16 2023-05-11 12:51:54 +02:00
Rainer Killinger 41c5541dd1 2.1.1 2023-05-10 13:09:32 +02:00
Rainer Killinger 71eaf046d8 refactor: changelog and licenses on version tag 2023-05-10 13:07:11 +02:00
Rainer Killinger 28f106b530 refactor: update openstapps dependencies 2023-05-09 13:58:07 +02:00
Rainer Killinger f4b2d747a3 1.0.0 2023-05-08 15:32:40 +02:00
Rainer Killinger 4ebe44a5a7 fix: openapi docs generation 2023-05-08 15:04:25 +02:00
Rainer Killinger 3471591a7d fix: rename deprecated Gitlab CI variables 2023-05-08 14:22:10 +02:00
Rainer Killinger 5eae0d5955 1.0.1 2023-05-08 12:59:32 +02:00
Rainer Killinger a5291af838 fix: changelog generation on version tags 2023-05-08 12:58:53 +02:00
Rainer Killinger 10f7cb8028 fix: rename deprecated Gitlab CI variables 2023-05-08 12:41:47 +02:00
Thea Schöbl 0f970fa1f1 fix: parallax broken since safari 16.4
Moves the parallax effect into a directive which injects required elements into the shadow DOM and adds `part` attributes, so it can be styled from a global stylesheet.
2023-05-04 12:18:48 +00:00
Rainer Killinger 7073dfd0dd docs: update changelog 2023-05-04 12:57:36 +02:00
Rainer Killinger 9e45c46eb8 1.0.0 2023-05-04 12:57:34 +02:00
Rainer Killinger 2efa29f61c refactor: update to major core version 2023-05-04 12:46:01 +02:00
Rainer Killinger 4a0986bdad docs: update changelog 2023-05-04 12:43:53 +02:00
Rainer Killinger 881db8b9f0 0.46.0 2023-05-04 12:43:51 +02:00
openstappsbot d6d10a2a0d refactor: update all 2023-05-01 07:16:41 +00:00
openstappsbot d16ae93a7a refactor: update all 2023-04-28 13:25:13 +00:00
Rainer Killinger de71d68051 refactor: update dependencies 2023-04-28 15:20:27 +02:00
Thea Schöbl c9b83b5d71 feat: update to of elasticsearch 8.4 2023-04-28 12:43:31 +00:00
Rainer Killinger b21dc75964 1.0.1 2023-04-28 13:33:46 +02:00
Rainer Killinger 4a18cd5cf5 refactor: update es-mapping-generator dependecy 2023-04-28 13:32:41 +02:00
Rainer Killinger e0e803fba0 0.6.0 2023-04-28 13:17:33 +02:00
Rainer Killinger bcba3435df docs: update changelog 2023-04-28 13:17:33 +02:00
Thea Schöbl d90416e201 Resolve "Retype mapping generation using @elastic/elasticsearch" 2023-04-28 11:15:08 +00:00
Rainer Killinger 937586ca43 1.0.0 2023-04-28 10:18:16 +02:00
Rainer Killinger afcc73f3da feat: support ES 8.4 via mapping generator 2023-04-27 15:32:36 +02:00
Rainer Killinger fc850fe7ac 0.5.0 2023-04-27 14:15:20 +02:00
Rainer Killinger 898480e254 docs: update changelog 2023-04-27 14:15:20 +02:00
Rainer Killinger 3bca003d16 refactor: include changelog in version commit 2023-04-27 14:14:37 +02:00
Theaninova abf2ab6a5a fix: schedule tabs navigating to the wrong url 2023-04-27 12:02:35 +00:00
Thea Schöbl 61fee2bbf3 refactor: mapping generation for `Elasticsearch 8.4 2023-04-27 09:33:09 +00:00
Rainer Killinger f49c44f5c5 fix: typo in catalog provider query 2023-04-20 16:59:41 +02:00
Rainer Killinger 9937dcab52 2.1.0 2023-04-20 16:23:53 +02:00
Rainer Killinger b5a325eb56 refactor: apply prettier rules to release assets 2023-04-20 16:16:09 +02:00
Rainer Killinger cd554e8403 refactor: cleanup dish list item layout 2023-04-20 13:54:37 +00:00
Rainer Killinger f430621cb7 refactor: profile page simple swiper & item layout 2023-04-20 13:54:37 +00:00
Rainer Killinger afbd1fc048 fix: catalog module semester selection 2023-04-20 13:54:37 +00:00
Theaninova 9e160e8d1e fix: breadcrumbs are under parallax 2023-04-20 13:54:37 +00:00
Jovan Krunić 7f6de94ab5 fix: browser logout only if endSession url defined
Closes #395
2023-04-20 13:54:37 +00:00
Thea Schöbl cc939f3887 feat: transition to full sidebar at xl instead of lg 2023-04-20 13:54:37 +00:00
Theaninova 3e5724d9be refactor: replace timetable event modal with route 2023-04-20 13:54:37 +00:00
Thea Schöbl 22e70ae92b feat: show in-place in date series modal, resolves #385
feat: show start date for date series modal ranges, resolves #386
refactor: reformat date series modal to be more readable
fix: add message for malformed date series, resolves #388
2023-04-20 13:54:37 +00:00
Theaninova 3e99d7fa8f fix: can't select some list elements on safari 16.4 2023-04-20 13:54:37 +00:00
Thea Schöbl e8dee1fd47 refactor: remove virtual scroll 2023-04-20 13:54:37 +00:00
Theaninova e90286fc68 fix: autofocus searchbar only when no default data is displayed 2023-04-20 13:54:37 +00:00
Thea Schöbl 05e996ae90 fix: canteen view removes item select listener on view exit 2023-04-20 13:54:37 +00:00
Thea Schöbl 947cab458c fix: workaround for side menu items not being active on page load 2023-04-20 13:54:37 +00:00
Thea Schöbl 2220ab24b3 feat: add easy way to configure search filtering for nested properties 2023-04-20 13:54:37 +00:00
Thea Schöbl e75a46633c feat: dark theme 2023-04-20 13:54:37 +00:00
Thea Schöbl 23bd5a431c refactor: simplify favorites and mensa dashboard sections 2023-04-20 13:54:37 +00:00
Thea Schöbl 47565e51b0 fix: remove infinite scroll e2e test 2023-04-20 13:54:37 +00:00
Thea Schöbl 8c30a47706 feat: dashboard search rework 2023-04-20 13:54:37 +00:00
Theaninova dff4a95acc fix: data detail local favorite fallback causing duplicate nested favorite view 2023-04-20 13:54:37 +00:00
Thea Schöbl 95f2da2def fix: data-detail favorite button color leaking to list items 2023-04-20 13:54:37 +00:00
Rainer Killinger f207e029f1 fix: location flow on iOS devices 2023-04-20 13:54:37 +00:00
Thea Schöbl 2f1298c9d7 feat: rework settings page design 2023-04-20 13:54:37 +00:00
Jovan Krunić 8cd2d777ab feat: optional logout from identity provider
Closes #372
2023-04-20 13:54:37 +00:00
Rainer Killinger a8c7d5ab59 fix: catalog semester selection 2023-04-20 13:54:37 +00:00
Thea Schöbl 968cb72957 feat: implement custom cdk virtual scroll behavior 2023-04-20 13:54:37 +00:00
Theaninova f5ca1508fb fix: translate simple pipe doesn't update on language changes 2023-04-20 13:54:37 +00:00
Thea Schöbl 33a74d96ae feat: revamp dashboard mensa section 2023-04-20 13:54:37 +00:00
Thea Schöbl 1318cbca7f fix: replace breadcrumb popover with simply expanding the breadcrumbs 2023-04-20 13:54:37 +00:00
Thea Schöbl 982fb1653b feat: add content to empty catalogs 2023-04-20 13:54:37 +00:00
Rainer Killinger 6270a93151 ci: run format fix on changelog and licenses 2023-04-20 13:54:37 +00:00
Theaninova 44ab2cafd3 Merge remote-tracking branch 'gitlab-api/master' 2023-03-15 19:46:08 +01:00
Theaninova e64f66feb0 refactor: move gitlab-api to monorepo 2023-03-15 19:45:50 +01:00
Theaninova 24b50d471b refactor: add monorepo 2023-03-14 17:44:23 +01:00
Theaninova 93b651b35b Merge remote-tracking branch 'minimal-deployment/master' 2023-03-14 17:36:27 +01:00
Theaninova bbed8bf182 refactor: move minimal-deployment to monorepo 2023-03-14 17:36:01 +01:00
Theaninova d8baa99fc6 Merge remote-tracking branch 'minimal-plugin/master' 2023-03-14 17:35:08 +01:00
Theaninova db58aa4873 refactor: move minimal-plugin to monorepo 2023-03-14 17:34:39 +01:00
Theaninova 163dff7bc6 Merge remote-tracking branch 'eslint-config/master' 2023-03-14 17:33:26 +01:00
Theaninova 0a37c252e3 refactor: move eslint-config to monorepo 2023-03-14 17:32:57 +01:00
Theaninova d32b88cfef Merge remote-tracking branch 'database/main' 2023-03-14 17:31:17 +01:00
Theaninova 76886ae502 refactor: move database to monorepo 2023-03-14 17:30:55 +01:00
Theaninova d5130aa0e4 Merge remote-tracking branch 'prettier-config/main' 2023-03-14 17:29:30 +01:00
Theaninova 8c7d9a942b refactor: move prettier-config to monorepo 2023-03-14 17:29:01 +01:00
Theaninova ee57dd163c Merge remote-tracking branch 'app-release-template/main' 2023-03-14 17:27:33 +01:00
Theaninova 4f91f46af6 refactor: move app-release-template to monorepo 2023-03-14 17:26:49 +01:00
Theaninova 3e6154e4aa Merge remote-tracking branch 'configuration/master' 2023-03-14 17:25:16 +01:00
Theaninova 07150d8fc5 refactor: move configuration to monorepo 2023-03-14 17:24:45 +01:00
Theaninova 37baabb1fb Merge remote-tracking branch 'minimal-connector/master' 2023-03-14 17:23:31 +01:00
Theaninova 4445c5eef9 refactor: move minimal-connector to monorepo 2023-03-14 17:22:55 +01:00
Theaninova 52847f472d Merge remote-tracking branch 'es-mapping-generator/master' 2023-03-14 17:21:25 +01:00
Rainer Killinger ceed1ed706 refactor: move es-mapping-generator to monorepo 2023-03-14 17:20:51 +01:00
Theaninova 3ddc9d3320 Merge remote-tracking branch 'projectmanagement/master' 2023-03-14 17:19:07 +01:00
Theaninova e9185d248b refactor: move logger to monorepo 2023-03-14 17:18:13 +01:00
Theaninova 67fdb6f70a Merge remote-tracking branch 'logger/master' 2023-03-14 17:16:18 +01:00
Theaninova a9fad2e442 refactor: move logger to monorepo 2023-03-14 17:15:56 +01:00
Theaninova 4ffb02fa97 Merge remote-tracking branch 'proxy/master' 2023-03-14 17:14:22 +01:00
Theaninova ae053147d4 refactor: move proxy to monorepo 2023-03-14 17:13:57 +01:00
Theaninova 30db9d8215 Merge remote-tracking branch 'api/master' 2023-03-14 17:12:21 +01:00
Theaninova 086584af8e refactor: move api to monorepo 2023-03-14 17:11:48 +01:00
Theaninova 3405850e85 Merge remote-tracking branch 'core-tools/master' 2023-03-14 17:10:11 +01:00
Theaninova 721ea0fe67 refactor: move core-tools to monorepo 2023-03-14 17:08:48 +01:00
Theaninova 980d5034f2 Merge remote-tracking branch 'app/develop' 2023-03-14 17:07:03 +01:00
Theaninova 54ed0a2f27 refactor: move app to monorepo 2023-03-14 17:05:09 +01:00
Theaninova cffad4d148 refactor: reorganize files 2023-03-14 16:59:09 +01:00
Theaninova 58e6b390c2 Merge remote-tracking branch 'backend/master' 2023-03-14 16:49:42 +01:00
Theaninova 73edb5fd43 refactor: move backend to monorepo 2023-03-14 16:48:35 +01:00
Theaninova 9b2bc2299d refactor: move core to mono repo 2023-03-14 16:42:48 +01:00
Thea Schöbl 2f65ebf57f fix: remove infinite scroll e2e test 2023-03-10 17:51:02 +00:00
Thea Schöbl 61debcf1a5 feat: dashboard search rework 2023-03-10 15:46:59 +00:00
Theaninova 94df92fb98 fix: data detail local favorite fallback causing duplicate nested favorite view 2023-03-09 17:39:02 +00:00
Thea Schöbl 6b37ca4b96 fix: data-detail favorite button color leaking to list items 2023-03-09 17:09:02 +00:00
Rainer Killinger 05a0bf53fa fix: location flow on iOS devices 2023-03-09 10:32:22 +00:00
Thea Schöbl 3f5b77520c feat: rework settings page design 2023-03-09 10:29:59 +00:00
Jovan Krunić ef7752ad49 feat: optional logout from identity provider
Closes #372
2023-03-09 08:12:32 +00:00
Rainer Killinger 515a6eeea5 fix: semster boosting 2023-03-07 13:45:18 +01:00
Rainer Killinger b2a8cba1aa fix: catalog semester selection 2023-03-02 10:52:16 +00:00
Thea Schöbl 260fbe01db feat: implement custom cdk virtual scroll behavior 2023-02-28 15:00:57 +00:00
Jovan Krunić 95b2fc5c18 0.75.0 2023-02-28 14:22:05 +01:00
Theaninova 110544c793 fix: translate simple pipe doesn't update on language changes 2023-02-27 14:44:37 +00:00
Thea Schöbl 298f48a914 feat: revamp dashboard mensa section 2023-02-27 14:44:20 +00:00
Jovan Krunić 28eacf7925 feat: add rating for things
Closes #152
2023-02-27 13:33:24 +01:00
Thea Schöbl ec2ac250bc fix: replace breadcrumb popover with simply expanding the breadcrumbs 2023-02-24 11:34:41 +00:00
Thea Schöbl 66719d6cb7 feat: add content to empty catalogs 2023-02-24 10:50:38 +00:00
Rainer Killinger fdf7999437 feat: add apk deploy via scp 2023-02-15 11:46:23 +01:00
Rainer Killinger a24e2f36fd refactor: default to production releases 2023-02-13 18:46:35 +01:00
Rainer Killinger f5bd04930b ci: run format fix on changelog and licenses 2023-02-13 17:39:30 +01:00
Rainer Killinger 5c3e75e3f3 2.0.1 2023-02-13 17:16:47 +01:00
Rainer Killinger aefae33d5c fix: remove misleading assessment calculations 2023-02-13 16:46:43 +01:00
Thea Schöbl 9b4caf526f feat: offline notice 2023-02-13 12:19:35 +00:00
Rainer Killinger 3e490aeeb9 refactor: update configs to production values 2023-01-30 19:51:54 +01:00
Rainer Killinger 2a380c63b2 0.6.0 2023-01-30 14:35:26 +01:00
Rainer Killinger aac173d7a1 refactor: reorder version related asset generation 2023-01-30 14:18:08 +01:00
Rainer Killinger 6d058f0750 refactor: adjust to stricter lint rules 2023-01-30 14:18:08 +01:00
openstappsbot 0550f92b5f refactor: update all 2023-01-30 14:18:06 +01:00
Rainer Killinger 2afbdabc54 0.74.0 2023-01-30 13:59:40 +01:00
Rainer Killinger 4e521926d3 refactor: reorder version related asset generation 2023-01-30 13:27:27 +01:00
openstappsbot 3b0014abac refactor: update all 2023-01-30 13:26:34 +01:00
Rainer Killinger 0ebfc57fd6 0.34.0 2023-01-30 12:58:21 +01:00
Rainer Killinger a13702922b refactor: reorder version related asset generation 2023-01-30 12:11:44 +01:00
Rainer Killinger 0995e7500c refactor: adjust to stricter eslint rules 2023-01-30 11:53:21 +01:00
openstappsbot c6f4660b3a refactor: update all 2023-01-30 11:51:01 +01:00
Rainer Killinger d2009e62ca ci: limit artifacts and remove unnecessary ones 2023-01-30 11:23:43 +01:00
Theaninova 11d1ac3f7c fix: login button not easily found 2023-01-26 10:23:42 +00:00
Thea Schöbl 1eee652533 fix: right-align add event detail chip 2023-01-26 10:03:44 +00:00
Rainer Killinger 9c462a6eca refactor: reorder version related asset generation 2023-01-17 17:19:52 +00:00
Rainer Killinger 2428042fa3 0.25.0 2023-01-17 16:11:51 +01:00
Rainer Killinger 61eff4f929 refactor: add changelog generation with versions 2023-01-17 16:11:17 +01:00
Rainer Killinger 116c8809e4 fix: renovate job timeout 2023-01-17 15:39:54 +01:00
Rainer Killinger a37d3a9ec4 fix: broken cypress build 2023-01-17 15:39:50 +01:00
Rainer Killinger 1105a7e3e1 0.34.0 2023-01-17 13:36:07 +01:00
Rainer Killinger b1e460314e refactor: changelog generation for tags 2023-01-17 13:34:10 +01:00
Rainer Killinger 96f1bb0429 refactor: enforce changelog generation for tags 2023-01-16 13:56:17 +01:00
Rainer Killinger 49d6db178c docs: update changelog 2023-01-16 13:42:02 +01:00
Rainer Killinger a16771898c 1.5.1 2023-01-16 13:42:01 +01:00
Rainer Killinger 65de6f581f refactor: add stapps-version header to logs 2023-01-16 13:00:06 +01:00
Theaninova f986b3da0f build: specify required none/npm version 2023-01-16 10:33:12 +01:00
openstappsbot d46ddc0e8a refactor: update all 2023-01-16 08:15:46 +00:00
Rainer Killinger a88d000ccd feat: separate prettier from eslint 2023-01-13 18:14:05 +00:00
Rainer Killinger 317b720045 docs: update changelog 2023-01-13 19:01:25 +01:00
Rainer Killinger 3c6f48e138 1.0.0 2023-01-13 19:01:13 +01:00
Rainer Killinger 3d53615447 ci: get CI ready for publishing the npm package 2023-01-13 18:59:46 +01:00
Theaninova c36c47267b initial commit
initial commit
2023-01-13 18:58:09 +01:00
Rainer Killinger 939fb6ef0f fix: assessment segments can become unreadable 2023-01-13 12:59:14 +01:00
Jovan Krunić 63bb1967e1 refactor: make feedback protocol data optional
Closes #356
2023-01-13 11:31:43 +00:00
Rainer Killinger bdaa1f0201 refactor: Feedback metaData has to be optiobal 2023-01-13 11:59:33 +01:00
Rainer Killinger 1703a3dd40 docs: update changelog 2023-01-12 19:12:43 +01:00
Rainer Killinger 877903dd1a 0.73.0 2023-01-12 19:12:41 +01:00
openstappsbot 2873e22038 refactor: update all 2023-01-12 19:02:40 +01:00
Rainer Killinger 08ec4e4381 docs: update changelog 2023-01-12 14:16:03 +01:00
Rainer Killinger f0a1f665ff 0.4.0 2023-01-12 14:16:02 +01:00
Rainer Killinger 925dc26d7a docs: update changelog 2023-01-12 14:15:10 +01:00
Rainer Killinger d285faaa45 0.33.0 2023-01-12 14:15:08 +01:00
openstappsbot 74282995fd refactor: update all 2023-01-12 14:09:32 +01:00
openstappsbot b1a552f68b refactor: update all 2023-01-12 13:16:28 +01:00
Rainer Killinger 7f0c54a826 ci: allow develop branch to deploy to web staging 2023-01-11 15:18:30 +01:00
Rainer Killinger cd19cf5b92 refactor: remove unused about module component 2023-01-11 13:52:31 +01:00
Rainer Killinger a07db5a3a6 ci: switch to new main branch 2023-01-11 12:31:25 +01:00
Rainer Killinger 01f3827c4c docs: update changelog 2023-01-11 12:21:27 +01:00
openstappsbot 7aafd9cc85 refactor: update all 2023-01-09 14:27:49 +00:00
openstappsbot 360a2e434d refactor: update all 2023-01-09 09:01:02 +00:00
Jovan Krunić cf74c8e19f fix: feedback not allowing valid emails
Closes #349
2022-12-15 11:58:21 +01:00
Rainer Killinger d1b78491c3 fix: invalid assetlinks.json key fingerprint 2022-12-07 20:18:32 +01:00
Rainer Killinger f55f3ae518 refactor: unset color icon filter in dish detail 2022-12-07 18:00:19 +01:00
Rainer Killinger 95e1734d26 fix: opening hours pipe refreshing too often 2022-12-07 17:33:33 +01:00
Rainer Killinger 31bfd4a8a4 ci: move review jobs to docker runner 2022-12-07 13:32:18 +00:00
Rainer Killinger af57804c56 refactor: update dependencies 2022-12-07 13:32:18 +00:00
Jovan Krunić 99e8d6c9bc fix: overhaul auth to avoid issues
Closes #336
2022-12-07 12:25:49 +00:00
Rainer Killinger 6720265410 refactor: adjust translation 2022-12-07 11:45:38 +00:00
Jovan Krunić dcdda16bcf refactor: overhaul UI for uni branding
Closes #345
2022-12-07 11:45:38 +00:00
Jovan Krunić 92adb9dd2d fix: add location info to dates from timetable
Close #344
2022-12-07 10:28:47 +00:00
Rainer Killinger 400c6b8d8c feat: seperate dishes by menu sections 2022-12-07 10:31:24 +01:00
Rainer Killinger 33e6a76dbd test: increase cypress default command timeout 2022-12-06 17:05:26 +01:00
Jovan Krunić 450b52517e docs: update changelog 2022-12-06 16:44:03 +01:00
Jovan Krunić 9188728376 0.5.0 2022-12-06 16:44:02 +01:00
Jovan Krunić 63053e9cf8 docs: update changelog 2022-12-06 16:33:19 +01:00
Jovan Krunić 871a5f8fa1 0.45.0 2022-12-06 16:33:18 +01:00
openstappsbot 94e2a0d34c refactor: update all 2022-12-06 14:24:58 +00:00
openstappsbot d0608ccd31 refactor: update all 2022-12-06 14:16:41 +00:00
Jovan Krunić 7fdf6f7c25 docs: update changelog 2022-12-06 14:44:04 +01:00
Jovan Krunić 17dc720df6 0.72.0 2022-12-06 14:44:02 +01:00
Jovan Krunić be98fd8c4c feat: add dish menu section and service times
Closes #150
2022-12-06 13:35:49 +01:00
openstappsbot 1007c280df refactor: update all 2022-12-05 14:52:26 +00:00
Jovan Krunić c8318305f9 docs: update changelog 2022-11-29 18:39:22 +01:00
Jovan Krunić 4133ff36b7 1.5.0 2022-11-29 18:39:21 +01:00
Jovan Krunić 25e506f54d fix: SVGs treated as plain texts
Closes #14
2022-11-29 16:56:42 +01:00
Rainer Killinger 181e0528b5 refactor: inline display of dish icons 2022-11-23 17:34:48 +01:00
Rainer Killinger 48d784a147 refactor: keep opening hours content up to date 2022-11-22 18:18:59 +01:00
Rainer Killinger f51397a17a refactor: update dish addditives property name 2022-11-22 18:17:19 +01:00
Rainer Killinger c0a2dd9a14 refactor: comment out nutrition facts 2022-11-22 14:44:38 +01:00
Rainer Killinger 8c032209a0 docs: update changelog 2022-11-22 12:48:15 +01:00
Rainer Killinger 82aaefe843 0.71.1 2022-11-22 12:48:12 +01:00
Rainer Killinger 0ad7e48462 refactor: adjust dish additives translations 2022-11-22 12:45:42 +01:00
Jovan Krunić 9854541a0c fix: generate library online links properly
Closes #340
2022-11-21 13:55:34 +00:00
Jovan Krunić cbb949e397 fix: library fines should load item title only if needed
Closes #342
2022-11-21 11:52:33 +00:00
Rainer Killinger eb62d4606c docs: update changelog 2022-11-21 10:55:15 +01:00
Rainer Killinger 8e92ec3cb2 0.10.0 2022-11-21 10:55:14 +01:00
Rainer Killinger 3695f9fbb0 refactor: remove outdated unused tslint artifacts 2022-11-21 10:53:34 +01:00
Rainer Killinger 69fd8ff701 refactor: adjust code to match eslint rules 2022-11-21 10:53:34 +01:00
Rainer Killinger 30492c03ca refactor: move to current project setup standards 2022-11-21 10:53:32 +01:00
Rainer Killinger b693960ac2 ci: disallow cypress image build to silently fail 2022-11-21 10:32:37 +01:00
openstappsbot cafadb92b1 refactor: update all 2022-11-21 08:15:14 +00:00
Jovan Krunić f60a228392 fix: remove "extend landing" button when renewal not possible
Closes #338
2022-11-15 15:50:56 +01:00
Rainer Killinger 3ede650cc5 refactor: display of opening hours 2022-11-11 15:00:46 +00:00
Jovan Krunić e504d8cf6d fix: library account missing ready for pickup
Closes #330
2022-11-11 15:00:34 +00:00
Jovan Krunić 42b860e417 feat: add library action confirmations
Closes #334
2022-11-11 14:08:53 +00:00
Rainer Killinger cbbcc2e5e4 docs: update changelog 2022-11-09 18:23:21 +01:00
Rainer Killinger 3f030fd50f 1.4.1 2022-11-09 18:23:20 +01:00
Rainer Killinger 5f77877bb4 fix: include uri path in json log verbatim 2022-11-09 18:22:35 +01:00
Rainer Killinger 6aea21e81f docs: update changelog 2022-11-09 16:55:44 +01:00
Rainer Killinger 2982c8598e 1.4.0 2022-11-09 16:55:43 +01:00
Rainer Killinger 0486d733a1 refactor: update dependencies 2022-11-09 16:46:31 +01:00
Rainer Killinger 8c49c31760 feat: add support for log aggregators 2022-11-09 16:28:21 +01:00
Theaninova 6b08af6a74 feat: navigation rail 2022-11-08 16:21:40 +00:00
Rainer Killinger bd696f400f docs: update changelog 2022-11-08 15:06:52 +01:00
Rainer Killinger aac8e584a9 1.1.1 2022-11-08 15:06:51 +01:00
Rainer Killinger 8d6ea040c1 fix: removing transformations in production 2022-11-08 15:04:53 +01:00
Rainer Killinger b1a9043047 refactor: change modal presenation mode on iOS 2022-11-07 08:52:45 +00:00
Jovan Krunić bafabb1d4e fix: adjust library account user info
Closes #331
2022-11-04 12:34:54 +00:00
Jovan Krunić 0caa69c28c fix: extend landing period button not working on android
Closes #333
2022-11-04 10:50:39 +00:00
Thea Schöbl f7726378f4 fix: prevent multiple heavy setting inits 2022-11-04 10:49:12 +00:00
Rainer Killinger 3e6e1f7bc0 docs: update changelog 2022-11-02 13:55:57 +01:00
Rainer Killinger 5f91229e82 0.4.1 2022-11-02 13:55:56 +01:00
Rainer Killinger 0d3055f936 refactor: update dependencies 2022-11-02 13:48:15 +01:00
Jovan Krunić 15ccbe4c18 fix: refresh token not used by default auth provider
Closes #311
2022-11-01 18:41:15 +00:00
Rainer Killinger 5fdef95c06 feat: show availability in offers 2022-11-01 18:33:40 +00:00
Rainer Killinger e0f4ce134d docs: update changelog 2022-11-01 19:32:43 +01:00
Rainer Killinger 276e6d3b40 1.1.0 2022-11-01 19:32:42 +01:00
Rainer Killinger ae0612c6d5 refactor: update dependencies 2022-11-01 19:19:10 +01:00
Rainer Killinger 8aef5b8d5b fix: compatibility with log aggregators 2022-11-01 19:15:32 +01:00
Jovan Krunić fdee2db8a4 fix: prevent opening invalid links
Closes #328
2022-11-01 17:29:51 +00:00
Rainer Killinger 82ba5f8121 fix: calculating SCDateSeries for next unit view 2022-11-01 16:56:14 +00:00
Rainer Killinger 9c6b5131cd fix: recurring schedule offset and event limit 2022-11-01 16:56:14 +00:00
Rainer Killinger a037090eec fix: overview search bar scrolling behind header 2022-11-01 16:12:34 +00:00
Jovan Krunić bc13cc5e1f fix: encode URI parameter to proxy URI
Closes #326
2022-11-01 15:26:25 +00:00
Jovan Krunić aba9627661 refactor: adjust HeBIS templates in list
Closes #318
2022-11-01 14:55:56 +00:00
Jovan Krunić 18ab92909d refactor: temporarily remove cancel loan button
Closes #325
2022-11-01 13:59:48 +00:00
Thea Schöbl 44b6a4aea0 fix: news module not scrollable on large screens 2022-11-01 13:51:46 +00:00
Thea Schöbl f349bd7233 feat: search url query param handling 2022-11-01 12:58:29 +00:00
Theaninova 38f0a30076 fix: header logo changing size on ios navigate 2022-10-26 14:37:48 +02:00
Thea Schöbl 8b2f2c063c fix: profile module items show click effect on scroll 2022-10-25 10:18:22 +00:00
Thea Schöbl bc4c3d78db feat: scroll schedule cursor into view 2022-10-24 17:21:12 +00:00
Rainer Killinger 42e2f3a0cb test: fix outdated dish offer translation 2022-10-24 11:27:36 +02:00
Rainer Killinger d647719201 refactor: remove unused FileOpener2 dependency 2022-10-24 10:40:39 +02:00
openstappsbot 107d94d499 refactor: update all 2022-10-24 07:16:13 +00:00
Rainer Killinger 1a340ff700 docs: update changelog 2022-10-21 18:29:22 +02:00
Rainer Killinger f6f93df2fa 0.4.0 2022-10-21 18:29:21 +02:00
Rainer Killinger 1791b0df51 refactor: config text and semester date bounds 2022-10-21 18:20:49 +02:00
Rainer Killinger d59b55c152 refactor: replace StApps with Open StApps 2022-10-21 18:19:20 +02:00
Theaninova c8f6a27c57 fix: dashboard next unit structural directive causing animation issues 2022-10-21 16:02:48 +00:00
Rainer Killinger acdd93eb99 refactor: pre release cleanup all over the place 2022-10-21 16:01:44 +00:00
Rainer Killinger c3130a392a feat: get tab navigation items from config 2022-10-20 11:19:06 +00:00
Thea Schöbl c3d66b36c8 fix: convert schema glob path to posix path 2022-10-20 09:52:55 +00:00
Rainer Killinger e6df1a2185 refactor: update dependencies 2022-10-18 15:27:36 +02:00
Rainer Killinger 67f4a3f2c4 refactor: minor adjustments to config 2022-10-18 15:27:21 +02:00
Rainer Killinger edaff443e8 docs: update changelog 2022-10-18 14:17:35 +02:00
Rainer Killinger 33c134e4de 0.44.0 2022-10-18 14:17:33 +02:00
Rainer Killinger baafbcb598 ci: move to private runner 2022-10-18 14:12:02 +02:00
openstappsbot 34c30d1b14 refactor: update typescript-eslint monorepo to v5.40.1 2022-10-18 11:53:53 +00:00
openstappsbot a19893e56d refactor: update all 2022-10-18 07:09:48 +00:00
Jovan Krunić 5e1a902d4c fix: translations 2022-10-17 15:17:19 +02:00
Jovan Krunić 998edcb5cd fix: user info card
Closes #305
2022-10-17 15:08:21 +02:00
Rainer Killinger 8dae143d72 ci: move integration test back to shared runner 2022-10-13 13:47:54 +02:00
Rainer Killinger e280e995bf ci: move all jobs to private runners 2022-10-13 13:04:23 +02:00
Rainer Killinger 3980496c77 ci: skip image test on main and develop branches 2022-10-13 12:53:17 +02:00
Rainer Killinger e0717a96ef feat: update to elasticsearch 8.4 2022-10-13 10:50:55 +00:00
openstappsbot b88c2f6428 refactor: update typescript-eslint monorepo to v5.40.0 2022-10-12 13:10:56 +00:00
Rainer Killinger 937ee4ddce refactor: app config menu structure 2022-10-12 12:31:02 +02:00
Rainer Killinger 7eb727ea27 docs: update changelog 2022-10-12 12:16:22 +02:00
Rainer Killinger 134c2e4c84 1.0.1 2022-10-12 12:16:21 +02:00
Thea Schöbl e395e9d270 feat: profile page sections
Close #233, #261, #267
2022-10-11 16:01:38 +00:00
openstappsbot 60bc460841 refactor: update typescript-eslint monorepo to v5.40.0 2022-10-11 15:43:41 +00:00
Rainer Killinger 48218e89da docs: update changelog 2022-10-11 16:57:52 +02:00
Rainer Killinger 02d7208d73 0.71.0 2022-10-11 16:57:50 +02:00
Rainer Killinger 6b9b1fa854 fix: temporary disable flaky ui test 2022-10-11 16:50:33 +02:00
Rainer Killinger 75155a9a86 refactor: remodel app config menu categories 2022-10-11 11:41:21 +00:00
Jovan Krunić dd138fd0be feat: add new book categories
Closes #147
2022-10-11 12:32:01 +02:00
openstappsbot c8be14f9d8 refactor: update all 2022-10-11 07:22:17 +00:00
Rainer Killinger 3e831c1648 refactor: reference openstapps framework vesion 2022-10-10 14:52:32 +02:00
Rainer Killinger 5a2d9f3075 ci: use custom cypress image 2022-10-10 14:52:14 +02:00
Thea Schöbl 28fbfef18c fix: download events should respect selection
fix: show indeterminate state for tree node when child is indeterminate
2022-10-10 12:44:56 +00:00
Rainer Killinger 4056f09448 ci: fix incompatible node version in builder image 2022-10-10 14:33:19 +02:00
Rainer Killinger c86880da39 ci: focus scheduled npm audit on prod dependencies 2022-10-10 14:13:56 +02:00
Rainer Killinger 8d82119d95 ci: add custom cypress image with latest browsers 2022-10-10 14:08:56 +02:00
Rainer Killinger 6f2fdf9219 docs: update changelog 2022-10-10 10:14:02 +02:00
Rainer Killinger d7abfec9fd 0.24.0 2022-10-10 10:14:00 +02:00
openstappsbot 0d28f6ae55 refactor: update all 2022-10-10 07:12:33 +00:00
openstappsbot 57a0c02805 refactor: update all 2022-10-10 07:09:20 +00:00
Jovan Krunić ec511fb8f4 fix: remove item before adding it to secure storage 2022-10-08 09:18:44 +00:00
Rainer Killinger fed4f20c3c fix: failing native http requests with body 2022-10-07 16:40:15 +02:00
Rainer Killinger 5ddff5fe12 refactor: move to eslint 2022-10-07 08:24:47 +00:00
Rainer Killinger c712fa17f7 refactor: search related app ui translations 2022-10-02 20:48:38 +02:00
Rainer Killinger a0c1045c58 refactor: update capacitor related dependencies 2022-09-30 15:48:36 +02:00
Rainer Killinger 7799b5187a fix: malformed supported orientations on iOS 2022-09-30 15:09:07 +02:00
Rainer Killinger 2da9e8ad1e fix: include styles.xml for android builds 2022-09-30 14:54:13 +02:00
Rainer Killinger feee9e8db9 fix: status bar being black on Android 13 devices 2022-09-30 13:00:52 +02:00
Rainer Killinger 3316ad9169 fix: background fetch crashing android app 2022-09-30 08:25:00 +00:00
Rainer Killinger 1af9140cea refactor: set supported orientations for iOS build 2022-09-28 12:19:26 +02:00
Rainer Killinger 2ddffe6d4f ci: allow redundant pipelines to be skipped 2022-09-28 11:53:14 +02:00
Thea Schöbl 9f8ab5c7a1 feat: dashboard ui tests 2022-09-27 22:13:54 +00:00
Rainer Killinger eb108c7414 ci: remove review stage on merge trains 2022-09-27 18:36:51 +02:00
Theaninova b8db0f3e70 fix: translate back button title 2022-09-27 13:44:47 +00:00
Thea Schöbl 92eb0ee3b0 refactor: news module styling 2022-09-27 13:44:06 +00:00
Rainer Killinger 7ecba0b781 feat: tab navigation bar animations and state 2022-09-23 16:34:07 +02:00
Rainer Killinger b2cc1fd91f fix: make keyboard dismissable on mobile devices 2022-09-23 16:19:53 +02:00
Thea Schöbl 4a3f79ca20 refactor: move event select popup to a modal 2022-09-23 16:19:53 +02:00
Rainer Killinger 8a04a43903 fix: cards not having rounded corners in safari 2022-09-23 16:19:53 +02:00
Jovan Krunić f39c29f10b fix: modals not reacting after several uses 2022-09-23 16:19:08 +02:00
Thea Schöbl 848d2574c7 feat: dynamic news page rows 2022-09-21 15:30:13 +00:00
Thea Schöbl 1211369724 Initial commit 2022-09-21 14:47:14 +00:00
Jovan Krunić 13cee2d426 fix: daia availability 2022-09-20 13:58:32 +00:00
Rainer Killinger b38a96996a fix: set android status bar color correctly 2022-09-16 14:12:09 +02:00
Rainer Killinger 7bfc3fc026 fix: setting version code via fastlane plugin 2022-09-12 14:49:54 +02:00
Rainer Killinger 855531fefb refactor: polish map module ui/ux 2022-09-08 14:44:20 +00:00
Thea Schöbl 37dd29a60f Resolve "Dashboard navigation icons are saved in user preferences" 2022-09-08 14:07:05 +00:00
Jovan Krunić d571b1dbe5 feat: display availability and item data for library items 2022-09-08 13:02:19 +00:00
Daniel Blumrich 605aa1b782 feat:Change styles on dashboard, add animations 2022-09-08 11:58:57 +00:00
Thea Schöbl 0d755bcbd3 fix: correct data path color
fix: missing ionic component icons
feat: parallax detail background
2022-09-08 07:23:58 +00:00
Rainer Killinger d22a67f842 Resolve "Update Capacitor dependencies to v4" 2022-09-06 14:51:23 +00:00
Thea Schöbl 0b037f96e6 feat: assessment tree view 2022-09-05 13:16:00 +00:00
Rainer Killinger 1ba66aa4fb docs: update changelog 2022-09-02 16:11:18 +02:00
Rainer Killinger b71a30db1f 0.3.1 2022-09-02 16:11:17 +02:00
Rainer Killinger 43c469d66a refactor: update @openstapps/core 2022-09-02 15:56:04 +02:00
Rainer Killinger 608429c139 docs: update changelog 2022-09-02 14:24:32 +02:00
Rainer Killinger 27ed3c11f1 0.70.0 2022-09-02 14:24:30 +02:00
Rainer Killinger b183198029 feat: add auth provider to config menu items 2022-09-02 14:18:24 +02:00
Rainer Killinger 9ad402842d feat: automate generation for universal link files 2022-08-26 15:30:50 +02:00
Theaninova 9bc3642990 fix: correct html whitespace handling for icon detection 2022-08-26 14:07:58 +02:00
Thea Schöbl de10654675 test: rework ui tests for new layout 2022-08-25 14:40:33 +00:00
Rainer Killinger 608f58ccbf docs: update changelog 2022-08-24 12:31:02 +02:00
Rainer Killinger dde4a0d1cd 0.3.0 2022-08-24 12:30:57 +02:00
Rainer Killinger f2d9c945e5 docs: update changelog 2022-08-23 12:00:03 +02:00
Rainer Killinger 769c6f1f7e 0.43.0 2022-08-23 11:59:59 +02:00
Rainer Killinger 8c9fdb4f24 refactor: gitlab ci template audit job 2022-08-23 11:34:21 +02:00
Rainer Killinger ba07267372 ci: enforce npm audit for production dependencies 2022-08-23 10:56:36 +02:00
Rainer Killinger 001cd4b4de refactor: update some dependencies 2022-08-23 10:56:35 +02:00
Rainer Killinger c2b0d22a25 refactor: move to express-prom-bundle for monitoring 2022-08-23 10:56:32 +02:00
Jovan Krunić 9e1017edfb refactor: use material symbols for menu 2022-08-22 15:25:00 +00:00
Rainer Killinger 557d050b36 docs: update changelog 2022-08-22 17:16:31 +02:00
Rainer Killinger 6c64086fef 0.2.0 2022-08-22 17:16:13 +02:00
Rainer Killinger 8ec8fb3386 docs: update changelog 2022-08-22 17:04:50 +02:00
Theaninova 0bce9e5452 fix: address late init from ionic components 2022-08-22 10:40:46 +00:00
Rainer Killinger 2130d84920 ci: fix and enhance coverage report 2022-08-22 12:34:55 +02:00
Rainer Killinger c7b30cf749 ci: fix stop_review job 2022-08-22 11:57:54 +02:00
Rainer Killinger 399e1a6f7e refactor: update depedencies 2022-08-22 11:30:59 +02:00
Thea Schöbl 68734bfe21 refactor: migrate to material symbols icon set 2022-08-19 11:48:34 +00:00
Rainer Killinger f3cf3b30e3 refactor: layout detail adjustments
refactor: increase contrast of toolbar fav button
refactor: remove non working localization for news
refactor: equalize tab bar in top toolbar
refactor: padding on map buttons and rename them
refactor: repair profile card alignments for safari
refactor: fix dashboard resize behavior on safari
refactor: make title card button reachable again
refactor: put card hover in media query
refactor: realign schedule view toolbar
refactor: adjust toolbar heights
refactor: introduce proper header logo
2022-08-18 17:19:58 +00:00
Jovan Krunić ebdc14d3c3 fix: logged out button not showing on profile
Closes #239
2022-08-18 12:28:41 +00:00
Rainer Killinger 5e8745e742 ci: add cobertura coverage report 2022-08-17 17:06:21 +02:00
openstappsbot 6e07041215 refactor: update all 2022-08-17 17:06:19 +02:00
Rainer Killinger f2cb318a09 ci: add cobertura coverage report 2022-08-17 16:35:14 +02:00
openstappsbot c4016fd29a refactor: update all 2022-08-17 16:30:06 +02:00
Rainer Killinger 6e50b89b1a docs: update changelog 2022-08-17 16:16:49 +02:00
Rainer Killinger 62ab6384d3 0.69.0 2022-08-17 16:16:47 +02:00
Rainer Killinger f864c64efa refactor: move to eslint 2022-08-17 16:09:45 +02:00
Rainer Killinger c1dc7b4e8f ci: add cobertura coverage report 2022-08-17 14:04:50 +02:00
Rainer Killinger a096d5be62 docs: update contributors list 2022-08-17 14:04:12 +02:00
openstappsbot ed6358a0c8 refactor: update all 2022-08-17 14:00:49 +02:00
Rainer Killinger 784c3ee2d9 docs: update changelog 2022-08-17 13:36:06 +02:00
Rainer Killinger 123c330d50 0.3.0 2022-08-17 13:36:05 +02:00
Rainer Killinger 37483abb9f Merge branch 'renovate/all' into 'master'
refactor: update all

See merge request openstapps/es-mapping-generator!7
2022-08-17 11:29:41 +00:00
openstappsbot 746d98fed5 refactor: update all 2022-08-17 13:26:18 +02:00
Rainer Killinger 4be5cb2b6a docs: update changelog 2022-08-17 13:01:35 +02:00
Rainer Killinger 678323cc09 0.32.0 2022-08-17 13:01:34 +02:00
openstappsbot 910bbf923b refactor: update all 2022-08-17 12:54:09 +02:00
Rainer Killinger b97c0adc21 docs: update changelog 2022-08-17 11:47:35 +02:00
Rainer Killinger dd95fa0d1e 0.33.0 2022-08-17 11:47:34 +02:00
Rainer Killinger 35b4b6c823 feat: add proper coverage to ci templates 2022-08-17 11:45:04 +02:00
openstappsbot 308a6cf1ea refactor: update all 2022-08-17 11:43:05 +02:00
Rainer Killinger e14b1248d5 ci: add cobertura coverage report 2022-08-17 11:32:18 +02:00
Rainer Killinger 734c6ec262 docs: update changelog 2022-08-17 10:17:40 +02:00
Rainer Killinger 6c51f777dd 1.0.0 2022-08-17 10:17:39 +02:00
Rainer Killinger 82a3651fb3 test: move to @testdeck/mocha 2022-08-17 10:13:26 +02:00
Rainer Killinger e6e75db3e8 refactor: update to typescript 4.4.4 2022-08-17 10:01:47 +02:00
openstappsbot eeda6ef26c refactor: update all 2022-08-16 07:14:31 +00:00
Rainer Killinger 7b1f0493da Resolve "Very unusual back button behavior" 2022-08-11 16:25:48 +00:00
Rainer Killinger a20200e52a fix: update PAIA API URL 2022-08-09 13:07:41 +02:00
Thea Schöbl 82479f463c feat: include font licenses in the licenses section 2022-08-08 16:28:54 +02:00
Rainer Killinger a4de628495 refactor: revert university specific changes 2022-08-08 16:28:52 +02:00
Rainer Killinger e9bedb78c6 refactor: add profile card dummy icon 2022-08-08 15:10:20 +02:00
Rainer Killinger 68877fe850 refactor: update .gitignore 2022-08-08 15:07:49 +02:00
Andy Bastian 7bbdba5c0b feat: apply new layout overhaul 2022-08-08 11:01:00 +00:00
Rainer Killinger c9cfe7e3ed docs: update changelog 2022-07-05 14:20:31 +02:00
Rainer Killinger 75138c7061 0.32.2 2022-07-05 14:20:29 +02:00
Rainer Killinger 0753ab9f33 fix: recommended CI settings 2022-07-05 14:20:07 +02:00
Jovan Krunić f16e5394cc fix: missing init (config setup) in default auth service
Closes #227
2022-07-05 13:54:35 +02:00
Rainer Killinger cef38e0f83 docs: update changelog 2022-07-05 13:05:04 +02:00
Rainer Killinger 383778e1e7 0.32.1 2022-07-05 13:05:03 +02:00
Rainer Killinger 40cb266d09 refactor: update package.json recommendations 2022-07-05 13:04:07 +02:00
Rainer Killinger e2e0e8aa70 refactor: update ci recommendations 2022-07-05 13:03:31 +02:00
Rainer Killinger df92e97cb6 fix: simplify dependency version checking 2022-07-05 13:01:29 +02:00
Rainer Killinger 612648e5d7 docs: update changelog 2022-07-05 10:16:46 +02:00
Rainer Killinger 97f48fcbb6 0.23.1 2022-07-05 10:16:45 +02:00
Rainer Killinger ac226d178a fix: documentation not generating 2022-07-05 10:16:19 +02:00
Rainer Killinger 0080b3782c docs: update changelog 2022-07-05 09:58:26 +02:00
Rainer Killinger c717bd3fe0 0.23.0 2022-07-05 09:58:25 +02:00
Rainer Killinger 8f7b2236de docs: update contributors 2022-07-05 09:57:56 +02:00
Rainer Killinger a2ba60abe7 refactor: update renovate rules 2022-07-05 09:54:55 +02:00
Rainer Killinger 75846c54b7 refactor: update dependencies 2022-07-05 09:54:54 +02:00
Rainer Killinger b66cecbdd9 docs: update contributors list 2022-07-04 16:30:12 +02:00
Rainer Killinger 0b112f1d01 docs: corrected copyright years 2022-07-04 15:46:50 +02:00
Rainer Killinger bb45c36d86 refactor: move to eslint 2022-07-04 15:46:07 +02:00
Rainer Killinger 3e2c7a1927 docs: update changelog 2022-07-04 14:15:21 +02:00
Rainer Killinger 61be2a34c9 0.42.0 2022-07-04 14:15:19 +02:00
Rainer Killinger 2e4a47ee8f refactor: update dependencies 2022-07-04 14:14:43 +02:00
Rainer Killinger 903bfe1967 docs: update changelog 2022-06-30 16:02:54 +02:00
Rainer Killinger a004fb8188 0.1.0 2022-06-30 16:02:40 +02:00
Rainer Killinger e9ec49a772 ci: refine job and stage managment 2022-06-30 14:45:44 +02:00
Rainer Killinger 389df797ad ci: clean up unused templates 2022-06-30 14:03:06 +02:00
Rainer Killinger f8453561d8 refactor: relocate non default config items 2022-06-30 14:03:06 +02:00
Thea Schöbl 418ba67d15 Resolve "Transition to ESLint" 2022-06-27 14:40:09 +00:00
Rainer Killinger 7f22cbb54c docs: update changelog 2022-06-27 16:04:10 +02:00
Rainer Killinger 8b9bb45868 0.68.0 2022-06-27 16:04:08 +02:00
openstappsbot 77f1f0a5b8 refactor: update all 2022-06-27 15:56:36 +02:00
Rainer Killinger 4bb007ede3 refactor: omit typedoc versions higher than 0.22.0 2022-06-27 15:53:51 +02:00
Rainer Killinger 51ae246a0f fix: documentation not beeing generated 2022-06-27 15:08:15 +02:00
Rainer Killinger 4afbb9722e docs: update changelog 2022-06-27 14:44:44 +02:00
Rainer Killinger 1b0c5d6981 0.31.0 2022-06-27 14:44:42 +02:00
Rainer Killinger be889ae17d refactor: clean up package-lock.json 2022-06-27 14:43:55 +02:00
openstappsbot cace737b92 refactor: update typescript-eslint monorepo to v5.29.0 2022-06-27 12:37:16 +00:00
Rainer Killinger 4052278d94 docs: update changelog 2022-06-27 14:21:32 +02:00
Rainer Killinger 0f73c9cb01 0.2.0 2022-06-27 14:21:31 +02:00
Rainer Killinger 8156885293 Merge branch 'renovate/all' into 'master'
refactor: update all

See merge request openstapps/es-mapping-generator!3
2022-06-27 12:20:38 +00:00
Rainer Killinger 7534744294 fix: marked version with audit issue 2022-06-27 14:16:40 +02:00
Rainer Killinger aeac607bf5 refactor: update dependencies 2022-06-27 14:09:08 +02:00
Rainer Killinger 0d3c2151d7 docs: update changelog 2022-06-27 13:52:56 +02:00
Rainer Killinger 448b5631ad 0.32.0 2022-06-27 13:52:54 +02:00
Rainer Killinger 0d0ba10922 refactor: update dependencies 2022-06-27 13:52:29 +02:00
Rainer Killinger 1547eab6a1 docs: update changelog 2022-06-27 13:34:54 +02:00
Rainer Killinger 57860b8933 1.1.0 2022-06-27 13:34:53 +02:00
Rainer Killinger 43064b2d2c docs: update REAME.md 2022-06-27 13:34:26 +02:00
Rainer Killinger d724db01ee refactor: update depdencies 2022-06-27 13:34:08 +02:00
openstappsbot e2a22653ca refactor: update all 2022-06-27 07:14:42 +00:00
openstappsbot 5d79ea75dd refactor: update all 2022-06-27 07:10:04 +00:00
Rainer Killinger 786abdbefa refactor: make keyboard dismissable on search bars 2022-06-24 08:14:06 +00:00
Rainer Killinger 9d31365d0a ci: tempoarily disable ui tests 2022-06-23 11:43:59 +02:00
Rainer Killinger 8ee364b2f7 ci: slim down scheduled pipelines 2022-06-23 09:52:25 +02:00
Rainer Killinger ae429ca5fb fix: CI stage/job setup 2022-06-23 09:17:11 +02:00
Andy Bastian 8ecf347c9a feat: Implement variable for styling 2022-06-17 08:13:04 +02:00
Rainer Killinger c1f90b0a68 ci: use ui test manual stage for cypress 2022-06-13 16:57:57 +02:00
Theaninova 8710ba43ff test: increase ui test coverage 2022-06-13 16:57:27 +02:00
Jovan Krunić ca1d2444e0 feat: add hebis proxy url
Close #120
2022-06-13 09:45:05 +02:00
Jovan Krunić 9e71efca9f fix: handle prices as an optional property
Closes #219
2022-06-09 10:31:27 +00:00
Andy Bastian 915fd72bd4 feat: add new font and new icons 2022-06-09 08:22:30 +00:00
Rainer Killinger 04afdb7543 refactor: prevent accidental scolls on map widget 2022-06-09 07:04:22 +00:00
Rainer Killinger 401e96e86e refactor: update package-lock.json 2022-06-09 07:04:22 +00:00
Jovan Krunić 83d9a4a8b8 fix: adjust hebis catalog templates 2022-06-08 10:46:23 +00:00
Rainer Killinger 17a796e97b feat: copyright notice year replacement 2022-06-07 12:50:40 +02:00
Rainer Killinger 62c60448aa docs: update changelog 2022-06-02 15:05:24 +02:00
Rainer Killinger a4277d392d 0.31.0 2022-06-02 15:05:23 +02:00
Rainer Killinger 32480b7bfa refactor: update dependencies 2022-06-02 15:00:09 +02:00
Rainer Killinger 405f8cf496 fix: npmignore eslint exceptions 2022-06-02 14:54:02 +02:00
Theaninova 899e3c6ac0 docs: update changelog 2022-06-01 19:44:50 +02:00
Theaninova 134acd61db 0.30.0 2022-06-01 19:44:46 +02:00
Theaninova a2c334526c refactor: windows compat 2022-06-01 19:44:10 +02:00
Thea Schöbl 3f81afda82 feat: expandable accordion in grades module 2022-06-01 15:26:23 +00:00
Thea Schöbl 9430e10387 feat: transition from TSLint to ESLint 2022-06-01 12:00:53 +00:00
openstappsbot 0698ca616c refactor: update all 2022-06-01 07:54:14 +00:00
Rainer Killinger 2361c100bb ci: apply renovate config changes 2022-06-01 09:49:08 +02:00
Rainer Killinger 51bb8e3b9c refactor: update dependencies 2022-05-31 16:52:09 +02:00
Rainer Killinger 1015fd24ac docs: update changelog 2022-05-31 16:13:54 +02:00
Rainer Killinger 618a9046bc 0.67.0 2022-05-31 16:13:51 +02:00
Rainer Killinger c43e2b38e6 refactor: remove SCMetaTranslations singletons 2022-05-31 16:10:41 +02:00
Rainer Killinger 9d0ff36af5 refactor: untangle SCCreativeWork inheritance 2022-05-30 17:00:14 +02:00
Rainer Killinger 0fe315dcd7 ci: reenable production builds for review branches 2022-05-27 18:00:34 +02:00
Rainer Killinger b97006e71e refactor: update dependencies 2022-05-27 17:27:41 +02:00
Rainer Killinger 869eafb629 docs: update changelog 2022-05-27 17:13:57 +02:00
Rainer Killinger 0dc3792fb9 0.41.1 2022-05-27 17:13:55 +02:00
Rainer Killinger 223b5ee5c0 refactor: update dependencies 2022-05-27 17:13:23 +02:00
Rainer Killinger 31bb7e89ea docs: update changelog 2022-05-27 16:54:09 +02:00
Rainer Killinger 942f04e250 0.66.1 2022-05-27 16:54:06 +02:00
Rainer Killinger 930b574618 refactor: update dependencies 2022-05-27 16:51:08 +02:00
Rainer Killinger b0666060ab docs: update changelog 2022-05-27 16:42:55 +02:00
Rainer Killinger 448055fd23 0.30.1 2022-05-27 16:42:53 +02:00
Rainer Killinger 65f25afd89 refactor: update dependencies 2022-05-27 16:41:54 +02:00
Rainer Killinger 28e03d7e18 docs: update changelog 2022-05-27 16:36:13 +02:00
Rainer Killinger 8035d6ef5a 0.1.0 2022-05-27 16:36:12 +02:00
Rainer Killinger 9ed2a4da0c refactor: update dependencies 2022-05-27 16:35:44 +02:00
Rainer Killinger 73501e0fa3 docs: update changelog 2022-05-27 16:30:11 +02:00
Rainer Killinger 8d654f22cb 0.29.1 2022-05-27 16:30:10 +02:00
Rainer Killinger 9560e0c526 refactor: update dependencies 2022-05-27 16:29:37 +02:00
Rainer Killinger 73e331cd94 docs: update changelog 2022-05-27 16:07:21 +02:00
Rainer Killinger 3ae31f0b2d 0.8.1 2022-05-27 16:07:20 +02:00
Rainer Killinger 15286dd717 refactor: update dependencies 2022-05-27 16:06:38 +02:00
Rainer Killinger 7b88be3a75 refactor: initalize meta classes in translator 2022-05-27 15:21:59 +02:00
Rainer Killinger ae5299c128 ci: update cypress images and remove executable 2022-05-23 11:28:30 +02:00
Rainer Killinger bc1ae1f02f ci: move to private gitlab runners 2022-05-23 11:28:00 +02:00
Frank Nagel 2212e0723e refactor: raise Typescript version to 4.4.4 2022-05-20 13:08:55 +00:00
Rainer Killinger 9db2489ab2 fix: relative keystore file location for gradle 2022-05-20 13:30:36 +02:00
Rainer Killinger 7111f44fb0 refactor: make local copy of keystore for gradle 2022-05-20 11:44:15 +02:00
Jovan Krunić 5edec7154e refactor: improve library account views 2022-05-19 15:41:07 +00:00
Jovan Krunić 9efc41a8f8 refactor: use geo for sort after backend change
Closes #210
2022-05-19 08:54:19 +02:00
Jovan Krunić 6e94e1f7e5 refactor: adjust distance sort info in config
CLoses #118
2022-05-19 08:47:26 +02:00
Jovan Krunić a65cfc1176 docs: update changelog 2022-05-17 21:02:57 +02:00
Jovan Krunić f54d04f94d 0.41.0 2022-05-17 21:02:56 +02:00
openstappsbot 315e15f53d refactor: update all 2022-05-17 13:07:17 +00:00
Jovan Krunić bb3be5a816 fix: take coordinates in right order
Closes #116
2022-05-16 11:51:10 +00:00
Jovan Krunić b7ae2cf019 Resolve "Auth providers should be ready on components init" 2022-05-13 09:05:33 +00:00
Thea Schöbl 9ce8c58b98 refactor: simplify geo queries 2022-05-13 08:26:23 +00:00
Jovan Krunić 5277f7601c docs: update changelog 2022-05-11 13:54:54 +02:00
Jovan Krunić 5241a01b55 0.66.0 2022-05-11 13:54:52 +02:00
Rainer Killinger 427e357b8d docs: update changelog 2022-05-05 15:47:23 +02:00
Rainer Killinger 12fc2d6532 1.0.0 2022-05-05 15:47:13 +02:00
Jovan Krunić 28caaf1d21 fix: suppress router event logs in console
Closes #207
2022-05-04 16:30:27 +00:00
Thea Schöbl 418fc6ba05 feat: support es-mapping tags 2022-05-04 10:37:15 +00:00
Thea Schöbl cb19ff3598 Merge branch '2-allow-e2e-abbreviation' into 'master'
Resolve "Allow e2e abbreviation"

Closes #2

See merge request openstapps/eslint-config!1
2022-05-04 10:34:13 +00:00
Thea Schöbl b8adbcd030 Resolve "Allow e2e abbreviation" 2022-05-04 10:34:13 +00:00
Thea Schöbl 9242438132 fix: timetable dates cannot be removed 2022-05-03 11:06:06 +00:00
Theaninova 484be6a890 feat: add geo filter envelope support 2022-04-28 09:50:44 +02:00
Rainer Killinger 25171fe4d7 refactor: check out gradle props on android builds 2022-04-25 17:19:30 +02:00
Rainer Killinger 9d634f2a89 docs: update changelog 2022-04-25 13:22:49 +02:00
Rainer Killinger f0bbed1445 0.0.3 2022-04-25 13:22:47 +02:00
Rainer Killinger 334f0d7069 ci: publish npm package with public access 2022-04-25 13:22:23 +02:00
Rainer Killinger 8ceffa23a9 docs: update changelog 2022-04-25 13:08:39 +02:00
Rainer Killinger 8edaa5def1 0.0.2 2022-04-25 13:08:37 +02:00
Rainer Killinger ee744cf2cc docs: update devDependencies in README 2022-04-25 13:08:04 +02:00
Rainer Killinger f1480f3d72 ci: add test stage 2022-04-25 13:05:16 +02:00
Rainer Killinger ab6173ccff test: add eslint config validation 2022-04-25 13:04:30 +02:00
Rainer Killinger 7a841a554a Add LICENSE 2022-04-25 12:59:06 +02:00
Thea Schöbl f36b1c0588 docs: update docs 2022-04-25 12:58:57 +02:00
Thea Schöbl bc15df828d feat: gitlab-ci 2022-04-21 00:14:48 +02:00
Thea Schöbl 5f8907ff7d Initial commit 2022-04-21 00:13:37 +02:00
Thea Schöbl 30f773627e Initial commit 2022-04-21 00:12:31 +02:00
Rainer Killinger e9bd2b7a6c ci: actually make web target 2022-04-14 16:19:21 +02:00
Thea Schöbl 29585faff6 refactor: license typo 2022-04-14 10:53:29 +00:00
Thea Schöbl 30d801a3b4 fix: missing translations 2022-04-14 10:53:29 +00:00
Thea Schöbl c54ea867bd feat: show feedback when map search yields no results 2022-04-14 10:53:29 +00:00
Jovan Krunić 488150f7f5 fix: add areaServed to person detail 2022-04-14 08:52:31 +00:00
Rainer Killinger f0a2ca7e8e test: fix failing e2e navigation test 2022-04-14 09:47:39 +02:00
Rainer Killinger 1442e53430 test: add case for navigation 2022-04-13 16:22:50 +02:00
Rainer Killinger 387769b05d refactor: enable gitlab review tool 2022-04-13 16:22:50 +02:00
Rainer Killinger dac2f5656a refactor: update to Angular 13 2022-04-13 16:22:44 +02:00
Thea Schöbl 7b491ed3bb feat: Ionic v6 breadcrumbs in catalog module 2022-04-13 14:10:16 +00:00
Thea Schöbl 552911cfcf feat: webpack bundle analyzer 2022-04-13 13:43:55 +00:00
Thea Schöbl 72e5fcca77 refactor: remove lodash 2022-04-12 09:59:55 +00:00
Rainer Killinger fd7f664792 refactor: remove refresher from data detail view 2022-04-05 14:04:25 +00:00
Jovan Krunić d2a23e581e Resolve "Read library account URLs from the backend" 2022-04-05 13:30:47 +00:00
Rainer Killinger d3c509ccb4 refactor: update dependencies 2022-04-04 21:41:54 +02:00
Rainer Killinger d2fe89ec3a docs: update changelog 2022-04-04 21:37:18 +02:00
Rainer Killinger 0d3248fff0 0.40.0 2022-04-04 21:37:17 +02:00
Rainer Killinger 1748ba3825 refactor: update dependencies 2022-04-04 21:33:14 +02:00
Rainer Killinger 45e0f26391 docs: update changelog 2022-04-04 20:56:06 +02:00
Rainer Killinger ead47aca19 0.65.1 2022-04-04 20:56:04 +02:00
Rainer Killinger f9c2414000 docs: adjust typedoc option 'entryPointStrategy' 2022-04-04 20:55:16 +02:00
Rainer Killinger 523de51160 docs: update changelog 2022-04-04 20:47:21 +02:00
Rainer Killinger d912c03eb0 0.65.0 2022-04-04 20:47:19 +02:00
Rainer Killinger a638f5447b refactor: update dependencies 2022-04-04 20:42:01 +02:00
Rainer Killinger f6168bf678 docs: update changelog 2022-04-04 20:34:01 +02:00
Rainer Killinger 5f1cf06ce3 0.30.0 2022-04-04 20:33:59 +02:00
Rainer Killinger 4c86ced5b7 refactor: update dependencies 2022-04-04 20:29:22 +02:00
Thea Schöbl 93c37b26cc feat: support overlapping timetable dates 2022-03-25 10:52:40 +00:00
Jovan Krunić 2e2a5897b8 refactor: use current location for auth unless production 2022-03-23 21:52:27 +01:00
Jovan Krunić 0479e7cdc3 test: use cypress instead of protractor 2022-03-23 10:14:56 +00:00
Rainer Killinger b95c796358 refactor: bump app version 2022-03-21 14:09:11 +01:00
Rainer Killinger 87323e70cf fix: shell variable substitution statements 2022-03-21 13:51:49 +01:00
Rainer Killinger edd2ccffe9 refactor: update to ionic v6 2022-03-21 11:23:07 +00:00
Rainer Killinger e30ef33cc8 docs: update changelog 2022-03-21 11:37:47 +01:00
Rainer Killinger 5405c5bc31 0.29.1 2022-03-21 11:37:45 +01:00
Rainer Killinger 28552a665f refactor: update dependencies 2022-03-21 11:10:22 +01:00
Rainer Killinger cecf95aa46 docs: update changelog 2022-03-21 11:05:27 +01:00
Rainer Killinger 6fd8c5adf3 0.64.0 2022-03-21 11:05:25 +01:00
Rainer Killinger db24b41d99 test: adjust HDS samples to production version 2022-03-21 11:00:11 +01:00
Rainer Killinger b1fcd22ab2 refactor: update dependencies 2022-03-17 12:44:59 +01:00
Rainer Killinger 8962da31a3 docs: update changelog 2022-03-17 12:26:48 +01:00
Rainer Killinger de8033c218 0.39.0 2022-03-17 12:26:42 +01:00
Rainer Killinger cb9dd83bef refactor: update dependencies 2022-03-17 12:08:37 +01:00
Thea Schöbl e68d1b73f9 feat: assessments module 2022-03-17 09:59:52 +00:00
Rainer Killinger ec8b553d2b refactor: handle ssh secrets as base64 encoded 2022-03-16 12:30:21 +01:00
Rainer Killinger 368c26ce8c fix: iOS fastfile behavior 2022-03-15 13:27:39 +01:00
Rainer Killinger 58ce196507 ci: refinie web deploy job 2022-03-14 15:03:56 +01:00
Rainer Killinger 3eeab34bc1 fix: add zip package to docker image 2022-03-10 12:01:01 +01:00
Rainer Killinger 0edc598667 docs: update README and file paths 2022-03-10 11:49:45 +01:00
Rainer Killinger 9537833247 ci: tag ios jib with macos runner 2022-03-10 11:49:43 +01:00
Rainer Killinger eea8d6d339 refactor: adjust linting to latest eslint changes 2022-03-08 11:57:34 +01:00
Rainer Killinger 91b1e3a52b refactor: update dependencies 2022-03-07 16:18:49 +01:00
Jovan Krunić f3e83bfcc8 fix: add PKCE parameters for PAIA auth 2022-02-25 17:37:18 +01:00
Jovan Krunić b56322b05c test: add missing svg assets 2022-02-23 15:09:55 +00:00
Jovan Krunić 098b1d733e test: inject instead of deprecated TestBed get
Additionally refactor tests and ts-ignore annotations.
2022-02-23 15:09:55 +00:00
Jovan Krunić 37fe25c42f test: clean up async behaviour 2022-02-23 15:09:55 +00:00
Jovan Krunić 89dc41ad35 test: fix by mocking geolocation 2022-02-23 15:09:55 +00:00
Jovan Krunić 562f357374 test: prevent error from leaking 2022-02-23 15:09:55 +00:00
Jovan Krunić 93863510fa fix: config.get issue by updating ionic 2022-02-23 15:09:55 +00:00
Jovan Krunić b7be5b9dbc test: mock content for the context menu 2022-02-23 15:09:55 +00:00
Thea Schöbl aabb29ad05 Resolve "Error: Database not created" 2022-02-23 14:58:33 +00:00
Rainer Killinger 6a5bad7896 ci: add deploy jobs for app targets 2022-02-18 15:50:59 +01:00
Rainer Killinger 7596759f77 ci: add image building 2022-02-18 14:48:50 +01:00
Rainer Killinger 4b258234e0 refactor: enable CI only configuration 2022-02-18 11:43:57 +01:00
Thea Schöbl 75f4644940 refactor: migrate all cordova plugins to capacitor 2022-02-17 08:37:32 +00:00
Jovan Krunić cdb6ac4084 fix: add missing profile translation 2022-02-16 15:05:07 +01:00
Jovan Krunić 11017955ee build: update karma cause of deprecation warning
Closes #184
2022-02-16 15:05:07 +01:00
Jovan Krunić eaf9da3c84 refactor: get appropriate provider via auth helper 2022-02-16 15:05:06 +01:00
Jovan Krunić a5e5a5b407 feat: resume at origin path after login
Closes #168
2022-02-11 19:54:46 +01:00
Rainer Killinger 8abd993667 refactor: version code handling 2022-02-10 21:10:40 +01:00
Jovan Krunić 19b36c07b7 test: adjust tests to config init changes 2022-02-10 16:21:35 +01:00
Jovan Krunić c9720dc104 fix: omit sync native calendar when no uuids
Related to #177
2022-02-10 16:21:35 +01:00
Jovan Krunić bde0df219c refactor: initialize config via APP_INITIALIZER
Closes #181
2022-02-10 16:21:34 +01:00
Rainer Killinger e78496fb8b refactor: read android secrets from environment 2022-02-10 15:19:06 +01:00
Rainer Killinger 411e0970b8 refactor: remove inheritance from daia provider 2022-02-09 18:59:55 +01:00
Rainer Killinger d22e6ff87f refactor: add mulitple customization features 2022-02-09 15:51:32 +01:00
Rainer Killinger 6ce435fc05 refactor: avoid errors in daia availability UI 2022-02-09 11:37:51 +00:00
Rainer Killinger 988236e646 refactor: read daia service url from app config 2022-02-09 11:37:51 +00:00
Rainer Killinger 2cd0a70fd4 build: fix typo in AndroidManifest.xml 2022-02-09 11:46:57 +01:00
Jovan Krunić faa0ed60f4 build: remove dev android config
Closes #179
2022-02-09 10:57:19 +01:00
Jovan Krunić 1727c0280f refactor: remove unused fake environment 2022-02-08 19:33:08 +01:00
Jovan Krunić ea935232ab build: use custom url scheme independent from appId 2022-02-08 19:16:53 +01:00
Jovan Krunić 35c9991a61 build: move app host to strings.xml 2022-02-08 19:16:52 +01:00
Jovan Krunić fb7b3fd1d2 refactor: read auth provider info from app config 2022-02-07 16:46:29 +00:00
Rainer Killinger c88ffe549f refactor: include daia in feature config 2022-02-07 11:30:29 +01:00
Rainer Killinger 18c628a002 refactor: add dynamic semester boostings 2022-02-04 16:20:25 +01:00
Jovan Krunić 9c5581af2c fix: fix markdown formatting in config 2022-02-04 10:14:01 +01:00
Rainer Killinger a1592f84cc fix: enable background fetch on iOS 2022-02-02 17:27:42 +01:00
Rainer Killinger 1195c5ffc8 fix: enable overflow for day labels in schedule 2022-02-02 17:24:57 +01:00
Jovan Krunić 7bece91206 refactor: use appropriate status numbers (library account) 2022-02-02 09:53:09 +00:00
Jovan Krunić 90b97339d3 fix: assign navigation app name dynamically 2022-02-02 09:37:20 +00:00
Jovan Krunić df31e4f6fd refactor: add Goethe-Uni about information
Closes #103
2022-02-01 11:27:05 +01:00
Rainer Killinger 4615fe804b refactor: add ionics color attribute to toolbars 2022-01-31 19:08:29 +01:00
Rainer Killinger d99b80d2c2 refactor: narrow down cordova plugins to used ones 2022-01-31 15:57:57 +00:00
Rainer Killinger e7d5f83100 fix: schedule navigation bar layout 2022-01-31 15:57:57 +00:00
Thea Schöbl a57c3029df feat: calendar plugin 2022-01-31 15:57:38 +00:00
Thea Schöbl f6003d7f87 fix: imports from src in config files lead to crash 2022-01-31 15:34:45 +00:00
Jovan Krunić 080e6fa3e8 feat: add library account screens 2022-01-31 08:53:46 +00:00
Rainer Killinger 863a3ffd48 fix: daia_url missing in environment configs 2022-01-27 15:40:11 +01:00
Andy Bastian 9a3241c42a feat: add HeBIS HDS search 2022-01-27 14:11:35 +00:00
Thea Schöbl e4165901bb feat: schedule layout 2022-01-27 09:27:20 +00:00
Jovan Krunić 5bd0b50816 feat: turn on oauth2 state check for PAIA
Closes #172
2022-01-25 21:00:04 +01:00
Wieland Schöbl 72060cbed7 refactor: disable locate action chips 2022-01-25 16:28:50 +01:00
Rainer Killinger e65a81fcfa docs: fix openapi generation by dependency update 2022-01-25 16:12:23 +01:00
Rainer Killinger bbdf14c7a4 docs: update changelog 2022-01-25 15:51:27 +01:00
Rainer Killinger be40adcbf4 0.29.0 2022-01-25 15:51:25 +01:00
Rainer Killinger 0b33db9f89 refactor: update dependencies 2022-01-25 15:47:20 +01:00
Rainer Killinger d86a7353dd refactor: adjust to changes in core definitions 2022-01-25 15:24:01 +01:00
Rainer Killinger 4f87968943 docs: fix creation of typedoc pages 2022-01-25 15:02:33 +01:00
Rainer Killinger 6257ca0dd3 docs: update changelog 2022-01-25 12:44:22 +01:00
Rainer Killinger 6a87557109 0.38.0 2022-01-25 12:44:16 +01:00
Rainer Killinger 07feb8f03f refactor: add profile menu item 2022-01-25 11:22:11 +01:00
Rainer Killinger 9d8fe643a5 refactor: include latest changes from core#145 2022-01-25 11:22:06 +01:00
Thea Schöbl c0d0b1bd99 fix: make action chips react to changes of their item 2022-01-25 09:08:02 +00:00
Michel Jonathan Schmitz b5f239ea4e feat: add auth support (default and paia) 2022-01-24 18:43:00 +00:00
Rainer Killinger 83120a6734 feat: add client method for invoking plugin routes 2022-01-24 15:52:12 +01:00
Rainer Killinger d601880be1 refactor: update dependencies 2022-01-24 15:51:40 +01:00
Rainer Killinger 268588fb6f docs: update changelog 2022-01-24 14:47:04 +01:00
Rainer Killinger d3048a12d8 0.63.0 2022-01-24 14:47:02 +01:00
Rainer Killinger e14993114f fix: add auth object to index route 2022-01-24 14:45:17 +01:00
Wieland Schöbl 046a95ba1d fix: add event popover expanding beyond screen width 2022-01-24 11:58:36 +00:00
Thea Schöbl 54cc8838ae fix: some android devices don't support implied css animation units 2022-01-24 11:57:55 +00:00
Rainer Killinger 4237f6ad60 docs: update changelog 2022-01-21 17:15:16 +01:00
Rainer Killinger e7c1000bc4 0.62.0 2022-01-21 17:15:14 +01:00
Rainer Killinger e0adb2332e fix: add missing lastPublished to SCCreativeWork 2022-01-21 17:14:16 +01:00
Rainer Killinger e5696b23e7 docs: update changelog 2022-01-21 15:07:16 +01:00
Rainer Killinger 659d0974f7 0.61.0 2022-01-21 15:07:14 +01:00
Rainer Killinger e8304eeeb4 refactor: remove unused auth provider properties 2022-01-21 15:06:11 +01:00
Rainer Killinger dca9d26c66 docs: update changelog 2022-01-21 12:29:55 +01:00
Rainer Killinger 852e0f5373 0.60.0 2022-01-21 12:29:52 +01:00
Rainer Killinger 26dd531d24 refactor: split up SCUserConfiguration type 2022-01-21 12:22:13 +01:00
Rainer Killinger 52bdf93356 docs: update changelog 2022-01-20 14:20:17 +01:00
Rainer Killinger 7509610145 0.59.0 2022-01-20 14:20:15 +01:00
Rainer Killinger 972cdf392d refactor: make config auth provides be optional 2022-01-20 14:18:50 +01:00
Rainer Killinger 4f758f7d0c docs: update changelog 2022-01-18 15:13:06 +01:00
Rainer Killinger 980e899807 0.58.0 2022-01-18 15:13:04 +01:00
Rainer Killinger d1c5bb9595 refactor: use SCMap for feature configurations 2022-01-18 15:12:05 +01:00
Rainer Killinger dc9c0f528f docs: update changelog 2022-01-18 11:06:18 +01:00
Rainer Killinger 66d64e0858 0.57.0 2022-01-18 11:06:16 +01:00
Rainer Killinger 06339786c2 refactor: update dependencies 2022-01-18 11:01:01 +01:00
Rainer Killinger 8ed68481fa refactor: rename urlFragment in routes 2022-01-18 09:50:46 +01:00
Rainer Killinger e26042957c refactor: remodel features in app config 2022-01-18 09:50:44 +01:00
Rainer Killinger 7553620a5d feat: extend config to describe auth providers 2022-01-18 09:50:00 +01:00
openstappsbot 482dec345c refactor: update all 2022-01-17 08:08:42 +00:00
Rainer Killinger e73d8e6bc4 refactor: update dependencies 2022-01-10 16:45:02 +01:00
Rainer Killinger 33c60e414d ci: add jq to node and builder images 2022-01-10 16:42:39 +01:00
Rainer Killinger f068de3031 refactor: update dependencies 2021-12-17 12:36:12 +01:00
Rainer Killinger 8615203a3e docs: update changelog 2021-12-17 10:48:56 +01:00
Rainer Killinger 3a5ee64db5 0.37.0 2021-12-17 10:48:54 +01:00
Rainer Killinger bfe3faa01c refactor: update dependencies 2021-12-17 10:48:18 +01:00
Rainer Killinger 322c001e70 docs: update changelog 2021-12-17 10:35:53 +01:00
Rainer Killinger 830e249ac4 0.56.0 2021-12-17 10:35:50 +01:00
Rainer Killinger 8c9df3ea9a test: adjust testing resources 2021-12-17 10:34:03 +01:00
Rainer Killinger f85768d32e refactor: update dependencies 2021-12-17 10:33:20 +01:00
Rainer Killinger 71593b44c8 docs: update changelog 2021-12-17 10:19:56 +01:00
Rainer Killinger 408b61a57a 0.28.0 2021-12-17 10:19:53 +01:00
Rainer Killinger e82f4e9209 fix: ajv related tranistive build errors 2021-12-17 10:17:53 +01:00
Rainer Killinger 9a9bc029f8 docs: update changelog 2021-12-16 16:14:17 +01:00
Rainer Killinger c7cdb013e2 0.0.4 2021-12-16 16:14:16 +01:00
Rainer Killinger 5d38d6f180 refactor: update dependencies 2021-12-16 16:13:41 +01:00
Rainer Killinger 8b98b8afdc docs: update changelog 2021-12-15 16:20:09 +01:00
Rainer Killinger 7a01a6b305 0.36.0 2021-12-15 16:20:08 +01:00
Rainer Killinger bc2274a9ef refactor: update dependencies 2021-12-15 16:14:55 +01:00
Rainer Killinger 580ace368f docs: update changelog 2021-12-15 13:15:12 +01:00
Rainer Killinger 522be6643a 0.55.0 2021-12-15 13:15:10 +01:00
Rainer Killinger 8784309ddb refactor: update dependencies 2021-12-15 13:03:57 +01:00
Rainer Killinger f602d6fe41 docs: update changelog 2021-12-15 12:47:55 +01:00
Rainer Killinger fe72cfec43 0.27.0 2021-12-15 12:47:51 +01:00
Rainer Killinger c1b956986d ci: repair and clean up ci pipelines 2021-12-15 12:27:33 +01:00
Rainer Killinger 6a655fe28a docs: update changelog 2021-12-15 11:54:21 +01:00
Rainer Killinger 78d15cabc8 0.26.0 2021-12-15 11:54:19 +01:00
openstappsbot 0ca252b221 refactor: update all 2021-12-15 11:51:11 +01:00
Jovan Krunić 7e35fae34e fix: route for news 2021-12-14 18:07:59 +00:00
Rainer Killinger 564a4e2994 ci: update renovate bot package rules 2021-12-14 13:29:23 +01:00
Rainer Killinger 3d406ddf88 docs: update changelog 2021-12-14 12:43:56 +01:00
Rainer Killinger 66d6b07485 0.22.0 2021-12-14 12:43:54 +01:00
Rainer Killinger 48ce0f241c refactor: update openstapps dependencies 2021-12-14 12:43:18 +01:00
Rainer Killinger c8b459fb6a docs: update changelog 2021-12-14 12:38:17 +01:00
Rainer Killinger 2c04fd6efc 0.21.0 2021-12-14 12:38:15 +01:00
Rainer Killinger f75e532d44 docs: update changelog 2021-12-14 12:37:03 +01:00
Rainer Killinger 70ce8ea0d6 0.8.0 2021-12-14 12:37:02 +01:00
Rainer Killinger e8eacd2c74 docs: update changelog 2021-12-14 12:35:16 +01:00
Rainer Killinger 9e6e2be2e7 0.29.0 2021-12-14 12:35:14 +01:00
Rainer Killinger 8c8f44b6f1 refactor: update dependencies 2021-12-14 12:33:43 +01:00
Rainer Killinger e1d0d20296 ci: update renovate bot package rules 2021-12-14 12:32:17 +01:00
Rainer Killinger 3c3a571dca refactor: update dependencies 2021-12-14 12:26:04 +01:00
Rainer Killinger 1bf44d887d refactor: update dependencies 2021-12-14 11:58:30 +01:00
Rainer Killinger e57555aea8 ci: update renovate bot package rules 2021-12-14 11:53:05 +01:00
Rainer Killinger a6e19b1230 fix: log4j2 first mitigation 2021-12-13 10:13:59 +01:00
Rainer Killinger 3afeb0e936 Initial commit 2021-12-10 14:35:18 +01:00
Jovan Krunić 2566a71a81 feat: add detail view for news 2021-12-06 12:14:42 +00:00
Rainer Killinger 3d8f996690 refactor: make offer price property optional 2021-11-30 12:27:40 +01:00
Jovan Krunić 8f3df58e42 docs: add android debug instructions to README
Additionally clean up npm scripts and README

Closes #157
2021-11-26 13:37:59 +01:00
Rainer Killinger c5b826080c refactor: update dependencies 2021-11-23 13:08:58 +01:00
Rainer Killinger b509dd2e2d build: fix configs for android release builds 2021-11-23 13:08:58 +01:00
Jovan Krunić 5ffa699f57 ci: add gradle to image via a dummy project 2021-11-22 18:40:40 +01:00
Jovan Krunić b909e0bed4 build: upgrade capacitor android 2021-11-22 15:30:20 +01:00
Jovan Krunić 2e3f6684ef feat: support deep links 2021-11-17 15:12:10 +01:00
Rainer Killinger 36a4bfcbbc docs: update changelog 2021-11-17 11:38:00 +01:00
Rainer Killinger db347bf324 0.54.0 2021-11-17 11:37:56 +01:00
Jovan Krunić 837c69bb21 fix: links of timetable tabs
Closes #144
2021-11-16 14:16:13 +00:00
Rainer Killinger 7a2e0f20d1 feat: add SCAssessment 2021-11-16 10:56:28 +01:00
Jovan Krunić 1c56c891e1 fix: show nothing for empty array properties
Closes #154
2021-11-15 08:57:07 +00:00
Jovan Krunić 7f23a0e6cf build: migrate from cordova to capacitor
Closes #85
2021-11-12 19:12:42 +01:00
Wieland Schöbl 523e34f6e4 refactor: use SwiperJS in schedule module 2021-11-09 17:12:45 +00:00
Jovan Krunić d6cb7e1d3b refactor: remove default data from search page
Closes #151
2021-11-03 12:41:04 +00:00
Jovan Krunić d3188f5090 fix: ignore null-island location
Closes #149
2021-10-27 14:49:22 +02:00
Jovan Krunić e29a68bb03 refactor: use expandable title card for all data details
Closes #150
2021-10-27 08:28:48 +00:00
Jovan Krunić 88684f068a fix: single map place width
Closes #147
2021-10-27 08:28:48 +00:00
Jovan Krunić d420008926 feat: add about module 2021-10-27 08:25:41 +00:00
Jovan Krunić 7d449b43d0 fix: map search on iOS
Closes #148
2021-10-21 17:36:03 +02:00
Jovan Krunić 867f9e9b83 feat: add feedback module 2021-10-21 06:47:40 +00:00
Jovan Krunić 0becdeb6d9 docs: update changelog 2021-10-20 14:10:03 +02:00
Jovan Krunić dacb1c66e8 0.35.0 2021-10-20 14:10:00 +02:00
openstappsbot e187ee8c44 refactor: update all 2021-10-20 11:27:10 +00:00
Rainer Killinger 18ab8d592e ci: add jq to app image 2021-10-20 12:11:49 +02:00
openstappsbot 3b4cb2b420 refactor: update all 2021-10-20 07:09:40 +00:00
Jovan Krunić b2d18da82a docs: update changelog 2021-10-19 16:09:46 +02:00
Jovan Krunić fae7395cf0 0.53.0 2021-10-19 16:09:45 +02:00
Rainer Killinger fdd27d946c ci: remove digest binding,picks wrong architecture 2021-10-15 11:20:07 +02:00
Jovan Krunić 0745b1af72 refactor: adjust http status of feedback route 2021-10-12 16:50:19 +02:00
Jovan Krunić a2b2cefe8e refactor: adjust depricated use of http-status-codes 2021-10-12 16:48:42 +02:00
Wieland Schöbl d6f126f197 feat: add dummy about config 2021-10-07 10:38:32 +02:00
Rainer Killinger 581a5b2e55 fix: ngx-translate defaultLanguage not set 2021-10-07 07:30:46 +00:00
Rainer Killinger 72988e9241 refactor: update ngx-translate 2021-10-07 07:30:46 +00:00
Rainer Killinger def31cd036 refactor: add empty aboutPages to config 2021-10-05 14:54:21 +02:00
openstappsbot 9011e345a2 refactor: update all 2021-10-05 14:52:30 +02:00
Rainer Killinger 82bb15b863 fix: adjust npm docker scripts and typos 2021-10-05 14:21:54 +02:00
openstappsbot 3672cb47a8 refactor: update docker docker tag to v20.10.9 2021-10-05 07:05:48 +00:00
Rainer Killinger c9f37a1df0 docs: update changelog 2021-10-04 18:07:57 +02:00
Rainer Killinger 6dd5fcdde5 0.34.0 2021-10-04 18:07:52 +02:00
openstappsbot 26c14fa7e9 refactor: update all 2021-10-04 17:53:15 +02:00
Rainer Killinger d083105d6d feat: unregister plugin on exit 2021-10-04 16:42:31 +02:00
openstappsbot 8cb4ee12a6 refactor: update all 2021-10-04 07:07:31 +00:00
Rainer Killinger f8c3b29c60 ci: pin docker image build to compatible runners 2021-09-30 17:42:05 +02:00
Rainer Killinger 03c2b8aeab refactor: read env variables via commander 2021-09-30 17:39:07 +02:00
Rainer Killinger 88909a5650 refactor: update dependencies 2021-09-30 15:23:05 +02:00
openstappsbot 8cf40900bb refactor: update all 2021-09-29 09:42:31 +02:00
wulkanat@gmail.com 04b21a7c5d docs: update changelog 2021-09-28 16:02:23 +02:00
wulkanat@gmail.com ca7626db17 0.52.0 2021-09-28 16:02:14 +02:00
Wieland Schöbl 92741d6613 Merge branch '15-filter-tags-override-inherited-type-tags' into 'master'
Resolve "Filter tags override inherited type tags"

Closes #15

See merge request openstapps/es-mapping-generator!4
2021-09-28 12:49:03 +00:00
Wieland Schöbl f0401e1889 fix: filter tags override inherited type tags 2021-09-28 12:49:02 +00:00
openstappsbot 9bc05d2c99 refactor: update typescript-eslint monorepo to v4.32.0 2021-09-28 07:11:08 +00:00
openstappsbot 210e7ac021 refactor: update typescript-eslint monorepo to v4.32.0 2021-09-28 07:08:33 +00:00
Wieland Schöbl e8d492a18a test: add test to make sure there are no duplicate names 2021-09-27 09:06:40 +00:00
openstappsbot 7aefa50101 refactor: update all 2021-09-27 07:15:39 +00:00
openstappsbot 9ef14774d2 refactor: update all 2021-09-27 07:11:47 +00:00
openstappsbot a09359d0b2 refactor: update all 2021-09-27 07:06:56 +00:00
openstappsbot bd132f9f6a refactor: update all 2021-09-27 07:06:20 +00:00
Rainer Killinger 8b2b853942 fix: person list should use long-inline-text 2021-09-24 13:53:33 +00:00
Rainer Killinger a1bf950c88 refactor: enable full sort capabilites on search 2021-09-24 13:53:33 +00:00
Rainer Killinger 03084b1c96 feat: add catalog module 2021-09-24 13:53:33 +00:00
Wieland Schöbl aa294c4e29 feat: add about config 2021-09-23 12:40:50 +00:00
Wieland Schöbl e628f396e2 fix: add nav button to schedule page 2021-09-21 18:07:10 +02:00
Jovan Krunić 3c7ada4eea build: upgrade to angular v12 2021-09-21 06:51:33 +00:00
Rainer Killinger bf3a716767 docs: update changelog 2021-09-16 12:09:17 +02:00
Rainer Killinger 1b3c43d2cb 0.33.0 2021-09-16 12:09:16 +02:00
Rainer Killinger fee9a163e1 docs: adjust typedoc arguments 2021-09-16 12:08:33 +02:00
Jovan Krunić 7ba647271e feat: add feedback to config as menu item 2021-09-15 14:12:37 +00:00
Jovan Krunić e5c227073a fix: detail page when dish of mensa selected
Closes #140
2021-09-15 16:01:16 +02:00
openstappsbot 472a1b97d6 refactor: update all 2021-09-15 13:06:45 +00:00
Jovan Krunić f1b4930a30 fix: 404 on all surge links 2021-09-15 09:59:32 +00:00
Rainer Killinger 49a1758da3 feat: add duration pipe with frequency capabilites 2021-09-13 15:17:25 +00:00
Jovan Krunić e42149e93f docs: update changelog 2021-09-13 16:42:20 +02:00
Jovan Krunić 53b3e8909c 0.28.1 2021-09-13 16:42:19 +02:00
Jovan Krunić 7d396f9202 fix: adjust command of typedoc (upgrade typescript) 2021-09-13 16:40:49 +02:00
Jovan Krunić c40ceef039 docs: update changelog 2021-09-13 15:16:24 +02:00
Jovan Krunić 98896d5474 0.28.0 2021-09-13 15:16:23 +02:00
Rainer Killinger 6125d43e8c fix: add openingHours config and catch its errors 2021-09-10 16:05:20 +00:00
Jovan Krunić e9452d6520 feat: add favorites support 2021-09-10 15:39:23 +00:00
Frank Nagel 7ed2921efb fix: Add default configuration file for prometheus monitoring 2021-09-10 15:20:03 +00:00
Jovan Krunić 1596b6e3b8 build: update @openstapps/core 2021-09-10 14:31:54 +02:00
Jovan Krunić 369bb906c1 docs: update changelog 2021-09-10 14:15:06 +02:00
Jovan Krunić aa38fef293 0.51.0 2021-09-10 14:15:05 +02:00
Jovan Krunić ded8e7dfd5 fix: add physicalobject to book categories 2021-09-10 14:13:28 +02:00
Jovan Krunić c4f5fb80b5 build: update packages 2021-09-10 10:40:01 +02:00
Jovan Krunić c31540e835 build: allow higher typescript versions
Closes #38
2021-09-10 09:51:01 +02:00
Wieland Schöbl b42db4d8b0 ci: include wait-for script verbatim 2021-09-09 16:56:56 +02:00
Jovan Krunić 293ed6ba5f test: completely mock storage in tests using it
Closes #130
2021-09-08 18:00:14 +02:00
Rainer Killinger 972b551a57 ci: add wait-for script to node image 2021-09-08 13:03:30 +02:00
Jovan Krunić 4ab7b40b73 refactor: use specific setting types
Closes #97
2021-09-07 15:40:38 +02:00
Rainer Killinger 1cdac9f60d docs: update README.md 2021-09-07 14:33:20 +02:00
Rainer Killinger 109b9e3cbd Merge branch 'master' of gitlab.com:openstapps/minimal-plugin 2021-09-07 13:05:04 +02:00
Rainer Killinger fb96a4e8be ci: add real CI configuration 2021-09-07 13:02:44 +02:00
Rainer Killinger 377435f3eb refacator: read configuration from env variables 2021-09-07 12:51:13 +02:00
Rainer Killinger 581e60267d refactor: update dependencies 2021-09-07 10:03:06 +02:00
Rainer Killinger 452273248d docs: adjust to new typedoc parameters 2021-09-03 17:35:23 +02:00
Wieland Schöbl 43a89ec4f2 refactor: use core supplied mappings 2021-09-03 15:17:15 +00:00
openstappsbot 6f2990b804 refactor: update angular monorepo 2021-09-03 13:09:20 +00:00
Rainer Killinger 459b1ed19f ci: update renovate bot package rules 2021-09-03 14:17:32 +02:00
Rainer Killinger 227abeb36d docs: update changelog 2021-09-01 15:45:14 +02:00
Rainer Killinger be1fef2e25 0.32.0 2021-09-01 15:45:10 +02:00
openstappsbot 587c98a50e refactor: update all 2021-09-01 13:06:57 +00:00
Jovan Krunić d47897c7e8 docs: update changelog 2021-09-01 13:56:46 +02:00
Jovan Krunić 9ab5280b2e 0.50.0 2021-09-01 13:56:44 +02:00
Wieland Schöbl 596788f3a1 test: migrate schema.spec.ts from TypeDoc to Easy AST 2021-09-01 11:40:32 +00:00
Rainer Killinger 2bddddbf39 refactor: update dependencies 2021-09-01 10:03:48 +02:00
openstappsbot 08e632250f refactor: update docker docker tag to v20.10.8 2021-09-01 07:06:07 +00:00
Rainer Killinger 4f02d87f29 docs: update changelog 2021-08-31 11:57:43 +02:00
Rainer Killinger 863bd58cad 0.25.0 2021-08-31 11:57:38 +02:00
Rainer Killinger fe90cd098a refactor: update dependencies 2021-08-31 09:32:43 +00:00
Rainer Killinger cb43171640 docs: reintroduce typedoc documentation 2021-08-31 09:32:43 +00:00
Wieland Schöbl 96e3acf9ba fix: generate schemas for type aliases 2021-08-30 15:23:19 +02:00
Rainer Killinger 70271a4849 docs: update changelog 2021-08-27 17:27:23 +02:00
Rainer Killinger 98ab64403f 0.49.5 2021-08-27 17:27:21 +02:00
Rainer Killinger 3d1bb6ef13 docs: update changelog 2021-08-27 17:25:06 +02:00
Rainer Killinger d5f39517e8 0.49.4 2021-08-27 17:20:40 +02:00
Rainer Killinger dfe35d71a3 fix: test resources from hds2 2021-08-27 17:19:25 +02:00
Rainer Killinger c685adcac6 docs: update changelog 2021-08-27 14:42:52 +02:00
Rainer Killinger da056b75d0 0.31.1 2021-08-27 14:42:50 +02:00
Rainer Killinger 51c157d577 fix: plugin related tests 2021-08-27 14:37:05 +02:00
Rainer Killinger 32fc24f986 docs: update changelog 2021-08-27 13:49:40 +02:00
Rainer Killinger 2f9e1353a7 0.24.3 2021-08-27 13:49:38 +02:00
Rainer Killinger f82b465263 fix: add cruical Converter ceation option 2021-08-27 13:49:01 +02:00
Rainer Killinger 9f744a3c88 test: adjust path to core resource files 2021-08-26 15:37:40 +02:00
openstappsbot d6823a1206 refactor: update all 2021-08-26 07:07:06 +00:00
Wieland Schoebl 3fd23689c1 docs: update changelog 2021-08-25 15:08:33 +02:00
Wieland Schoebl 96bb8bbff3 0.24.2 2021-08-25 15:08:28 +02:00
Wieland Schöbl aa0ba51a34 refactor: rename .d.ts files to .ts 2021-08-25 13:16:21 +02:00
Wieland Schoebl 20f68ed581 docs: update changelog 2021-08-25 12:36:36 +02:00
Wieland Schoebl 23cdf29fc5 0.24.1 2021-08-25 12:36:31 +02:00
Wieland Schöbl c5a8f7ebea test: improve easy-ast test performance 2021-08-25 10:25:34 +00:00
Wieland Schoebl 7238c2f333 docs: update changelog 2021-08-25 12:05:42 +02:00
Wieland Schoebl 074cc061f5 0.24.0 2021-08-25 12:05:36 +02:00
Wieland Schöbl fe59204b42 feat: modernize core-tools 2021-08-25 09:47:36 +00:00
Rainer Killinger a811bf9f4f refactor: improve display of distances 2021-08-25 10:04:28 +02:00
Rainer Killinger bbd20effb6 ci: fix surge deployment for new routing strategy 2021-08-25 10:04:27 +02:00
Rainer Killinger 640df473f7 refactor: undo card based look on detail views 2021-08-25 10:04:27 +02:00
Rainer Killinger 9f75f47e9c refactor: improve canteen related views 2021-08-25 10:04:26 +02:00
Rainer Killinger 02cc2a8879 ci: increase npm package install speed 2021-08-25 10:02:03 +02:00
Rainer Killinger 7afa66e01a refactor: apply new eslint rules 2021-08-25 10:01:32 +02:00
Rainer Killinger bb8a9f6ba5 refactor: add opening hours 2021-08-25 10:00:33 +02:00
Rainer Killinger b89f5c4edd fix: canteen module layout 2021-08-25 09:59:04 +02:00
Rainer Killinger 4cf27b2c32 refactor: clean up data-detail-content template 2021-08-25 09:59:04 +02:00
Rainer Killinger 95b183b1bb refactor: replace amDateFormat with new pipes 2021-08-25 09:59:03 +02:00
Rainer Killinger 4b932af1c0 feat: add formatting pipes basted on Intl 2021-08-25 09:54:50 +02:00
Rainer Killinger 6f7c680ed8 fix: canteen module layout 2021-08-25 09:54:44 +02:00
Jovan Krunić b56a428c92 refactor: update openstapps packages 2021-08-18 10:29:18 +00:00
wulkanat@gmail.com cdaa83122f docs: update changelog 2021-08-18 09:57:29 +02:00
wulkanat@gmail.com 937919f1a7 0.49.3 2021-08-18 09:57:22 +02:00
Wieland Schöbl 3249300dac refactor: move indexable test files to separate folder 2021-08-17 18:55:27 +02:00
wulkanat@gmail.com 5acf49fd52 docs: update changelog 2021-08-17 18:15:19 +02:00
wulkanat@gmail.com 07b5ad1618 0.49.2 2021-08-17 18:15:11 +02:00
Wieland Schöbl d56c3d11a8 refactor: move indexable test files to separate folder 2021-08-17 17:51:53 +02:00
Jovan Krunić beb57b2f5a docs: update changelog 2021-08-17 15:55:23 +02:00
Jovan Krunić 0bda134bfe 0.31.0 2021-08-17 15:55:22 +02:00
Jovan Krunić dbcde48c14 refactor: adjust tests to core changes 2021-08-17 15:18:09 +02:00
Jovan Krunić 09aa7bb5c5 fix: map widget not loading tiles properly
Closes #127
2021-08-17 14:25:41 +02:00
openstappsbot 388e4fbb76 refactor: update all 2021-08-13 13:06:04 +00:00
Wieland Schöbl d8ede006df feat: timetable module - schedule and calendar 2021-08-13 12:27:40 +00:00
wulkanat@gmail.com 83f00f40bf docs: update changelog 2021-08-13 11:04:27 +02:00
wulkanat@gmail.com 782ee3758a 0.49.1 2021-08-13 11:04:20 +02:00
Wieland Schöbl 8a28d6fa86 fix: documentation generation 2021-08-13 08:41:54 +00:00
wulkanat@gmail.com ed53c6595e docs: update changelog 2021-08-12 15:45:19 +02:00
wulkanat@gmail.com 49ea2c59ab 0.49.0 2021-08-12 15:45:12 +02:00
openstappsbot 869fa831ea refactor: update all 2021-08-12 13:10:08 +00:00
Wieland Schöbl 21eeecd5ee feat: add elasticsearch mappings to build
Add backwards compatibility check with typescript v3.8.3
2021-08-12 13:09:45 +00:00
Rainer Killinger 2dfb64bafd refactor: remodel entities for library search and results 2021-08-12 12:41:03 +00:00
Rainer Killinger 61b1fde0ec Merge branch 'renovate/all' into 'master'
refactor: update all

See merge request openstapps/es-mapping-generator!1
2021-08-12 07:57:15 +00:00
openstappsbot 58e6b19a70 refactor: update all 2021-08-11 13:07:47 +00:00
Rainer Killinger e81b2e161d ci: fix Dockerfile npm install commands 2021-08-06 14:50:15 +02:00
Rainer Killinger 873d6459b5 ci: adjust npm & node versions and use npm ci 2021-08-06 13:12:30 +02:00
Wieland Schöbl 5bd8025d08 docs: fix readme badges 2021-08-05 19:53:16 +02:00
Wieland Schoebl 32c4cee4aa docs: update changelog 2021-08-05 19:41:13 +02:00
Wieland Schoebl 1d043c2ef1 0.0.3 2021-08-05 19:41:13 +02:00
Wieland Schöbl 9a881299dc fix: put es template parsing 2021-08-05 19:22:28 +02:00
Rainer Killinger 9c78fc2366 docs: update changelog 2021-08-05 16:28:38 +02:00
Rainer Killinger 00cd4780a9 0.0.2 2021-08-05 16:28:34 +02:00
Wieland Schöbl 62b226653d refactor: expand name 2021-08-05 16:18:01 +02:00
Wieland Schöbl 4d1d69bd0c refactor: expand name 2021-08-05 16:16:48 +02:00
Wieland Schöbl 28334b800c fix: fix unwanted crash when not supplying an error path 2021-08-05 15:40:00 +02:00
Wieland Schöbl 4861f7d22c test: remove mapping pipeline (duplicate with core) 2021-08-05 15:20:16 +02:00
Wieland Schöbl ccb4cedc5f refactor: change function of put es templates 2021-08-05 14:47:13 +02:00
Rainer Killinger 614a1b1e9b feat: add openapi docs generation to api 2021-08-05 10:07:08 +00:00
Wieland Schöbl bf862cfb78 refactor: update dependencies 2021-08-05 10:55:38 +02:00
Wieland Schöbl 233e017d2b refactor: update dependencies 2021-08-05 10:49:44 +02:00
Wieland Schöbl 20ee8db28e refactor: update dependencies 2021-08-05 10:41:41 +02:00
Jovan Krunić 4ab8770fbc refactor: every indexable thing can be a favorite 2021-08-04 13:57:06 +00:00
Rainer Killinger 4e42772ca3 feat: add catalog menu entry and rearrange 2021-08-04 14:27:30 +02:00
Wieland Schöbl 87d2a6fa09 Initial Commit 2021-08-04 14:12:22 +02:00
Wieland Schöbl 42c9d02036 Initial Commit 2021-08-04 13:25:50 +02:00
Jovan Krunić 2cf1027796 ci: manual web docs for feature branches 2021-08-04 11:43:22 +02:00
openstappsbot aa39a5947c refactor: update all 2021-08-04 09:13:19 +00:00
Rainer Killinger 9272060a8b ci: let renovate bot runs recreate package-lock 2021-08-04 11:11:38 +02:00
Rainer Killinger 9463130e7d docs: update changelog 2021-08-04 11:08:41 +02:00
Rainer Killinger 3a3cf835a5 0.30.0 2021-08-04 11:08:40 +02:00
Rainer Killinger 0a10ef1362 test: adjust istanbul ignore statements 2021-08-04 11:05:08 +02:00
openstappsbot 546aa14895 refactor: update all 2021-08-04 10:51:30 +02:00
openstappsbot 3aed37ecb4 refactor: update all 2021-08-02 13:06:03 +00:00
openstappsbot 70db25ca64 refactor: update all 2021-08-02 13:05:38 +00:00
Rainer Killinger 106dd26f89 docs: update changelog 2021-08-02 12:59:36 +02:00
Rainer Killinger 6e9e57d251 0.23.2 2021-08-02 12:59:35 +02:00
Rainer Killinger d804085c54 docs: update changelog 2021-08-02 12:55:04 +02:00
Rainer Killinger 79943bc687 0.23.1 2021-08-02 12:55:03 +02:00
Rainer Killinger 7a5d2bb1e9 fix: rollback ajv version to 6.12.6 2021-08-02 12:55:00 +02:00
openstappsbot a11a24225b refactor: update all 2021-08-02 07:09:50 +00:00
Jovan Krunić ddb26b8207 ci: fix elasticsearch service (change runner)
Closes #135
2021-07-29 17:28:44 +02:00
Jovan Krunić 805c1f0937 refactor: specific settings for user group and language 2021-07-27 14:02:56 +02:00
Jovan Krunić 5435f85cc4 feat: add filter chips for news 2021-07-21 17:06:27 +02:00
Rainer Killinger 364edff8b7 docs: update changelog 2021-07-21 16:17:06 +02:00
Rainer Killinger efedaba94d 0.23.0 2021-07-21 16:17:02 +02:00
Jovan Krunić 5377d026f3 refactor: define user groups in an extra file 2021-07-21 14:53:08 +02:00
Jovan Krunić de0617b8dd feat: add favorites to personal menu 2021-07-20 13:27:18 +00:00
Rainer Killinger c9dedf6a9f refactor: update dependencies 2021-07-20 09:35:53 +02:00
Rainer Killinger f4bf7abc89 feat: replace route markdown with openapi 2021-07-20 09:35:49 +02:00
Wieland Schöbl 4fc7838a22 refactor: sync geojson dependency with core 2021-07-19 13:58:56 +02:00
Jovan Krunić e48134eddc feat: lazy load all news 2021-07-16 17:00:21 +02:00
Jovan Krunić 975f8e25e4 refactor: sort news by datePublished on backend 2021-07-16 16:59:55 +02:00
Rainer Killinger a1e820336f refactor: update dependencies 2021-07-16 14:35:39 +02:00
Wieland Schöbl 5dce28fb99 refactor: update dependencies 2021-07-15 09:53:37 +02:00
Rainer Killinger 148fd77f4d docs: update changelog 2021-07-14 12:41:31 +02:00
Rainer Killinger 4036bfd193 0.48.0 2021-07-14 12:41:26 +02:00
Rainer Killinger f4f372b9ad docs: adjust @validatable documentation 2021-07-14 11:16:56 +02:00
Rainer Killinger 872c1f5fc3 fix: correct parameter name of thing update route 2021-07-14 11:16:55 +02:00
Rainer Killinger 4f2ca30dab refactor: make resonse error types validatable 2021-07-14 11:16:55 +02:00
Wieland Schöbl ccb851c0b5 refactor: remove angular lint command 2021-07-14 10:21:12 +02:00
Jovan Krunić c1c9a92ec9 feat: add map module 2021-07-13 07:57:09 +00:00
Wieland Schöbl 882483ee24 feat: support geo shape queries 2021-07-09 13:32:28 +00:00
Wieland Schöbl d696215d08 refactor: replace TSLint with ESLint 2021-07-08 15:32:07 +02:00
Wieland Schöbl dd8a6b3abc feat: support geo shape filter 2021-07-07 10:17:54 +02:00
Wieland Schoebl 1f7c9aba33 docs: update changelog 2021-07-07 10:10:45 +02:00
Wieland Schoebl deaebd754d 0.22.0 2021-07-07 10:10:34 +02:00
Wieland Schöbl f20038c8f9 fix: fix inherited properties not working correctly 2021-07-05 18:00:59 +02:00
Wieland Schöbl 99c698bd16 test: add filterable test for indirect types 2021-07-05 17:06:04 +02:00
openstappsbot 7106996cc3 refactor: update all 2021-07-05 07:06:25 +00:00
Rainer Killinger 3d36ecc2b0 ci: add elasticsearch to renovate exclusion list 2021-06-28 12:40:48 +02:00
openstappsbot c998166938 refactor: update all 2021-06-23 13:11:10 +00:00
Frank Nagel d0847a8bf6 docs: Add documentation for prometheus-middleware 2021-06-22 17:34:22 +02:00
Frank Nagel b42e911a11 feat: Add prometheus middleware to express
This enables collecting metrics from node.js and express.
2021-06-22 17:34:17 +02:00
Wieland Schöbl 67fb4a43c9 feat: add action chips to search results 2021-06-22 15:09:40 +00:00
Rainer Killinger 0aa26020be ci: add gitlab visual review to MRs 2021-06-17 16:31:40 +02:00
Wieland Schöbl 93877c9fc7 refactor: use range query for canteen module 2021-06-16 07:38:05 +00:00
Rainer Killinger 5c78973887 ci: set @types/geojson version for renovate 2021-06-15 10:57:01 +02:00
Rainer Killinger d61e33de39 docs: update changelog 2021-06-15 10:48:03 +02:00
Rainer Killinger 07d6c4770a 0.47.0 2021-06-15 10:48:01 +02:00
openstappsbot aab3e9fa6c refactor: update all 2021-06-15 10:46:58 +02:00
Rainer Killinger 4a4cd4e6d4 fix: set date-series frequency non translatable 2021-06-15 09:41:27 +02:00
openstappsbot 360cddbf15 refactor: update dependency @types/node to v14.17.3 2021-06-14 08:48:27 +00:00
Rainer Killinger 42e68120b7 fix: exclude npm audit from maintenance runs 2021-06-14 09:49:46 +02:00
Wieland Schoebl 4955d8b6be docs: update changelog 2021-06-08 15:22:45 +02:00
Wieland Schoebl 08c2a6c8ab 0.29.0 2021-06-08 15:22:39 +02:00
Jovan Krunić 7b402d61c3 fix: item not available in offer template
Closes #110
2021-06-08 11:34:31 +02:00
Jovan Krunić 643b6c967f fix: swap missing icon after ionic update 2021-06-08 11:15:25 +02:00
Wieland Schöbl 942cd11469 feat: make SCDateSeries.frequency compliant with schema.org 2021-06-07 12:23:48 +02:00
openstappsbot d0c0d7d9d4 refactor: update all 2021-06-01 13:09:11 +00:00
Jovan Krunić 27cf62f952 refactor: optimize data list component 2021-06-01 07:44:40 +00:00
Jovan Krunić 66167831e6 refactor: show top of the list if query changed (no setTimeout) 2021-06-01 07:44:40 +00:00
Rainer Killinger 00d52fa069 refactor: align grid & thumbnail spacing with list 2021-06-01 07:44:40 +00:00
Rainer Killinger ef87601e84 refactor: update context menu layout 2021-06-01 07:44:40 +00:00
Rainer Killinger f0a45d1b8e fix: performance degradation when scrolling 2021-06-01 07:44:40 +00:00
openstappsbot 1a6f816b66 refactor: update all 2021-06-01 07:10:49 +00:00
openstappsbot d69ac01bbf refactor: update all 2021-06-01 07:09:42 +00:00
openstappsbot dbea099d92 refactor: update all 2021-06-01 07:09:18 +00:00
Jovan Krunić add690c842 refactor: use ion-img where lazy load needed 2021-06-01 08:56:16 +02:00
Wieland Schöbl ad0dae46ff fix: fix various typos 2021-05-21 15:35:26 +02:00
Rainer Killinger a75f3af979 refactor: update dependencies with security issues 2021-05-19 09:50:35 +02:00
Rainer Killinger af2fd6763d docs: update changelog 2021-05-19 09:37:48 +02:00
Rainer Killinger 124e3754fd 0.9.0 2021-05-19 09:37:47 +02:00
Rainer Killinger aedeab30f2 refactor: update dependencies 2021-05-19 09:37:20 +02:00
Rainer Killinger 3c582cebc6 docs: update changelog 2021-05-18 20:11:55 +02:00
Rainer Killinger e486d25537 0.7.0 2021-05-18 20:11:50 +02:00
Jovan Krunić 9621d2528d refactor: use local test files for e2e test 2021-05-14 14:28:41 +02:00
Wieland Schöbl 47f3232f15 feat: add support for new availability filter 2021-05-14 14:28:41 +02:00
openstappsbot 308965a2fa refactor: update all 2021-05-13 07:10:59 +00:00
Wieland Schöbl fe090c7387 test: increase schema timeout 2021-05-12 18:03:09 +02:00
Wieland Schöbl f0782d8820 test: add mapping test 2021-05-12 17:52:22 +02:00
wulkanat@gmail.com 90fc78c142 docs: update changelog 2021-05-12 16:26:11 +02:00
wulkanat@gmail.com c213df6724 0.21.0 2021-05-12 16:26:04 +02:00
Wieland Schöbl 74298065e0 feat: add support for non-external premaps 2021-05-12 14:06:13 +00:00
openstappsbot 6f1820ff91 refactor: update all 2021-05-10 07:11:03 +00:00
Jovan Krunić a2461d5904 docs: update changelog 2021-05-04 16:51:52 +02:00
Jovan Krunić d2e0069dc2 0.46.0 2021-05-04 16:51:50 +02:00
Wieland Schöbl 9c6972af78 feat: change range offer to use date range
add date range type
change availability filter
2021-05-04 16:48:10 +02:00
openstappsbot 98cfcab15a refactor: update all 2021-04-28 07:11:38 +00:00
Rainer Killinger 4ead266a07 docs: update changelog 2021-04-27 13:38:01 +02:00
Rainer Killinger 6f377264e9 0.28.0 2021-04-27 13:38:00 +02:00
Rainer Killinger 334f5a7507 refactor: remove legacy callbacks from bulk storage 2021-04-27 13:03:40 +02:00
openstappsbot 7424ad9831 refactor: update all 2021-04-27 13:02:13 +02:00
Jovan Krunić df69bfd95f refactor: remove geoLocation from the backend config
Closes #87
2021-04-27 13:02:12 +02:00
Wieland Schöbl 650b5c1ed3 test: change integration test docker tag 2021-04-27 13:02:12 +02:00
Wieland Schöbl de60311bd0 feat: add support for multiple values in value filter 2021-04-27 13:02:12 +02:00
Rainer Killinger 15ac0e2f59 refactor: update @types/node for node version 14 2021-04-27 13:02:11 +02:00
openstappsbot ab30ad76c1 refactor: update all 2021-04-27 13:02:11 +02:00
Jovan Krunić 1d5f99b1fa fix: remove onlyOnTypes from mustMatch
- Execute sort on all types (results include only
types that are possible to sort)

- mustMatch filters types with and AND (e.g. a type
that can be sorted by distance must be building and
room and point of interest)

Closes #83
2021-04-27 13:02:10 +02:00
Jovan Krunić 9488451080 fix: wrong way alias names are generated
Closes #79
2021-04-27 13:02:10 +02:00
openstappsbot ff9fb49deb refactor: update all 2021-04-27 13:02:09 +02:00
Jovan Krunić 31acec2a05 build: update openstapps libraries
Closes #82
2021-04-27 13:02:09 +02:00
Wieland Schöbl dc169746e7 feat: add support for range filters 2021-04-27 13:02:08 +02:00
Wieland Schöbl dcf7906f79 feat: add support for range filters 2021-04-27 13:02:08 +02:00
Wieland Schöbl 785813c3fb feat: add schedule route 2021-04-27 13:02:08 +02:00
Jovan Krunić e2b4b0467d Revert "refactor: remove canteen menu item until app module ready"
This reverts commit 7988737d286725f84b50abdbe201fe71f83198bf
2021-04-27 13:02:07 +02:00
Jovan Krunić 570d7bac7c refactor: remove canteen menu item until app module ready 2021-04-27 13:02:07 +02:00
Jovan Krunić b74e056826 refactor: update default (f-u) config
Closes #76
2021-04-27 13:02:07 +02:00
Jovan Krunić 26f3f4620b refactor: enter Goethe-Uni data (f-u) 2021-04-27 13:02:06 +02:00
Jovan Krunić 32c8a2149a fix: stapps core version in config
Closes #74
2021-04-27 13:02:06 +02:00
Jovan Krunić e59689e94c build: fix nested dependencies (npm audit fix) 2021-04-27 13:02:06 +02:00
Jovan Krunić 2259da317a fix: error thrown on consecutive connector executions
Fixes #73
2021-04-27 13:02:05 +02:00
Jovan Krunić 18359fdab3 build: update test related packages
- Replace deprecated mocha-typescript with @testdeck/mocha
- Update other test related packages to their latest versions

See !41
2021-04-27 13:02:05 +02:00
Jovan Krunić 948ec1848f build: suppress logger outputs for unit tests
See !41
2021-04-27 13:02:04 +02:00
Jovan Krunić 5eefa3c2e1 test: add missing storage and notification tests
Closes #31
2021-04-27 13:02:04 +02:00
Jovan Krunić fe7dd09d7e refactor: parameterize configureApp function (inject db list)
Reason: easier testing (mocking) and better readability

Note: did additional refactoring
2021-04-27 13:02:03 +02:00
Jovan Krunić f3b86f0f0d refactor: add destroy method (for testing) for backend transport
Additionally fix minor issues and refactor the class
2021-04-27 13:02:02 +02:00
Jovan Krunić dd6ea1c6f3 refactor: move repetitive code into a new method in mailQueue 2021-04-27 13:01:45 +02:00
Jovan Krunić af305aa196 refactor: remove unneeded code (see elasticsearch constructor) 2021-04-27 13:01:45 +02:00
Jovan Krunić 7a9f3eaca4 fix: invalid monthly cron execution time
Note: did additional refactoring
2021-04-27 13:01:44 +02:00
Jovan Krunić 80e62496f0 fix: use specific time from filter if defined 2021-04-27 13:01:44 +02:00
Jovan Krunić 8dbb3ca19a refactor: provide 'onlyOnType' facet field only if defined 2021-04-27 13:01:44 +02:00
Jovan Krunić 7d4c27ec26 test: set total coverage requirements to 85% 2021-04-27 13:01:43 +02:00
Jovan Krunić 3a7cc8d7c1 refactor: use express method to check request content type 2021-04-27 13:01:43 +02:00
Jovan Krunić 60b689f28c refactor: remove unused code 2021-04-27 13:01:43 +02:00
Jovan Krunić d3955b3cdd test: add tests for routes 2021-04-27 13:01:42 +02:00
Jovan Krunić 751693bebc build: update @openstapps dependencies 2021-04-27 13:01:42 +02:00
Jovan Krunić 81cfd0986f refactor: remove unused express variable (port) 2021-04-27 13:01:41 +02:00
Wieland Schöbl 9f4350eea7 refactor: swap out jsonschema package for json-schema 2021-04-27 13:01:41 +02:00
Jovan Krunić 006bbebe60 feat: log registration and removal of plugins
Closes #71
2021-04-27 13:01:41 +02:00
Jovan Krunić 5ff16c1005 refactor: avoid duplicate/unneeded code (search for objects by UID)
Related to #70
2021-04-27 13:01:40 +02:00
Jovan Krunić e165837a15 fix: properly check if an object exists before update
Closes #70
2021-04-27 13:01:40 +02:00
Rainer Killinger 0c43be2dbe refactor: omit useless facets in response 2021-04-27 13:01:40 +02:00
Rainer Killinger 24a91229f2 fix: enhance default search query generation 2021-04-27 13:01:39 +02:00
Frank Nagel 677be5173d ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2021-04-27 13:01:39 +02:00
Rainer Killinger ce06e735be feat: utilize api-cli for e2e integration test 2021-04-27 13:01:39 +02:00
Rainer Killinger bbbe4d5f1f refactor: update dependencies 2021-04-27 13:01:38 +02:00
Rainer Killinger 21710ee492 docs: remove outdated info 2021-04-27 13:01:38 +02:00
Michel Jonathan Schmitz 6483221b62 feat: move up and enable cors 2021-04-27 13:01:37 +02:00
Rainer Killinger c61c37dc27 ci: cleanup and add image tag of core version 2021-04-27 13:01:37 +02:00
Frank Nagel 23eb1e2263 feat: Add start-debug npm run script
which requires ts-node/register
2021-04-27 13:01:37 +02:00
Frank Nagel 4cfb560954 fix: Don't force Mapping generation with 'npm start' 2021-04-27 13:01:36 +02:00
Wieland Schöbl 4a64f26e43 feat: add routes doc generation to npm documentation script 2021-04-27 13:01:36 +02:00
Rainer Killinger c2728b2a1d refactor: move template/aggregation generation 2021-04-27 13:01:36 +02:00
Wieland Schöbl b629d058eb feat: allow for searching illegal elasticsearch characters 2021-04-27 13:01:35 +02:00
Wieland Schöbl 1bad092185 feat: use new Elasticsearch package 2021-04-27 13:01:35 +02:00
Sebastian Lange 54301ae8fb feat: add default app settings and menus 2021-04-27 13:01:35 +02:00
Wieland Schöbl ba2c6f655c feat: make backend work with automatically generated aggregations 2021-04-27 13:01:34 +02:00
Rainer Killinger 496e6c5bd0 fix: esacpe mappin template filename 2021-04-27 13:01:34 +02:00
Wieland Schöbl 4ac6987813 refactor: move mappingIgnoredTags into config file 2021-04-27 13:01:33 +02:00
Wieland Schöbl 13938ecf21 feat: boost academic terms dynamically 2021-04-27 13:01:33 +02:00
Wieland Schöbl afd324fc6a build: change .gitkeep in templates folder to .gitignore 2021-04-27 13:01:33 +02:00
Wieland Schöbl d917627d58 fix: make facets work again 2021-04-27 13:01:32 +02:00
Wieland Schöbl 5d6d4b53f0 feat: move EXTERNAL_REQUEST_TIMEOUT to config file 2021-04-27 13:01:32 +02:00
Wieland Schöbl 8eab6b8531 feat: add support for generated elasticsearch mappings
Fixes #38
2021-04-27 13:01:31 +02:00
Jovan Krunić 7e04fad28b ci: remove docker tags where they are not needed 2021-04-27 13:01:31 +02:00
Jovan Krunić b98418f9e1 ci: run tests in tests job 2021-04-27 13:01:31 +02:00
Jovan Krunić 3ea2c3b98d refactor: throw an error when removing a non-existing plugin
Related to #2
2021-04-27 13:01:30 +02:00
Jovan Krunić 992a0a6f2c build: update @openstapps/core version
Adjust code accordingly

Related to #2
2021-04-27 13:01:30 +02:00
Jovan Krunić 3d51ccfac2 feat: add functionality to register plugins via http
Also:

- Add functionality for serving the responses from plugins
- Add tests for related methods and routes

Closes #2, #37
2021-04-27 13:01:30 +02:00
Jovan Krunić 59ea7a5ba6 refactor: avoid automatic execution of app.ts
Move the execution of configureApp to CLI file

Related to #2
2021-04-27 13:01:29 +02:00
Jovan Krunić 9adc0b88d7 docs: add missing inline docs for elasticsearch related interfaces
Closes #41
2021-04-27 13:01:29 +02:00
Michel Jonathan Schmitz 90187ce936 refactor: remove redundant condition 2021-04-27 13:01:29 +02:00
Michel Jonathan Schmitz 0cbf9b26a9 fix: apply correct types and tslint rules 2021-04-27 13:01:28 +02:00
Michel Jonathan Schmitz 9db091c26f build: update dependencies 2021-04-27 13:01:28 +02:00
Wieland Schöbl fc4f16ac44 ci: add automatic publishing of documentation 2021-04-27 13:01:27 +02:00
Jovan Krunić 684d52c917 build: remove unused dependencies 2021-04-27 13:01:27 +02:00
Jovan Krunić f4a699e0e5 refactor: use generics for createRoute (no-any)
Related to #39
2021-04-27 13:01:27 +02:00
Jovan Krunić 8b457c9911 refactor: adjust code after updated dependencies
Closes #39
2021-04-27 13:01:26 +02:00
Jovan Krunić 42c7350c36 build: update dependencies
Related to #39
2021-04-27 13:01:26 +02:00
Michel Jonathan Schmitz dd4be92f90 feat: add boosting to context based search 2021-04-27 13:01:26 +02:00
Wieland Schöbl 67c814443c ci: allow audit to fail 2021-04-27 13:01:25 +02:00
Wieland Schöbl fa2c9d7a88 fix: make index route work correctly 2021-04-27 13:01:25 +02:00
Wieland Schöbl 24e27c1d9e fix: return validation error instead of internal server error
previously there was just a validation error inside an internal server error, which made no sense
2021-04-27 13:01:25 +02:00
Wieland Schöbl 59e4009c5d refactor: use export global variables instead of express 2021-04-27 13:01:24 +02:00
Wieland Schöbl 8c48552abf fix: replace isProductiveEnvironment with isTestEnvironment 2021-04-27 13:01:24 +02:00
Sebastian Lange 2f13010480 feat: adjust to changes of SCFacet in core v0.12.0
Closes #30
2021-04-27 13:01:24 +02:00
Wieland Schöbl 6f7e23df20 fix: automatically remove invalid characters for aliases generated from index names 2021-04-27 13:01:23 +02:00
Rainer Killinger a1c14e8e6f ci: fix missing docker service in manual deploy jobs 2021-04-27 13:01:23 +02:00
Jovan Krunić e17db521e2 fix: set config file before accessing it
Closes #27
2021-04-27 13:01:22 +02:00
Wieland Schöbl d110d60123 feat: use config file for maxRequestBodySize
closes !20
2021-04-27 13:01:22 +02:00
Wieland Schöbl eabd885cd4 docs: added some inline comments 2021-04-27 13:01:22 +02:00
Wieland Schöbl e70e50a1ea fix: use SCRequestBodyTooLargeError
fixes #20
2021-04-27 13:01:21 +02:00
Wieland Schöbl 12b71ba1f1 fix: return syntax error when receiving bad json
Fixes #3
2021-04-27 13:01:21 +02:00
Wieland Schöbl f11376ecf8 fix: make config compatible with core, update database version 2021-04-27 13:01:21 +02:00
Wieland Schöbl 827827905b feat: use config for MultiSearchRoute 2021-04-27 13:01:20 +02:00
Karl-Philipp Wulfert 2b894bd1b6 build: update @openstapps/core-tools 2021-04-27 13:01:20 +02:00
Karl-Philipp Wulfert b67ec14573 ci: generate and publish documentation 2021-04-27 13:01:20 +02:00
Karl-Philipp Wulfert 8be85536eb build: update configuration files 2021-04-27 13:01:19 +02:00
Karl-Philipp Wulfert a91277c502 build: add typedoc 2021-04-27 13:01:19 +02:00
Karl-Philipp Wulfert 2b6707e369 build: add .npmignore from configuration 2021-04-27 13:01:19 +02:00
Anselm Stordeur 9b889c8736 fix: fix reading url path as parameters 2021-04-27 13:01:18 +02:00
Anselm Stordeur 30082f8726 fix: wait for config file validation 2021-04-27 13:01:18 +02:00
Anselm Stordeur 90822f5888 fix: add prefix to schema names 2021-04-27 13:01:18 +02:00
Anselm Stordeur d95436c733 ci: add services tag for docker:dind 2021-04-27 13:01:17 +02:00
Anselm Stordeur 6ceb763b5a build: update dependencies 2021-04-27 13:01:17 +02:00
Anselm Stordeur 98f02b8830 style: remove extraneous whitespace in imports 2021-04-27 13:01:16 +02:00
Anselm Stordeur 16bbb7e9e3 feat: add backend 2021-04-27 13:01:14 +02:00
Rainer Killinger a599c87384 refactor: update dependencies 2021-04-26 13:19:14 +02:00
Rainer Killinger 56b03aa0b9 docs: update changelog 2021-04-26 10:29:36 +02:00
Rainer Killinger b517837671 0.45.0 2021-04-26 10:29:34 +02:00
Rainer Killinger 89bbb4ecf5 docs: update changelog 2021-04-26 10:26:42 +02:00
Rainer Killinger 1e75b1d1bf 0.20.0 2021-04-26 10:26:41 +02:00
Jovan Krunić 1d94dd5bf3 build: add simple script for building for android
Closes #100
2021-04-20 10:23:40 +00:00
Rainer Killinger f0df58695d refactor: update dependencies 2021-04-19 19:40:43 +02:00
Rainer Killinger 7ba8233f5b feat: add filterable annotation option for integer 2021-04-19 19:25:58 +02:00
Jovan Krunić 3da7c7d009 refactor: remove geoLocation from settings
Closes #99
2021-04-19 16:49:45 +02:00
Jovan Krunić 7928534d88 fix: typo in translation 2021-04-16 15:48:58 +02:00
Jovan Krunić a8f22c1e96 refactor: make data list reusable component
Closes #98
2021-04-16 15:48:57 +02:00
openstappsbot 223de443a3 refactor: update all 2021-04-16 07:11:36 +00:00
Rainer Killinger 6f03ede8bf refactor: make SCCatalog level filterable 2021-04-13 16:11:44 +02:00
Rainer Killinger 6312e47796 ci: update renovate bot, move setup into gitlab-ci.yml 2021-04-13 13:27:48 +02:00
wulkanat@gmail.com 952207ace1 docs: update changelog 2021-04-12 15:06:12 +02:00
wulkanat@gmail.com 3d9d28c60c 0.44.0 2021-04-12 15:06:04 +02:00
Jovan Krunić 64fde65859 build: update node types (v10 -> v14) 2021-04-12 11:24:44 +02:00
Jovan Krunić 1f6b314a8f build: update node types (v10 -> v14) 2021-04-12 11:20:43 +02:00
Jovan Krunić 0bc95ca4ed build: update node types (10 -> 14) 2021-04-12 11:13:31 +02:00
Jovan Krunić c97ecd698c build: update cordova engines versions 2021-04-08 13:40:57 +00:00
Jovan Krunić 0f46811175 build: enable AndroidX (add adapter for legacy) 2021-04-08 13:40:57 +00:00
Jovan Krunić f725732772 build: create tmp project outside of app directory
- Otherwise it creates app's apk and not apk from
the tmp project
2021-04-08 13:40:57 +00:00
Jovan Krunić dca6287b90 build: update incompatible minSdkVersion (19 -> 22) 2021-04-08 13:40:57 +00:00
Jovan Krunić 3fc7c781ec refactor: use npm script for serve in docker 2021-04-08 13:40:57 +00:00
Jovan Krunić 4e367254c2 build: add cordova resources tool 2021-04-08 13:40:57 +00:00
Jovan Krunić f432f27c64 refactor: remove generated resources
They need to be generated only on demand and not kept in
git.
2021-04-08 13:40:57 +00:00
Jovan Krunić bb9ad9a957 build: use latest cordova (v10) 2021-04-08 13:40:57 +00:00
Wieland Schöbl 913c5691da feat: add support for multiple values in the value filter 2021-04-08 08:06:38 +00:00
Jovan Krunić 2c08a1cefd docs: add contributors to package.json 2021-04-07 14:32:38 +02:00
openstappsbot 9566f7aa0a refactor: update all 2021-04-07 12:27:50 +00:00
Jovan Krunić 025335432d build: clean up package.json
- Remove non-existing homepage
- Make package versions fixed
2021-04-07 14:27:07 +02:00
Jovan Krunić 9f71e46f66 build: update node types to v14
Closes #96
2021-04-07 14:23:07 +02:00
Rainer Killinger 03cdbc6f9b docs: update changelog 2021-04-07 13:34:33 +02:00
Rainer Killinger 9f886a8968 0.43.0 2021-04-07 13:34:29 +02:00
Wieland Schöbl c75ca68c44 feat: add "no results" screen to search 2021-04-07 10:05:20 +02:00
openstappsbot e80afe2c93 refactor: update all 2021-04-06 16:12:49 +00:00
Rainer Killinger ebc8a3bc39 docs: update changelog 2021-04-06 17:51:56 +02:00
Rainer Killinger bea4face58 0.19.0 2021-04-06 17:51:54 +02:00
Rainer Killinger 6b66e92d61 refactor: update @openstapps dependencies 2021-04-06 17:50:21 +02:00
Rainer Killinger 78e7d7456b docs: update changelog 2021-04-06 16:30:31 +02:00
Rainer Killinger 822823ea1a 0.6.0 2021-04-06 16:30:30 +02:00
Rainer Killinger 2df53fcd95 refactor: bump version to match npmjs release 2021-04-06 16:30:10 +02:00
Rainer Killinger e6bc84adf5 refactor: update @openstapps dependencies 2021-04-06 16:26:42 +02:00
Rainer Killinger f7113400d7 docs: update changelog 2021-04-06 16:20:27 +02:00
Rainer Killinger 2fe9f51460 0.27.0 2021-04-06 16:20:23 +02:00
Rainer Killinger 30d2108634 refactor: update @types/node for node version 14 2021-04-06 16:05:12 +02:00
Rainer Killinger 088beb8c11 refactor: update @types/node for node version 14 2021-04-06 15:37:52 +02:00
Rainer Killinger af965bce7a refactor: update @types/node for node version 14 2021-04-06 14:53:34 +02:00
Rainer Killinger 52a058c2df refactor: update @types/node for node version 14 2021-04-06 14:47:13 +02:00
Rainer Killinger 6b10cc86d8 refactor: update @types/node for node version 14 2021-04-06 14:08:42 +02:00
Rainer Killinger 55be9d4d4e refactor: use i18n in every data component 2021-03-31 11:11:05 +02:00
Jovan Krunić cd191e09da refactor: update node types from v10 to v14 2021-03-30 17:16:41 +02:00
Jovan Krunić 2dbbea8992 ci: update node from v10 to v14
Closes #29
2021-03-29 17:01:26 +02:00
openstappsbot 33bde7d3df refactor: update all 2021-03-29 16:34:20 +02:00
openstappsbot b372e6886b refactor: add renovate.json
refactor: update renovate/renovate docker tag to v24.97.1

refactor: update all
2021-03-29 13:37:14 +02:00
openstappsbot 1aedd6332f refactor: update all 2021-03-29 04:15:38 +00:00
openstappsbot d61be19a18 refactor: update all 2021-03-29 04:13:55 +00:00
Jovan Krunić 87099a3a0a docs: update changelog 2021-03-24 17:01:04 +01:00
Jovan Krunić f3a5a99f23 0.18.0 2021-03-24 17:01:03 +01:00
Wieland Schöbl 724a6866c8 feat: make Point type sortable in Elasticsearch 2021-03-24 08:44:23 +01:00
Jovan Krunić 1a8660590f style: improve design and add logo
- show data icons in thumbnails in data list items
- add app logo
- fix various visibility issues
2021-03-23 15:59:58 +00:00
Rainer Killinger 8b0978c7eb refactor: clean up settings.provider 2021-03-16 12:32:28 +01:00
Rainer Killinger 550b376a97 refactor: use APP_INITIALIZER for settings init 2021-03-16 12:31:19 +01:00
Rainer Killinger 7d471409cb ci: default to runner with performance tag 2021-03-15 14:42:21 +01:00
Rainer Killinger 5a4d63dedd build: revert package-lock.json version 2021-03-15 14:42:20 +01:00
Rainer Killinger 82bad1d3f2 test: add ThingTranslateService to app testbed 2021-03-15 14:42:20 +01:00
Rainer Killinger e9978a2d93 refactor: update openstapps/api 2021-03-15 14:42:19 +01:00
Rainer Killinger ccf8b1a5cc fix: setting of default language 2021-03-15 14:42:15 +01:00
Rainer Killinger 350185b0d3 refactor: i18n for settings module 2021-03-15 14:30:14 +01:00
Rainer Killinger abf7595c03 refactor: i18n for dish item listings and details 2021-03-15 14:30:14 +01:00
Rainer Killinger 3d4c476549 refactor: update to recent changes in translator 2021-03-15 14:30:09 +01:00
Rainer Killinger 42384f0ed0 docs: update changelog 2021-03-08 12:25:54 +01:00
Rainer Killinger 0219d0571b 0.27.0 2021-03-08 12:25:52 +01:00
Rainer Killinger 8043752146 build: update package-lock.json 2021-03-08 12:25:29 +01:00
Jovan Krunić 29cd22f2d1 fix: send valid JSON on bulk/done
Closes #38
2021-03-03 17:54:05 +01:00
Rainer Killinger 0a3a2dc2ec ci: introduce renovate and clean up gitlab-ci.yml 2021-03-01 10:20:56 +01:00
Rainer Killinger 456560026c feat: add service and pipe for core translator 2021-02-24 11:11:14 +01:00
Wieland Schöbl e3d9ef40cc feat: add not found screen 2021-02-23 16:56:41 +01:00
Rainer Killinger 5abdd9f98f docs: update changelog 2021-02-23 12:18:11 +01:00
Rainer Killinger 327e49ec88 0.26.0 2021-02-23 12:18:07 +01:00
openstappsbot 13857cd66e refactor: update all 2021-02-23 11:10:31 +00:00
Rainer Killinger e17bfa9d77 refactor: use reviewer assigning of gitlab 13.2 2021-02-23 11:20:58 +01:00
Rainer Killinger d63c355601 docs: update changelog 2021-02-22 10:26:48 +01:00
Rainer Killinger 190e7c7b60 0.26.0 2021-02-22 10:26:47 +01:00
Rainer Killinger f13a9a2036 refactor: update copyright year calculation 2021-02-22 10:23:39 +01:00
Rainer Killinger a87969813f refactor: update dependencies 2021-02-22 10:20:30 +01:00
Rainer Killinger 790c8bbc3f docs: update changelog 2021-02-16 14:04:46 +01:00
Rainer Killinger e934017a65 0.42.0 2021-02-16 14:04:40 +01:00
Rainer Killinger 88dbedd932 refactor: update dependenices 2021-02-15 10:57:25 +01:00
Rainer Killinger 8b1b3444fd refactor: align SCCreativeWork to schema.org spec 2021-02-15 10:37:43 +01:00
Rainer Killinger d5f3d71a41 refactor: overhaul translator as mentioned in #118 2021-02-15 10:37:38 +01:00
Jovan Krunić 0641ab12c8 build: use en_US as locale 2021-02-10 06:56:31 +00:00
Jovan Krunić 5790bec724 build: update cordova dependencies 2021-02-10 06:56:31 +00:00
Jovan Krunić b4bed4e834 build: update android sdk (use api 30) 2021-02-10 06:56:31 +00:00
Jovan Krunić 7b767001ad build: fix/update the angular devkit tools 2021-02-10 06:56:31 +00:00
Jovan Krunić 65c0f12c1c build: optimize the Dockerfile 2021-02-10 06:56:31 +00:00
Jovan Krunić c10ae803d1 build: update ionic and cordova 2021-02-10 06:56:30 +00:00
Jovan Krunić f4b6eb35e9 build: use correct ionic cli package 2021-02-10 06:56:30 +00:00
Jovan Krunić 3e93ae7363 build: update node to v14 2021-02-10 06:56:30 +00:00
Jovan Krunić 68303e1f09 build: update ubuntu version in docker image 2021-02-10 06:56:30 +00:00
Michel Jonathan Schmitz 6ca0b97637 fix: use localized date and time 2021-02-09 16:59:50 +00:00
wulkanat@gmail.com cbcf9c9adb docs: update changelog 2021-02-08 14:59:21 +01:00
wulkanat@gmail.com 321e4f6f24 0.41.0 2021-02-08 14:59:14 +01:00
Wieland Schöbl 8280917312 build: add ionic serve --external to scripts 2021-02-05 15:08:08 +01:00
Wieland Schöbl 8510f11d7b fix: add date, numeric range filter to SCSearchFilter 2021-02-05 13:50:18 +01:00
wulkanat@gmail.com 68aa377fe2 docs: update changelog 2021-02-05 12:59:54 +01:00
wulkanat@gmail.com 29f2c77ecc 0.40.0 2021-02-05 12:59:47 +01:00
Wieland Schöbl 29bc00616e feat: add range filter, date sorting support 2021-02-02 15:07:49 +01:00
Wieland Schöbl 33397e90fe test: add date mapping tests 2021-02-01 14:47:50 +01:00
Rainer Killinger 02920af4a4 refactor: make SCDish additives translatable 2021-02-01 13:24:12 +00:00
Jovan Krunić bb94c71761 feat: use school-neutral news image fallback via css 2021-01-30 16:29:50 +01:00
Jovan Krunić 1f3d9ad5f0 feat: refresh on pull for news module 2021-01-29 11:36:38 +01:00
Jovan Krunić 22cd0af1bf feat: news module 2021-01-29 11:36:37 +01:00
Wieland Schöbl 3c079cd189 feat: show menu for multiple days for canteens and cafes
Closes #19, #79
2021-01-19 13:50:51 +00:00
Rainer Killinger 2796fd8ec9 refactor: update & disable tidy label instructions 2021-01-18 14:58:09 +01:00
Rainer Killinger 02178d5a5e refactor: update dependencies 2021-01-18 14:55:28 +01:00
Jovan Krunić 9a939e9ccd refactor: replace deprecated request library with got
Closes #35
2020-12-17 10:38:30 +01:00
Rainer Killinger 0c14b0f1a0 test: change SCSemester sample data acronym 2020-12-02 17:22:17 +01:00
Rainer Killinger db0a239761 refactor: change SCSemester acronym pattern 2020-12-02 17:19:46 +01:00
Jovan Krunić 62a739048c docs: update changelog 2020-12-02 15:42:02 +01:00
Jovan Krunić 2c6ac1abd6 0.17.0 2020-12-02 15:42:01 +01:00
Jovan Krunić 377f55bbbe docs: update changelog 2020-12-01 17:16:02 +01:00
Jovan Krunić 8d7a0e10c6 0.39.0 2020-12-01 17:16:01 +01:00
Wieland Schöbl 058de208db test: add type alias annotation test 2020-11-30 17:21:12 +01:00
Jovan Krunić 66b8720da0 fix: use stapps core version to compare with backends' core version
Note: not app version (e.g. 2.0.0).

Closes #77
2020-11-27 16:11:14 +01:00
Jovan Krunić 072204b748 docs: fix and adjust the README file 2020-11-26 10:11:46 +01:00
Jovan Krunić bba0964fae refactor: use ionic instead of angular-cli for start scripts 2020-11-26 10:11:43 +01:00
Jovan Krunić b0cd37732e ci: use real backend instead of fake backend for web reviews
Closes #75
2020-11-25 17:22:17 +01:00
Jovan Krunić 6647750a6c refactor: use new backend version (2.x.x)
Close #74
2020-11-25 15:36:59 +01:00
Rainer Killinger c326929415 cI: update and extend gitlab-ci.yml 2020-11-23 18:54:59 +01:00
Rainer Killinger 7e23941d0b refactor: adhere to configuartion suggestions 2020-11-23 18:45:04 +01:00
Wieland Schöbl c22957efe3 build: update dependencies 2020-11-23 18:12:03 +01:00
Wieland Schöbl abdd62a4db test: change mocha-typescript to @testdeck/mocha 2020-11-23 12:57:49 +01:00
Wieland Schöbl a09be1d941 feat: add support for date mapping 2020-11-23 12:37:47 +01:00
Rainer Killinger 0d649a30cf ci: remove caching of node_modules 2020-11-23 10:19:11 +01:00
Rainer Killinger 84921ad5ce feat: make slack notification optional 2020-11-23 10:19:10 +01:00
Rainer Killinger ccb1b56a0f docs: fix markdown errors and update 2020-11-23 10:19:06 +01:00
Rainer Killinger 4865f911d1 refactor: utilize null coalescing 2020-11-23 10:06:14 +01:00
Rainer Killinger 15ae5e0873 refactor: remove narrow property value translation 2020-11-23 10:06:14 +01:00
Rainer Killinger a246bdea84 feat: extend property value translation retrival 2020-11-23 10:06:13 +01:00
Jovan Krunić 987f9d45f5 refactor: use ngx-logger instead of @openstapps/logger
Closes #71
2020-11-17 15:19:23 +01:00
Wieland Schöbl 8641bfc877 docs: add @inheritTags documentation 2020-11-11 11:40:36 +01:00
Wieland Schöbl 485430b7f2 feat: add support for @inheritTags 2020-11-11 10:05:12 +01:00
Rainer Killinger 5f34bc900c refactor: omit assigne self reference 2020-11-09 11:49:26 +01:00
Rainer Killinger bc2b0ce136 refactor: update dependencies 2020-11-09 11:49:24 +01:00
Rainer Killinger dfc0a3aed9 docs: update changelog 2020-11-09 10:57:05 +01:00
Rainer Killinger 2cd2513f64 0.25.0 2020-11-09 10:57:04 +01:00
Jovan Krunić 9067d7d6cf docs: update changelog 2020-11-09 10:45:21 +01:00
Jovan Krunić f0c54777eb 0.24.0 2020-11-09 10:45:21 +01:00
Michel Jonathan Schmitz c8ceefda80 ci: remove caching 2020-11-09 10:45:12 +01:00
Michel Jonathan Schmitz b6d83089d5 refactor: update dependencies 2020-11-09 10:14:54 +01:00
Rainer Killinger 49ff960616 refactor: change CI caching to before_script 2020-11-04 13:13:40 +01:00
Jovan Krunić f7790426cd fix: adjust code to overcome the breaking changes (ionic 4 to 5)
Closes #70
2020-11-03 17:29:58 +01:00
Michel Jonathan Schmitz 2822aac652 build: update dependencies 2020-11-02 09:35:49 +01:00
Michel Jonathan Schmitz d34e66fbbc docs: update changelog 2020-11-02 09:06:11 +01:00
Michel Jonathan Schmitz c6273a85d9 0.38.1 2020-11-02 08:57:41 +01:00
Michel Jonathan Schmitz 5558d29c2b ci: remove caching 2020-10-30 15:01:00 +01:00
Michel Jonathan Schmitz 69dfd1ae39 build: replace deprecated dependencies 2020-10-30 09:50:46 +01:00
Michel Jonathan Schmitz 4638bb3684 build: update dependencies 2020-10-30 09:50:46 +01:00
Michel Jonathan Schmitz 6c687c6004 docs: update changelog 2020-10-30 09:49:52 +01:00
Michel Jonathan Schmitz 0bf1301733 0.38.0 2020-10-30 09:46:46 +01:00
Wieland Schöbl 827ba47892 refactor: swap out jsonschema package for json-schema 2020-10-29 15:14:25 +01:00
Jovan Krunić 2e8d717607 refactor: adjust code after upgrade of ionic from v4 to v5
Note: used observables instead of events service which
doesn't exist in ionic 5 anymore.
2020-10-29 12:12:06 +01:00
Rainer Killinger 97f6c42407 docs: update changelog 2020-10-28 18:47:44 +01:00
Rainer Killinger 732d60883e 0.16.0 2020-10-28 18:47:39 +01:00
Wieland Schöbl 5330255b7e refactor: update dependencies and fix resulting errors
Upgraded JSON Schema from version 6 to version 7
Upgraded TypeDoc version to latest
Replaced 'jsonschema' with 'json-schema' package to better comply with 'ts-json-schema-generator'
Replace JSON Schema validation with AJV in areas where it wasn't used previously
Removed commander help output as it causes strange issues
2020-10-28 16:56:23 +01:00
Jovan Krunić cc357f36b6 build: upgrade to angular 9 2020-10-27 18:08:51 +01:00
Jovan Krunić 06e5226bbf build: update ngx-markdown 2020-10-27 18:05:16 +01:00
Jovan Krunić 28de70abd3 build: update typescript to 3.8.x 2020-10-27 17:55:35 +01:00
Jovan Krunić 2b88518ca4 build: update typescript to 3.7.x 2020-10-27 17:47:01 +01:00
Jovan Krunić 3dc115eb3a build: update to ionic 5 and angular 8 2020-10-27 17:42:16 +01:00
Jovan Krunić 8b7428d5df build: update api to fix missing req body 2020-10-23 17:07:16 +02:00
Jovan Krunić 92a21052f1 docs: update changelog 2020-10-23 16:58:28 +02:00
Jovan Krunić 8013d73fe4 0.23.0 2020-10-23 16:58:27 +02:00
Rainer Killinger 3f441505c6 docs: update changelog 2020-10-20 11:11:18 +02:00
Rainer Killinger 965637cb9c 0.8.0 2020-10-20 11:11:14 +02:00
Michel Jonathan Schmitz f2ca308a29 ci: add automatic docker image building 2020-10-20 10:10:02 +02:00
Wieland Schöbl b7cdb6a9ad fix: use value type in IndexSignature type instead of key type 2020-10-07 02:27:39 +02:00
Jovan Krunić 681cef9260 docs: update changelog 2020-10-05 17:42:51 +02:00
Jovan Krunić cc22e01e62 0.15.0 2020-10-05 17:42:50 +02:00
Sebastian Lange 1dbf4515fe feat(menu): add context menu
Closes #3
2020-09-30 10:18:52 +02:00
Sebastian Lange 3ce3c9ba16 refactor(menu): refactor main manu 2020-09-30 10:18:52 +02:00
wulkanat@gmail.com 24ea449dd4 test: add aggregations and mapping test 2020-09-29 19:02:13 +02:00
Rainer Killinger 5e06df2e3f ci: remove caching of node_modules 2020-09-29 13:20:40 +02:00
Rainer Killinger 5a0f274be6 ci: update e2e webdriver to used chrome version 2020-09-28 18:06:25 +02:00
Karl-Philipp Wulfert 755a3013a6 feat: add command to copy issues 2020-09-23 15:31:54 +02:00
wulkanat@gmail.com d3b620a745 docs: update changelog 2020-09-23 06:09:23 +02:00
wulkanat@gmail.com 821834cfa0 0.37.0 2020-09-23 06:09:13 +02:00
Karl-Philipp Wulfert a99fc357fe build: update dependencies 2020-09-21 13:57:06 +02:00
Jovan Krunić ef47d1085a docs: update changelog 2020-09-17 21:24:59 +02:00
Jovan Krunić 38bb0ed5da 0.25.0 2020-09-17 21:24:58 +02:00
Jovan Krunić ea606b6313 build: upgrade non-secure package versions
Closes #35
2020-09-14 09:50:45 +02:00
Wieland Schöbl c369c8520a fix: remove keyword tag from steps 2020-09-09 18:12:32 +02:00
wulkanat@gmail.com e5511d0738 fix: array tags did not propagate 2020-09-09 11:04:40 +02:00
Jovan Krunić aa9991ad70 fix: link to old gitlab server
Closes #27
2020-09-08 09:09:32 +00:00
Jovan Krunić ec15ebe5c5 fix: exclude test dir and its subdirs for tslint
Closes #34
2020-09-08 10:45:46 +02:00
Rainer Killinger 66075ef99b fix: remove redundant property declaration 2020-09-02 06:38:14 +00:00
Rainer Killinger 7a6333aa8f test: bump branch coverage limit 2020-08-31 13:52:41 +02:00
Rainer Killinger e242a21e99 refactor: update dependencies, remove extraneous 2020-08-31 13:52:39 +02:00
Rainer Killinger c19fd4fae2 test: fix plant uml connection test cases 2020-08-26 13:09:21 +02:00
Rainer Killinger 6fecd1e89d refactor: update ts-optchain dependency 2020-08-26 12:51:10 +02:00
Rainer Killinger 7aafb12f6f docs: update changelog 2020-07-27 15:12:54 +02:00
Rainer Killinger 31cd3c6381 0.20.1 2020-07-27 15:12:53 +02:00
Wieland Schoebl b3e107528b fix: make express parse body 2020-07-17 14:20:11 +02:00
Wieland Schoebl c6e1f96f5f Merge branch 'master' of gitlab.com:openstapps/minimal-plugin 2020-07-17 11:06:44 +02:00
Sebastian Lange f6a93e668b docs: update changelog 2020-07-16 11:37:58 +02:00
Sebastian Lange 2f96bc8569 0.36.0 2020-07-16 11:37:56 +02:00
Wieland Schoebl 96e977b365 fix: should now compile and work 2020-07-15 09:11:40 +02:00
Wieland Schoebl 8d52051cc2 fix: should now compile and work 2020-07-13 16:22:09 +02:00
Rainer Killinger cd768a9dcd fix: ignore archived projects in milestone tidy 2020-07-08 12:23:35 +02:00
Rainer Killinger e4c065d505 fix: remove invalid project name element 2020-07-08 12:22:16 +02:00
Rainer Killinger 9ce4026b1a build: lower npm audit vulnerabilities 2020-07-01 08:00:26 +00:00
Rainer Killinger e434b2d26e test: add tests for translatedThingType function 2020-07-01 08:00:26 +00:00
Rainer Killinger fe7f1a53ae feat: add function to get translated SCThingType 2020-07-01 08:00:26 +00:00
Frank Nagel 96e5cd3f50 ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:22:44 +02:00
Frank Nagel 7c9e192923 ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:13:53 +02:00
Frank Nagel 907d61b5d2 ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:12:14 +02:00
Frank Nagel 8f844ecdeb ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:09:34 +02:00
Frank Nagel c11b1da9a6 feat: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 13:09:34 +02:00
Frank Nagel 9a93ea78c3 ci: Change 'npm audit' failure behaviour
The audit fails only if the results include a vulnerability with a level of
at least 'high' in scheduled pipelines.
2020-06-19 12:56:41 +02:00
Frank Nagel 25434d54e3 fix: angular1 ng-if leftover 2020-06-02 14:04:08 +02:00
Michel Jonathan Schmitz 770945e0e9 docs: describe how to toggle backends 2020-05-15 17:17:37 +02:00
Michel Jonathan Schmitz c1d33303aa feat: add backend toggle 2020-05-15 17:17:24 +02:00
Michel Jonathan Schmitz d2517ae114 ci: add a web configuration 2020-05-15 17:16:40 +02:00
Michel Jonathan Schmitz 1913e89366 docs: update changelog 2020-05-15 09:26:25 +02:00
Michel Jonathan Schmitz 8b8088545b 0.22.0 2020-05-15 09:26:25 +02:00
Rainer Killinger 195958a3b6 refactor: change to current meeting time 2020-05-13 17:36:22 +02:00
Rainer Killinger f7ffb8525a refactor: update dependencies 2020-05-13 17:36:22 +02:00
Rainer Killinger 65d05bfe69 feat: add merge request assignment 2020-05-13 17:36:04 +02:00
Rainer Killinger 5fb9755841 docs: update changelog 2020-05-13 11:59:43 +02:00
Rainer Killinger e5dd02eeca 0.35.0 2020-05-13 11:59:33 +02:00
Michel Jonathan Schmitz 9f9167c9c7 test: update test files 2020-05-13 08:47:30 +02:00
Michel Jonathan Schmitz d30de896f0 feat: add content-type header 2020-05-13 08:47:21 +02:00
Michel Jonathan Schmitz e0ee3258e4 build: update peer dependency 2020-05-12 13:27:34 +02:00
Michel Jonathan Schmitz c09ecbb4b5 refactor: use new env-vars 2020-05-06 16:23:24 +02:00
Rainer Killinger 85b3fc4faa docs: update changelog 2020-05-06 14:58:44 +02:00
Rainer Killinger 3713fa7006 0.20.0 2020-05-06 14:58:42 +02:00
Rainer Killinger a5fa2ccc2e docs: update changelog 2020-05-06 14:22:22 +02:00
Rainer Killinger 7e0a044388 0.7.0 2020-05-06 14:22:17 +02:00
Rainer Killinger e5c9d06ef8 docs: update changelog 2020-05-06 10:57:32 +02:00
Rainer Killinger fa2b118545 0.21.0 2020-05-06 10:57:30 +02:00
Rainer Killinger 99a231800c docs: update changelog 2020-05-06 10:55:32 +02:00
Rainer Killinger 393c50a685 0.20.0 2020-05-06 10:55:32 +02:00
Rainer Killinger 3fc0bb0a1f refactor: update dependencies 2020-05-06 10:55:32 +02:00
Rainer Killinger b98f856b89 ci: cleanup and add image tag with core version 2020-05-06 10:55:24 +02:00
Rainer Killinger e7b4a426a9 test: adapt tests for translatedPropertyNames 2020-05-04 13:09:03 +02:00
Rainer Killinger 7dd74af305 refactor: simplify use of translatedPropertyNames 2020-05-04 13:08:56 +02:00
Rainer Killinger 4409101647 docs: update changelog 2020-04-21 13:40:19 +02:00
Rainer Killinger 3a141e6cf4 0.34.0 2020-04-21 13:40:11 +02:00
Rainer Killinger 545d62907e refactor: update dependencies 2020-04-14 14:00:49 +02:00
Rainer Killinger 927dcb159b feat: add merge request assignment 2020-04-14 14:00:47 +02:00
Rainer Killinger 6f85885a88 build: update gitlab-ci pipeline 2020-04-14 13:54:41 +02:00
Rainer Killinger 5ea40b2ece feat: change builder base image to docker/compose 2020-04-14 13:54:40 +02:00
Rainer Killinger 8a20e3e873 build: update indirect dependencies 2020-04-14 11:06:27 +02:00
Rainer Killinger e196303e64 refactor: state explicit type in isThing function 2020-04-14 11:05:09 +02:00
Rainer Killinger 70c1a3eaa3 feat: annotate SCThing uid and url as filterable 2020-04-14 11:03:49 +02:00
Axel Nieder-Vahrenholz 6060113df5 feat: Update src/things/book.ts - made ISBN optional 2020-04-06 09:58:51 +00:00
Rainer Killinger 9de064756a refactor: update dependencies 2020-03-23 16:32:46 +01:00
Rainer Killinger edc6e6fad5 feat: add EXIT log level 2020-03-23 16:32:41 +01:00
Rainer Killinger 9ab2510631 refactor: update dependencies 2020-03-11 15:06:11 +01:00
Rainer Killinger c570d39637 docs: update changelog 2020-03-11 14:52:46 +01:00
Rainer Killinger 5815ad8ffd 0.19.0 2020-03-11 14:52:40 +01:00
Rainer Killinger 4ae968ff0f fix: repair and unify subcommand help outputs 2020-03-10 13:35:13 +01:00
Rainer Killinger e18858fc58 feat: add option to wait on resource to e2e script 2020-03-10 13:35:13 +01:00
Rainer Killinger 3196cd986e refactor: update dependencies 2020-03-10 13:35:11 +01:00
Rainer Killinger 3fb99ad896 test: add test for log level exclusiveness 2020-03-10 12:49:04 +01:00
Rainer Killinger 100b921488 fix: log level exclusiveness calculation 2020-03-10 12:49:04 +01:00
Rainer Killinger 39d5becb56 test: add all files with functions in coverage 2020-03-09 09:34:34 +00:00
Rainer Killinger 1b677dd16d docs: update changelog 2020-03-03 16:53:18 +01:00
Rainer Killinger 508f2c39a8 0.24.0 2020-03-03 16:53:14 +01:00
Rainer Killinger 5456d4e7c0 ci: seperate audit jobs from test stage 2020-03-02 15:40:46 +01:00
Wieland Schöbl f5e88569eb feat: add @sortable tags to certain translatable properties 2020-02-21 12:55:59 +01:00
Rainer Killinger bcf212d777 refactor: update dependencies, keeping behavior 2020-02-18 11:07:57 +01:00
Rainer Killinger 67041aa39d docs: update changelog 2020-02-11 14:39:12 +01:00
Rainer Killinger 18943612a8 0.33.0 2020-02-11 14:39:07 +01:00
Rainer Killinger d167947e04 refactor: update dependencies 2020-02-11 13:06:03 +01:00
Rainer Killinger e3658862ac docs: update changelog 2020-02-11 12:56:44 +01:00
Rainer Killinger 948975f442 0.14.0 2020-02-11 12:56:37 +01:00
Rainer Killinger b74d56d7c0 refactor: update dependencies 2020-02-10 10:37:18 +01:00
Rainer Killinger 2d30f0575d docs: update changelog 2020-02-10 10:31:47 +01:00
Rainer Killinger b4131471ea 0.23.0 2020-02-10 10:31:40 +01:00
Rainer Killinger ed18c74f14 refactor: update dependencies 2020-02-06 13:56:53 +01:00
Rainer Killinger 2a0dc812d8 ci: saperate aduit jobs from test stage 2020-02-06 13:23:25 +01:00
Rainer Killinger 87b59d84f1 refactor: seperate audit jobs from test stage 2020-02-06 13:22:45 +01:00
Rainer Killinger c264c2ac36 ci: seperate audit jobs from test stage
Fixes#31
2020-02-06 12:50:51 +01:00
Rainer Killinger d364df38de docs: update changelog 2020-02-04 16:30:39 +01:00
Rainer Killinger d45c4b7154 0.18.0 2020-02-04 16:30:28 +01:00
Rainer Killinger cdb8a6507d docs: update changelog 2020-02-04 16:15:26 +01:00
Rainer Killinger 5bedb27cad 0.32.0 2020-02-04 16:15:08 +01:00
Michel Jonathan Schmitz 9eab730414 0.13.0 2020-01-28 09:15:27 +01:00
Michel Jonathan Schmitz 8b3a8f929b build: update dependencies 2020-01-22 09:22:13 +01:00
Karl-Philipp Wulfert e6f6412b5b docs: update changelog 2020-01-08 17:49:07 +01:00
Karl-Philipp Wulfert 83831deb68 0.19.0 2020-01-08 17:49:06 +01:00
Karl-Philipp Wulfert 311b62291d build: update dependencies 2020-01-08 17:48:44 +01:00
Karl-Philipp Wulfert 878568c6e6 docs: update changelog 2020-01-08 16:38:37 +01:00
Karl-Philipp Wulfert 8438fa09d3 0.6.1 2020-01-08 16:38:36 +01:00
Karl-Philipp Wulfert db5645732c fix: use passed method instead of resetting it 2020-01-08 16:32:24 +01:00
Karl-Philipp Wulfert 07b8d2aabf build: update dependencies 2020-01-08 16:31:52 +01:00
Rainer Killinger 466836cfd0 refactor: generalize docker image name 2019-12-10 13:56:19 +01:00
Rainer Killinger dc79dc8feb feat: extend e2e procedure 2019-12-10 13:38:39 +01:00
Rainer Killinger 91de58b5ae refactor: update dependencies 2019-12-10 13:38:29 +01:00
Wieland Schöbl 25a795bc91 docs: update changelog 2019-12-03 11:21:24 +01:00
Wieland Schöbl 3dc48aad7e 0.12.0 2019-12-03 11:21:23 +01:00
Wieland Schöbl 8f5570e2e2 fix: make fields with index signatures a dynamic mapping 2019-11-29 14:08:21 +01:00
Sebastian Lange 49b7c6d383 refactor(setting): adjust setting module to new core translation
Closes #53
2019-11-27 20:56:47 +01:00
Rainer Killinger 0d89b14932 feat: make SCContactPoint extend SCThing
Refactor SCPerson and SCOrganization
2019-11-25 17:31:51 +01:00
Karl-Philipp Wulfert 62972f13bd docs: update changelog 2019-11-25 14:47:12 +01:00
Karl-Philipp Wulfert 3e036e1560 0.18.0 2019-11-25 14:47:11 +01:00
Karl-Philipp Wulfert 240052cba8 refactor: adjust code to updated dependencies 2019-11-25 14:46:07 +01:00
Karl-Philipp Wulfert 554cbfa110 refactor: explicitly instantiate commander 2019-11-25 14:42:22 +01:00
Karl-Philipp Wulfert 25ff38ef24 build: update dependencies 2019-11-25 14:42:16 +01:00
Karl-Philipp Wulfert 3bf0939599 docs: update changelog 2019-11-25 14:29:17 +01:00
Karl-Philipp Wulfert a187471f4b 0.22.0 2019-11-25 14:29:17 +01:00
Karl-Philipp Wulfert 0c7b447b93 build: remove install hook 2019-11-25 14:26:51 +01:00
Karl-Philipp Wulfert c9c8a64c0e refactor: adjust code to updated dependencies 2019-11-25 14:23:36 +01:00
Karl-Philipp Wulfert 90513868c5 build: update dependencies 2019-11-25 14:23:20 +01:00
Rainer Killinger 24dbb42b34 fix: fixate webdriver to match used chrome version 2019-11-20 13:35:56 +01:00
Karl-Philipp Wulfert 2c32b58af3 docs: update changelog 2019-11-19 17:25:22 +01:00
Karl-Philipp Wulfert 5585fb9140 0.17.1 2019-11-19 17:25:21 +01:00
Karl-Philipp Wulfert dbcdb9fc1f refactor: adjust code to updated dependencies 2019-11-19 17:24:07 +01:00
Karl-Philipp Wulfert 249e8e0905 build: update dependencies 2019-11-19 17:21:44 +01:00
Karl-Philipp Wulfert b4aea2ac4b docs: update changelog 2019-11-19 14:12:15 +01:00
Karl-Philipp Wulfert 5f97843868 0.6.0 2019-11-19 14:12:14 +01:00
Karl-Philipp Wulfert 69e5aea08c build: add missing stage to CI config 2019-11-19 14:08:41 +01:00
Karl-Philipp Wulfert fcf7caca50 feat: add batch processing of issues 2019-11-19 13:57:33 +01:00
Karl-Philipp Wulfert 61195370c7 refactor: correctly use commands and options of commander 2019-11-19 12:39:45 +01:00
Karl-Philipp Wulfert edca51be10 refactor: adjust code to new TSLint rules 2019-11-19 12:06:54 +01:00
Karl-Philipp Wulfert 8a9ab5c041 build: update dependencies and configuration files 2019-11-18 15:13:43 +01:00
Karl-Philipp Wulfert 1796e88227 feat: add possibility to configure retrying of requests 2019-11-18 15:00:10 +01:00
Sebastian Lange 86709a3465 docs: update changelog 2019-11-15 15:26:26 +01:00
Sebastian Lange 13b4d34341 0.17.0 2019-11-15 15:26:25 +01:00
Karl-Philipp Wulfert ab45e35117 feat: add documentation for automatic publishing
Since the workflow is already implemented and working but not
concisely documented and known by everyone who has the
appropriate rights we need a documentation for it so that the
aforementioned persons are able to create new NPM packages
by correctly making use of the GitLab CI job.

Fixes #23
2019-11-15 11:39:35 +01:00
Sebastian Lange a0731bc26d refactor: update dependencies 2019-11-14 16:28:35 +01:00
Karl-Philipp Wulfert 5de523a4bf docs: update changelog 2019-11-14 12:06:08 +01:00
Sebastian Lange f97e199bb9 0.31.0 2019-11-14 11:04:28 +01:00
Karl-Philipp Wulfert c598b12014 docs: update changelog 2019-11-13 15:03:15 +01:00
Karl-Philipp Wulfert 41bf86e64c 0.17.0 2019-11-13 15:03:14 +01:00
Karl-Philipp Wulfert e2c6c8bc94 build: update dependencies 2019-11-13 15:02:27 +01:00
Karl-Philipp Wulfert 98c73b5758 feat: update to new meeting date 2019-11-13 15:02:12 +01:00
Wieland Schöbl 48dc47d70a docs: update changelog 2019-11-12 16:46:37 +01:00
Wieland Schöbl 53beede1dd 0.11.0 2019-11-12 16:46:36 +01:00
Wieland Schöbl 4c1a374a9e fix: use .raw field for aggregations 2019-11-12 16:36:43 +01:00
Rainer Killinger abda5cf0ca fix: translator can now handle enum translations 2019-11-11 14:46:49 +01:00
Rainer Killinger 9658f05d31 fix: remove categories from custom translations 2019-11-11 14:46:49 +01:00
Wieland Schöbl e92bf6f7c7 docs: update changelog 2019-11-08 11:07:38 +01:00
Wieland Schöbl ca8c4d1c05 0.30.0 2019-11-08 11:07:37 +01:00
Wieland Schöbl d7cc4301c0 docs: update changelog 2019-11-08 10:52:03 +01:00
Wieland Schöbl 02c483ba44 0.10.0 2019-11-08 10:52:02 +01:00
Wieland Schöbl 19ef656289 ci: make mapping test work for new mappings 2019-11-05 15:27:07 +01:00
Wieland Schöbl 443cb748fb feat: add aggregatable tag for type field 2019-11-05 13:39:06 +01:00
Wieland Schöbl 8f7201e2cf fix: make mapping of generics work correctly
fixes #27
2019-11-01 16:24:35 +01:00
Wieland Schöbl 47361d412a fix: make mapping tags work for overwritten values 2019-11-01 12:24:05 +01:00
Rainer Killinger faf0276810 refactor: update dependencies 2019-10-15 15:44:23 +02:00
Sebastian Lange 5561b36a34 refactor: add @filterable tag to filterable properties 2019-09-26 14:26:31 +02:00
Wieland Schöbl 49b55db66f docs: add checklist for adding new SCThings 2019-09-25 12:30:25 +00:00
Roman Klopsch 01f92baa98 feat: add new field sequenceIndex to message 2019-09-23 10:57:32 +02:00
Wieland Schöbl 18ad651286 feat: generate aggreations from annotations in the core 2019-09-18 13:07:32 +02:00
Wieland Schöbl ce5856cd86 docs: update changelog 2019-09-17 13:26:16 +02:00
Wieland Schöbl a821bcae83 0.29.0 2019-09-17 13:26:15 +02:00
Wieland Schöbl 149f3ffff1 feat: add mappingIgnoredTags property to SCBackend 2019-09-17 11:07:35 +00:00
Wieland Schöbl 84acd7f3ab docs: update changelog 2019-09-10 15:04:51 +02:00
Wieland Schöbl 33057e1bd7 0.9.0 2019-09-10 15:04:50 +02:00
Wieland Schöbl 9ca7870183 docs: add documentation for @filterable tag 2019-09-10 14:47:47 +02:00
Wieland Schöbl 87ee92b19b docs: update changelog 2019-09-10 14:10:21 +02:00
Wieland Schöbl 44e61bf336 0.28.0 2019-09-10 14:10:20 +02:00
Wieland Schöbl fba63db137 feat: add onlyOnType field for SCFacet 2019-09-10 07:42:11 +00:00
Michel Jonathan Schmitz 9ee4c12fff fix: use arguments instead of options 2019-09-03 16:12:14 +02:00
Wieland Schöbl 8f62b0faa0 Initial commit 2019-09-03 14:03:57 +02:00
Wieland Schöbl 238ceaaaa9 docs: update changelog 2019-09-03 13:46:12 +02:00
Wieland Schöbl 52c2ee5d67 0.16.0 2019-09-03 13:46:11 +02:00
Wieland Schöbl 3baeff23ca build: update dependencies 2019-09-03 13:44:21 +02:00
Wieland Schöbl 77e49146c0 fix: read type tags correctly after the first time 2019-09-03 13:27:59 +02:00
Wieland Schöbl 8a5251c2e6 docs: update changelog 2019-09-03 12:57:42 +02:00
Wieland Schöbl bde71c7e3a 0.27.0 2019-09-03 12:57:41 +02:00
Wieland Schöbl c2848fc7a5 feat: add plugin class
Fixes #12
2019-08-21 14:53:23 +02:00
Wieland Schöbl fec33715ad feat: add @filterable tags 2019-08-21 10:34:04 +02:00
Wieland Schöbl 36bf17e323 feat: add support for @filterable tag 2019-08-20 16:11:38 +02:00
Karl-Philipp Wulfert b1c019bece docs: update changelog 2019-08-20 10:27:57 +02:00
Karl-Philipp Wulfert 9e0da3d65b 0.16.1 2019-08-20 10:27:55 +02:00
Karl-Philipp Wulfert 7d271a7364 fix: add colors to cli log output 2019-08-20 10:27:28 +02:00
Karl-Philipp Wulfert 8a883cab86 docs: update changelog 2019-08-20 10:19:09 +02:00
Karl-Philipp Wulfert 29066210cd 0.16.0 2019-08-20 10:19:08 +02:00
Karl-Philipp Wulfert d7b68ae45c feat: only unlabel closed issues before last meeting 2019-08-20 10:18:01 +02:00
Karl-Philipp Wulfert 78e71910f4 ci: update ci config 2019-08-20 10:17:31 +02:00
Karl-Philipp Wulfert 67ab2616be build: update dependencies 2019-08-20 10:17:11 +02:00
Karl-Philipp Wulfert e32da822e1 docs: update changelog 2019-08-19 13:10:35 +02:00
Karl-Philipp Wulfert cc6e29619d 0.15.0 2019-08-19 13:10:34 +02:00
Karl-Philipp Wulfert 963b0f897c build: update dependencies 2019-08-19 13:10:04 +02:00
Karl-Philipp Wulfert 6dcca89257 docs: update changelog 2019-08-19 12:10:22 +02:00
Karl-Philipp Wulfert 3a65d4ba2f 0.26.0 2019-08-19 12:10:21 +02:00
Wieland Schöbl 88f579e09b feat: add pluginRequestTimeout field to backend config 2019-08-14 10:38:53 +02:00
Rainer Killinger be2bfb4017 build: update dependencies 2019-08-05 11:28:47 +02:00
Rainer Killinger bad15dc872 fix: complete german translations 2019-08-05 11:10:14 +02:00
Rainer Killinger 8b090af3ed refactor: add exercise category 2019-08-05 11:09:10 +02:00
Karl-Philipp Wulfert 747497699d docs: update changelog 2019-07-25 15:47:00 +02:00
Karl-Philipp Wulfert 80a102cb6a 0.25.0 2019-07-25 15:46:59 +02:00
Karl-Philipp Wulfert 234cb57070 docs: add missing contributor 2019-07-25 15:45:34 +02:00
Karl-Philipp Wulfert d4a8ef6a9c fix: correct package job 2019-07-25 15:44:47 +02:00
Karl-Philipp Wulfert 689dc99414 build: update dependencies 2019-07-25 15:36:44 +02:00
Karl-Philipp Wulfert 8bb09994de docs: update changelog 2019-07-25 15:22:21 +02:00
Karl-Philipp Wulfert 8d95db2e72 0.8.0 2019-07-25 15:22:21 +02:00
Anselm Stordeur 7b198f95ce feat: add automatic mapping generation
Fixes #6
2019-07-25 13:35:25 +02:00
Michel Jonathan Schmitz 9bcf30f336 Merge branch '2-minimal-connector-and-app-should-be-part-of-the-minimal-deployment' 2019-07-25 11:00:54 +02:00
Michel Jonathan Schmitz 74cd1a7ace docs: update README 2019-07-25 09:58:43 +02:00
Michel Jonathan Schmitz 19e556c76e feat: fixate remaining image versions 2019-07-25 09:56:19 +02:00
Michel Jonathan Schmitz d6a2f125f4 feat: add app to compose 2019-07-25 09:56:10 +02:00
Michel Jonathan Schmitz 203a8127f5 feat: add minimal-connector to compose 2019-07-25 09:55:21 +02:00
Michel Jonathan Schmitz 23f4f2de2f refactor: remove health checks on startup 2019-07-25 09:54:09 +02:00
Michel Jonathan Schmitz 27a48dd168 refactor: ignore content of the database 2019-07-25 09:53:25 +02:00
Michel Jonathan Schmitz cc402a0690 fix: add package.json in .dockerignore whitelist 2019-07-25 09:48:34 +02:00
Karl-Philipp Wulfert 7c9f2c52b7 docs: update changelog 2019-07-23 17:17:12 +02:00
Karl-Philipp Wulfert 4699d2d946 0.15.0 2019-07-23 17:17:11 +02:00
Karl-Philipp Wulfert 1eb0a50b03 refactor: remove resources directory 2019-07-23 16:59:39 +02:00
Karl-Philipp Wulfert 4f47409b54 docs: update changelog 2019-07-23 11:51:15 +02:00
Karl-Philipp Wulfert a255a50a19 0.14.0 2019-07-23 11:51:15 +02:00
Karl-Philipp Wulfert 28500f64be build: update dependencies 2019-07-23 11:50:53 +02:00
Karl-Philipp Wulfert 27d97c4c95 docs: update changelog 2019-07-23 11:20:15 +02:00
Karl-Philipp Wulfert e71dace32f 0.24.0 2019-07-23 11:20:14 +02:00
Roman Klopsch 180c966891 docs: apply changes mentioned in discussion 2019-07-23 09:27:18 +02:00
Roman Klopsch 65730d603a refactor: apply changes mentioned in discussion 2019-07-23 09:27:17 +02:00
Roman Klopsch 7fbe1620ee refactor: rename receivingOrganizations field 2019-07-23 09:27:17 +02:00
Roman Klopsch d781dd6de5 feat: add new field receivingOrganisations to message 2019-07-23 09:27:17 +02:00
Karl-Philipp Wulfert 8f3478911f refactor: remove explicit check for environment variable 2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert c34b736edd refactor: adjust docker image creation 2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert 92c9604f8d test: add tests for get-used-version task 2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert 067a2011c0 feat: add function and task to get version of used dependency
Fixes #20
2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert 9d3dd97830 build: update dependencies 2019-07-17 11:33:03 +02:00
Karl-Philipp Wulfert 69b3395a1c docs: update changelog 2019-07-16 14:49:11 +02:00
Karl-Philipp Wulfert 312890f7d8 0.13.0 2019-07-16 14:49:11 +02:00
Rainer Killinger 6b92007e3e ci: adjust .gitlab-ci.yml to latest convention 2019-07-16 14:39:31 +02:00
Rainer Killinger 3a5062d9a9 test: add test for fixed side effects 2019-07-16 14:35:39 +02:00
Roman Klopsch ded221c175 fix: change removeReferences() to also remove origin
In addition remove unwanted side effects from the function
2019-07-16 14:34:11 +02:00
Michel Jonathan Schmitz 73e797e28a build: update configuration dependency 2019-07-16 13:36:10 +02:00
Michel Jonathan Schmitz 32190cb8d5 build: update dockerignore to a whitelist 2019-07-16 13:33:49 +02:00
Michel Jonathan Schmitz 46cc4b87a0 refactor: optimize docker image building 2019-07-15 13:26:58 +02:00
Michel Jonathan Schmitz 355da9e8c4 refactor: apply stricter ts-lint rules 2019-07-15 13:14:20 +02:00
Michel Jonathan Schmitz fee004c79f build: update dependencies 2019-07-15 13:14:05 +02:00
Michel Jonathan Schmitz 2398acfe37 build: expose port in app-only dockerfile 2019-07-15 13:05:17 +02:00
Michel Jonathan Schmitz cccfb975ff build: update dependencies 2019-07-15 13:04:27 +02:00
Karl-Philipp Wulfert 24f28346bf docs: update changelog 2019-07-15 11:52:07 +02:00
Karl-Philipp Wulfert 698fd6fa8f 0.12.0 2019-07-15 11:52:06 +02:00
Karl-Philipp Wulfert 32eb493f13 build: update dependencies 2019-07-15 11:51:43 +02:00
Karl-Philipp Wulfert 86f3f8dfae docs: update changelog 2019-07-15 11:42:27 +02:00
Karl-Philipp Wulfert 34fe32b404 0.23.1 2019-07-15 11:42:26 +02:00
Rainer Killinger f95fd09112 feat: add function to remove undefined properties 2019-07-15 11:15:24 +02:00
Michel Jonathan Schmitz f262a6b8fa fix: use correct generic for the distance filter 2019-07-15 11:04:41 +02:00
Karl-Philipp Wulfert 7cc2e45b21 docs: update changelog 2019-07-15 11:02:32 +02:00
Karl-Philipp Wulfert 8290973014 0.21.1 2019-07-15 11:02:31 +02:00
Karl-Philipp Wulfert 1958f7f0b4 docs: update changelog 2019-07-12 15:47:43 +02:00
Karl-Philipp Wulfert 3220739ae4 0.11.0 2019-07-12 15:47:42 +02:00
Karl-Philipp Wulfert 6f3b122231 build: update dependencies 2019-07-12 15:47:18 +02:00
Karl-Philipp Wulfert 6a1499725c docs: update changelog 2019-07-12 10:55:45 +02:00
Karl-Philipp Wulfert 37e25800dc 0.4.0 2019-07-12 10:55:44 +02:00
Michel Jonathan Schmitz b8cefa4254 fix: remove package-job when forPackaging is false 2019-07-11 14:10:03 +02:00
Karl-Philipp Wulfert ddbe00d2a5 feat: add transformations
Fixes #9
2019-07-11 12:53:40 +02:00
Wieland Schöbl 8e7992046c docs: improved docs for comments 2019-07-10 12:50:20 +02:00
Michel Jonathan Schmitz 911492d064 fix: update core and apply stricter tslint rules 2019-07-10 12:38:29 +02:00
Michel Jonathan Schmitz 03c317430a build: update dependencies 2019-07-10 12:38:16 +02:00
Karl-Philipp Wulfert e1d4b2bc9d feat: add type maps from routes to requests and responses
Fixes #80
2019-07-04 14:56:48 +02:00
Karl-Philipp Wulfert e5659c1aa6 docs: update changelog 2019-07-03 15:43:09 +02:00
Karl-Philipp Wulfert d50addf563 0.10.0 2019-07-03 15:43:09 +02:00
Karl-Philipp Wulfert fd0bab6130 build: update dependencies 2019-07-03 15:42:28 +02:00
Jovan Krunić c3a9606f9d docs: update changelog 2019-07-03 15:30:38 +02:00
Jovan Krunić dd56d97945 0.23.0 2019-07-03 15:30:33 +02:00
Jovan Krunić 43851d2d35 feat: support 404 (resource not found) error on plugin register route 2019-07-03 15:13:38 +02:00
Rainer Killinger 78e9e8250c refactor: add publish stage for jobs that do not deploy 2019-07-02 12:48:29 +02:00
Karl-Philipp Wulfert b6272e9229 test: update NYC configuration 2019-06-28 12:42:45 +02:00
Karl-Philipp Wulfert 13dae1fb06 build: update dependencies 2019-06-28 12:38:28 +02:00
Karl-Philipp Wulfert c18e3c15f1 feat: add mapping type from response to request and vice versa
Fixes #80
2019-06-28 12:36:52 +02:00
Karl-Philipp Wulfert 54d44f1acb docs: update changelog 2019-06-28 11:32:37 +02:00
Karl-Philipp Wulfert 47b686dfd0 0.22.0 2019-06-28 11:32:36 +02:00
Wieland Schöbl 89eb10451c refactor: state types of generics explicitly 2019-06-27 12:16:29 +02:00
Michel Jonathan Schmitz 969badfb29 build: update openstapps configuration 2019-06-27 08:14:05 +02:00
Michel Jonathan Schmitz 967f946527 fix: apply stricter tslint rules 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz 38a5bfed52 build: update dependencies 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz 5d50abd411 refactor: rename class in cli options 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz 6e434145ba docs: add interface to definitions description 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz 53e80476c8 fix: emend the imports in the test files 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz 23cbc53fef style: apply strict style rules for this feature 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz 843e59811a feat: added output file name for uml generation 2019-06-27 08:08:53 +02:00
Michel Jonathan Schmitz 67b31182e4 refactor: use the gitlab registry image 2019-06-27 08:08:31 +02:00
Michel Jonathan Schmitz a478715d80 fix: update the uml job to use our node image 2019-06-27 08:08:31 +02:00
Michel Jonathan Schmitz af904a7a05 fix: remove duplicate job 2019-06-27 08:08:31 +02:00
Michel Jonathan Schmitz 0f21da4a92 feat: add the uml generator 2019-06-27 08:08:31 +02:00
Michel Jonathan Schmitz 039905742f docs: explain how to work with the dockerfile 2019-06-25 09:54:35 +02:00
Michel Jonathan Schmitz 9c90dadbef feat: add example dockerfile 2019-06-25 09:52:19 +02:00
Michel Jonathan Schmitz 198372288f fix: wait for connector to finish executing 2019-06-25 09:51:50 +02:00
Rainer Killinger a9c0fddb23 docs: update changelog 2019-06-24 12:56:16 +02:00
Rainer Killinger ef7724759d 0.7.0 2019-06-24 12:56:12 +02:00
Karl-Philipp Wulfert 4ea066af1d docs: update changelog 2019-06-24 11:46:56 +02:00
Karl-Philipp Wulfert 92f3520f7b 0.21.0 2019-06-24 11:46:55 +02:00
Michel Jonathan Schmitz 8ece33b6e6 fix: update the nyc configuration 2019-06-24 07:34:34 +02:00
Karl-Philipp Wulfert 337ed38d9c docs: update changelog 2019-06-20 11:24:10 +02:00
Karl-Philipp Wulfert c1aa5b4661 0.9.0 2019-06-20 11:24:09 +02:00
Karl-Philipp Wulfert ceab7cc7ef refactor: tidy structure of source files
Fixes #79
2019-06-19 16:18:03 +02:00
Michel Jonathan Schmitz 6fb58f3790 test: add test for full coverage testing 2019-06-19 16:14:51 +02:00
Michel Jonathan Schmitz 45755000f3 style: apply stricter ts lint rules 2019-06-19 16:13:50 +02:00
Michel Jonathan Schmitz 38f5445634 build: update dependencies 2019-06-19 16:11:52 +02:00
Karl-Philipp Wulfert 5de9bf3794 docs: add missing copyright years 2019-06-19 14:24:06 +02:00
Karl-Philipp Wulfert 02593a013c docs: add missing contributor 2019-06-19 14:23:57 +02:00
Karl-Philipp Wulfert 472038ec62 docs: update changelog 2019-06-19 14:21:49 +02:00
Karl-Philipp Wulfert 3a84d12f26 0.21.0 2019-06-19 14:21:48 +02:00
Karl-Philipp Wulfert b621a12689 refactor: adjust to new tslint settings 2019-06-18 17:26:54 +02:00
Rainer Killinger dbc0586fc2 test: add test for validator 2019-06-18 14:16:17 +02:00
Rainer Killinger b965f7cd6e test: adjust schema test for broader use cases 2019-06-18 14:16:17 +02:00
Rainer Killinger c4a403e807 refactor: reintroduce validateThing method 2019-06-18 14:16:13 +02:00
Karl-Philipp Wulfert 6ffa4efbaf build: add automatic publishing
Fixes #72
2019-06-17 15:40:40 +02:00
Karl-Philipp Wulfert e41169a9c7 refactor: adjust model to not contain any 2019-06-17 10:06:38 +00:00
Karl-Philipp Wulfert 46194b177b test: walk along dependency chains 2019-06-17 10:06:38 +00:00
Karl-Philipp Wulfert ff1f554e0b feat: add static typed test for consistency
Fixes #71
2019-06-17 10:06:38 +00:00
Benjamin Jöckel 9c424b0f96 feat: add ES annotations 2019-06-11 16:42:52 +02:00
Jovan Krunić 55b5248660 docs: update changelog 2019-06-11 16:21:56 +02:00
Jovan Krunić 961103c4e8 0.20.0 2019-06-11 16:21:37 +02:00
Karl-Philipp Wulfert 03510d6af8 docs: update changelog 2019-06-06 14:52:04 +02:00
Karl-Philipp Wulfert ff68fac5ed 0.20.0 2019-06-06 14:52:03 +02:00
Karl-Philipp Wulfert 60cabb6406 docs: add issue templates 2019-06-06 12:49:33 +02:00
Karl-Philipp Wulfert b2b0f5fca1 build: update .gitignore 2019-06-06 12:49:02 +02:00
Karl-Philipp Wulfert f90e93c1f4 test: make routes job fail if number of files is lower than 100 2019-06-05 17:38:07 +02:00
Karl-Philipp Wulfert 4d4f7bf7ac refactor: adjust code to new configuration 2019-06-05 17:25:02 +02:00
Karl-Philipp Wulfert e70d5dccab build: update dependencies 2019-06-05 16:29:16 +02:00
Rainer Killinger 771c417db8 docs: extend discription of getInstance() 2019-06-05 13:07:07 +00:00
Rainer Killinger f847a2aa0c fix: add translations for every SCThing
fix: add field translations for  basic interfaces

fix: add translations for Message, Ticket & Video

fix: add translations for AcademicEvent, Article, Book and Building

fix: add translations

fix: add translations for Dish, Floor, Person and Room

fix: finalize  known translations

fix: add translations for setting

fix: add empty translations for fieldValues

style: applied tslint rules

fix: add missing fieldValueTranslations

fix: remove illegal nested translations
2019-06-05 12:31:48 +00:00
Karl-Philipp Wulfert a5b8d459d9 docs: update changelog 2019-06-05 11:52:47 +02:00
Karl-Philipp Wulfert 6d0a1f98ee 0.14.1 2019-06-05 11:52:46 +02:00
Karl-Philipp Wulfert f470cc061f build: update dependencies 2019-06-05 11:52:26 +02:00
Karl-Philipp Wulfert d05fd8a2a5 docs: update changelog 2019-06-05 11:45:02 +02:00
Karl-Philipp Wulfert b2053c116e 0.3.1 2019-06-05 11:45:02 +02:00
Karl-Philipp Wulfert d2cb99f70f fix: correct meta information for imports 2019-06-05 11:43:49 +02:00
Karl-Philipp Wulfert 1e6e951dea docs: update changelog 2019-06-04 15:31:04 +02:00
Karl-Philipp Wulfert 2485b68b4a 0.3.0 2019-06-04 15:31:03 +02:00
Karl-Philipp Wulfert 1a4ec52712 fix: only check copyright years for TypeScript files
Fixes #25
2019-06-04 15:26:21 +02:00
Karl-Philipp Wulfert b995bb5c14 fix: skip template lines to avoid parser errors
Fixes #26
2019-06-04 15:15:02 +02:00
Karl-Philipp Wulfert 3c91c1558e docs: update changelog 2019-06-04 12:20:58 +02:00
Karl-Philipp Wulfert 7bb2e21df5 0.14.0 2019-06-04 12:20:57 +02:00
Karl-Philipp Wulfert 7ad0a843e0 build: update dependencies 2019-06-04 12:20:29 +02:00
Karl-Philipp Wulfert 3641ec4d00 feat: add max depth for reminders 2019-06-04 12:17:30 +02:00
Karl-Philipp Wulfert 65a7233905 fix: fix regression with protected tags 2019-06-04 11:51:16 +02:00
Michel Jonathan Schmitz bafcabf7cb test: create the empty test directory via code 2019-06-04 10:36:12 +02:00
Karl-Philipp Wulfert 1252c612f0 docs: update changelog 2019-06-04 10:33:19 +02:00
Karl-Philipp Wulfert 3d1985368d 0.19.0 2019-06-04 10:33:18 +02:00
Karl-Philipp Wulfert c30e83086a test: adjust tests 2019-06-03 13:20:44 +02:00
Karl-Philipp Wulfert 15a61f6932 refactor: adjust code to updated dependencies 2019-06-03 13:20:44 +02:00
Karl-Philipp Wulfert c29420805e build: update dependencies 2019-06-03 13:20:43 +02:00
Karl-Philipp Wulfert 27a8bccf5a docs: update changelog 2019-06-03 12:37:27 +02:00
Karl-Philipp Wulfert 5f5d66e23a 0.13.0 2019-06-03 12:37:26 +02:00
Karl-Philipp Wulfert ce58450c54 refactor: adjust code to updated dependencies 2019-06-03 12:34:07 +02:00
Jovan Krunić c69c5ece6f build: update dependencies 2019-06-03 11:25:25 +02:00
Jovan Krunić 4b5ce9cca5 refactor: use kebab-case for file names
Closes #22
2019-06-03 11:20:24 +02:00
Jovan Krunić cd646a2795 ci: add staging and production environments
Closes #58
2019-05-31 14:12:11 +02:00
Jovan Krunić f07eaaa7c3 docs: update changelog 2019-05-29 15:09:47 +02:00
Jovan Krunić 7d7919551b 0.18.0 2019-05-29 15:09:40 +02:00
Wieland Schöbl 78b64bae08 fix: rename properties floor and message so that they are not identical to SCThingTypes 2019-05-29 14:02:27 +02:00
Jovan Krunić 7754617c39 refactor: remove git push from the postversion script
Closes #24
2019-05-29 13:44:10 +02:00
Karl-Philipp Wulfert 2ec80fbb2f feat: add curl to Node.js image
Fixes #18
2019-05-29 11:06:57 +02:00
Karl-Philipp Wulfert cbee9b888c feat: automatically generate changelog after version bump
Fixes #23
2019-05-28 16:00:51 +02:00
Karl-Philipp Wulfert 048a067ab7 docs: update changelog 2019-05-28 15:28:34 +02:00
Karl-Philipp Wulfert b0180d5cdd 0.17.2 2019-05-28 15:28:30 +02:00
Karl-Philipp Wulfert 9e7f467070 feat: exclude tests from linting 2019-05-28 15:26:09 +02:00
Karl-Philipp Wulfert fa3db85d6a docs: update changelog 2019-05-28 11:06:06 +02:00
Karl-Philipp Wulfert dae1909d63 0.17.1 2019-05-28 11:06:03 +02:00
Karl-Philipp Wulfert 5659295b88 fix: fix regression with copyright years 2019-05-28 11:05:45 +02:00
Karl-Philipp Wulfert 9945333379 docs: update changelog 2019-05-28 10:54:28 +02:00
Karl-Philipp Wulfert 025ab59a05 0.17.0 2019-05-28 10:54:24 +02:00
Karl-Philipp Wulfert 626d87639f ci: add automatic publishing
Fixes #21
2019-05-27 18:07:31 +02:00
Karl-Philipp Wulfert 13b4d3d498 refactor: adjust code to updated dependencies 2019-05-27 18:07:30 +02:00
Karl-Philipp Wulfert 3fda81d279 docs: adjust copyright years 2019-05-27 18:03:02 +02:00
Karl-Philipp Wulfert e8863db4a2 build: update dependencies 2019-05-27 17:54:30 +02:00
Karl-Philipp Wulfert 59af9607b6 docs: update changelog 2019-05-27 16:29:33 +02:00
Karl-Philipp Wulfert 22b1b86b40 0.2.1 2019-05-27 16:29:30 +02:00
Karl-Philipp Wulfert 39a1f9ae8f ci: fix automatic publish 2019-05-27 16:29:10 +02:00
Karl-Philipp Wulfert fc6d73514f build: update dependencies 2019-05-27 16:26:07 +02:00
Karl-Philipp Wulfert ac0166020e refactor: adjust code to stricter rules 2019-05-27 16:26:07 +02:00
Karl-Philipp Wulfert 14b6420c33 feat: adjust TSLint command to enable advanced rules
References #21
2019-05-27 16:26:07 +02:00
Karl-Philipp Wulfert 76ebbfab53 feat: add sctricter TSLint rules
Fixes #21
2019-05-27 16:26:07 +02:00
Karl-Philipp Wulfert f2e40638c2 docs: update changelog 2019-05-27 13:27:17 +02:00
Karl-Philipp Wulfert 728fdc8d9f 0.12.1 2019-05-27 13:27:14 +02:00
Karl-Philipp Wulfert ab30d89d3b ci: fix CI dependency 2019-05-27 13:24:14 +02:00
Karl-Philipp Wulfert d5f33d45e2 docs: update changelog 2019-05-27 13:23:33 +02:00
Karl-Philipp Wulfert 305c158a76 0.2.0 2019-05-27 13:23:29 +02:00
Karl-Philipp Wulfert 0ac9a82a9e docs: update changelog 2019-05-27 12:57:59 +02:00
Karl-Philipp Wulfert 4a8569fbee 0.12.0 2019-05-27 12:57:53 +02:00
Karl-Philipp Wulfert 5fc36ad28c refactor: adjust code to updated dependencies 2019-05-27 12:57:26 +02:00
Karl-Philipp Wulfert 0986b42897 style: adjust copyright notices 2019-05-27 12:49:07 +02:00
Karl-Philipp Wulfert ea5cc912f0 ci: add automatic publishing 2019-05-27 12:48:53 +02:00
Karl-Philipp Wulfert 579544a2b0 build: update dependencies 2019-05-27 12:48:24 +02:00
Karl-Philipp Wulfert d60625c461 feat: notify merge request assignee instead of author 2019-05-27 12:44:27 +02:00
Karl-Philipp Wulfert 57f3ad1fe2 refactor: extrac slack channel ID into configuration 2019-05-27 12:44:05 +02:00
Karl-Philipp Wulfert 527a6f9364 feat: add rule to enforce completed docs
Fixes #20
2019-05-24 16:30:04 +02:00
Karl-Philipp Wulfert 8642155097 docs: update changelog 2019-05-24 14:14:24 +02:00
Karl-Philipp Wulfert 4343b0ffc7 0.16.1 2019-05-24 14:14:19 +02:00
Karl-Philipp Wulfert 60f7e4cae2 fix: make sure that npmrc is created in correct home directory 2019-05-24 14:13:48 +02:00
Karl-Philipp Wulfert d9c4ce48dc feat: add automatic publishing
Fixes #6
2019-05-23 13:53:10 +02:00
Karl-Philipp Wulfert 9a2eaa4f3d docs: update changelog 2019-05-22 10:02:03 +02:00
Karl-Philipp Wulfert 1b5fdd15e1 0.16.0 2019-05-22 10:01:57 +02:00
Karl-Philipp Wulfert ec8c891a7a fix: use lib as artifacts path
Fixes #19
2019-05-21 16:44:16 +02:00
Karl-Philipp Wulfert 0c8aa7257a fix: use user 'node' in Node.js image
Fixes #17
2019-05-21 16:36:35 +02:00
Michel Jonathan Schmitz aadd424400 test: improve coverage of tests for e2e 2019-05-21 13:36:01 +02:00
Michel Jonathan Schmitz ec6296a606 refactor: update e2e methods 2019-05-21 13:35:51 +02:00
Karl-Philipp Wulfert 00f4659895 docs: update changelog 2019-05-20 14:47:51 +02:00
Karl-Philipp Wulfert 04cd5ff69f 0.15.0 2019-05-20 14:47:45 +02:00
Karl-Philipp Wulfert 1e3e7dfac8 feat: add rules to enforce automatic package publishing
References #18
2019-05-20 11:46:47 +00:00
Karl-Philipp Wulfert 70b54164cd ci: add job to automatically publish package to npm
Fixes #18
2019-05-20 11:46:47 +00:00
Karl-Philipp Wulfert cf81c1e520 fix: remove wrong excluded path from nyc config
Fixes #16
2019-05-20 11:39:27 +00:00
Karl-Philipp Wulfert 73e6f2413b fix: remove incremental flag
Fixes #15
2019-05-20 11:35:43 +00:00
Jovan Krunić e3ea846470 refactor: unify plugin conflict errors
Closes #58
2019-05-17 14:15:11 +02:00
Jovan Krunić 3f10129356 docs: update changelog 2019-05-17 12:34:01 +02:00
Jovan Krunić 68c5fcacbb 0.19.0 2019-05-17 12:33:37 +02:00
Karl-Philipp Wulfert 56d43bb59a build: update dependencies 2019-05-17 08:50:20 +00:00
Karl-Philipp Wulfert 2ad314eda6 docs: correct copyright years 2019-05-17 08:50:20 +00:00
Karl-Philipp Wulfert f2a86fb6bd test: add tests to ensure consistency of model 2019-05-17 08:50:20 +00:00
Karl-Philipp Wulfert 198f48add4 test: adjust tests 2019-05-17 08:50:20 +00:00
Karl-Philipp Wulfert 5e29203e3d test: make sure to write report 2019-05-17 08:50:20 +00:00
Karl-Philipp Wulfert ca72c20bd0 fix: adjust model to remove references from things without references
Fixes #69
2019-05-17 08:50:20 +00:00
Karl-Philipp Wulfert da0507ee34 fix: add thing without references, split thing
References #69
2019-05-17 08:50:20 +00:00
Karl-Philipp Wulfert 1a73208c6f style: correct indentation and format in Thing.ts 2019-05-17 08:50:20 +00:00
Karl-Philipp Wulfert 1d6a2b7841 fix: remove references from origins
References #69
2019-05-17 08:50:20 +00:00
Jovan Krunić e3d3d022c7 test: add test files for plugin routes 2019-05-16 17:05:25 +02:00
Jovan Krunić bff6079f60 refactor: add plugin meta data interface
Closes #67
2019-05-16 17:05:24 +02:00
Karl-Philipp Wulfert 1c826a41e0 feat: warn about extraneous copyright years
References #17
2019-05-16 12:13:05 +02:00
Karl-Philipp Wulfert c0058f9c29 feat: add git to node image
Fixes #16
2019-05-16 12:03:13 +02:00
Karl-Philipp Wulfert 44c82ade69 feat: add check for copyright years
Fixes #17
2019-05-16 11:57:07 +02:00
Michel Jonathan Schmitz 7dfbb9a650 refactor: provide common functions and abstraction 2019-05-16 08:22:43 +02:00
Jovan Krunić bac09ffebc refactor: unify use of the image field
Closes #44
2019-05-15 14:22:35 +02:00
Karl-Philipp Wulfert 2c43fc09b5 docs: update changelog 2019-05-14 16:26:51 +02:00
Karl-Philipp Wulfert b7d092bf94 0.8.0 2019-05-14 16:25:48 +02:00
Karl-Philipp Wulfert 0f056cb650 ci: adjust jobs to match configuration 2019-05-14 16:25:32 +02:00
Karl-Philipp Wulfert d8cdce680d build: update dependencies 2019-05-14 16:25:20 +02:00
Karl-Philipp Wulfert 1c5a931e09 docs: update changelog 2019-05-14 14:42:41 +02:00
Karl-Philipp Wulfert e8da621558 0.18.0 2019-05-14 14:42:35 +02:00
Rainer Killinger 6f12fbda94 test: add tests concerning the translators cache 2019-05-13 15:04:31 +02:00
Rainer Killinger cf83692e71 refactor: simpify translator class functions 2019-05-13 15:04:31 +02:00
Rainer Killinger 6822e92749 docs: update README.md. Include e2e command usage 2019-05-10 12:59:20 +02:00
Rainer Killinger 3ed681d444 test: add tests for new e2e command 2019-05-10 12:59:20 +02:00
Rainer Killinger e1313b55ff feat: add e2e command. Indexes core test files. 2019-05-10 12:59:15 +02:00
Jovan Krunić 27417e80e1 build: replace missing package
Closes #65
2019-05-09 17:15:03 +02:00
Sebastian Lange 235693a9e2 refactor: initialise settings from config module and persist only the values
Closes #30, #59
2019-05-07 15:23:52 +02:00
Karl-Philipp Wulfert fb9791767d docs: update changelog 2019-05-07 10:37:51 +02:00
Karl-Philipp Wulfert 5b5080dcc7 0.1.0 2019-05-07 10:37:47 +02:00
Karl-Philipp Wulfert 3a86af72e2 docs: update changelog 2019-04-30 19:27:45 +02:00
Karl-Philipp Wulfert cf71e50368 0.14.0 2019-04-30 19:27:40 +02:00
Karl-Philipp Wulfert 98a1baf7a7 docs: update changelog 2019-04-30 17:13:38 +02:00
Karl-Philipp Wulfert 4292e2d1e5 0.11.0 2019-04-30 17:13:35 +02:00
Karl-Philipp Wulfert de05b52f24 feat: tidy sub groups 2019-04-30 17:13:20 +02:00
Karl-Philipp Wulfert 3ba2b0bf3c build: update dependencies and adjust configuration 2019-04-30 14:40:51 +02:00
Karl-Philipp Wulfert 766205049b test: adjust tests
Fixes #1
2019-04-30 14:40:46 +02:00
Karl-Philipp Wulfert 1ae3beb347 refactor: rebuild logger to be static
Fixes #4
2019-04-30 14:40:38 +02:00
Karl-Philipp Wulfert 7ef29ef56d build: adjust scripts 2019-04-30 14:40:38 +02:00
Karl-Philipp Wulfert f8f94dc026 ci: add audit stage 2019-04-30 14:40:38 +02:00
Karl-Philipp Wulfert 370658fa67 ci: use correct image for ci 2019-04-30 14:40:38 +02:00
Karl-Philipp Wulfert f63be608b8 build: update dependencies
Fixes #5
2019-04-30 14:40:32 +02:00
Karl-Philipp Wulfert 116ddebfb8 feat: add possibility to ignore CI entries
Fixes #14
2019-04-30 13:17:57 +02:00
Jovan Krunić e1039aa226 feat(data): show skeleton screens before data is loaded
Closes #4
2019-04-29 10:52:15 +00:00
Sebastian Lange bab675b806 refactor: remodel settings inputType
Flatten inputType to fit new core translation

Closes #59
2019-04-29 12:48:43 +02:00
Karl-Philipp Wulfert 2bdf0e00eb docs: update changelog 2019-04-29 12:13:09 +02:00
Karl-Philipp Wulfert c70151e566 0.10.1 2019-04-29 12:13:03 +02:00
Karl-Philipp Wulfert 7f924dc810 build: update dependencies 2019-04-29 12:08:55 +02:00
Michel Jonathan Schmitz 88f87a2ce1 refactor: removed the origin component from the date series detail component 2019-04-29 09:33:13 +00:00
Jovan Krunić 38c026fd7d build: use OpenJDK 8 instead of Oracle's version
Fixes #57
2019-04-29 09:09:13 +00:00
Jovan Krunić b9a95313cd ci: use cache instead of artifacts for node modules 2019-04-26 15:17:41 +02:00
Jovan Krunić 371dbc2890 build: ensure that webdriver is updated to fixed version
Closes #56
2019-04-26 15:17:02 +02:00
Jovan Krunić 478f49a874 fix(data): fix and adjust detail test using translation
Closes #50
2019-04-26 10:05:42 +02:00
Karl-Philipp Wulfert 58989b44b2 docs: fix link to configuration documentation in readme 2019-04-19 12:59:15 +02:00
Karl-Philipp Wulfert 6baad0ae31 docs: update changelog 2019-04-18 16:46:23 +02:00
Karl-Philipp Wulfert 1692051255 0.13.0 2019-04-18 16:46:20 +02:00
Karl-Philipp Wulfert da2d7f6f91 feat: add configuration for configuration checks
Fixes #13
2019-04-18 16:03:52 +02:00
Jovan Krunić 9d682125db fix: use HashLocationStrategy for routes
Closes #54
2019-04-18 15:22:32 +02:00
Karl-Philipp Wulfert 6e00fc1eed docs: update changelog 2019-04-17 15:56:04 +02:00
Karl-Philipp Wulfert 01aa39b8ff 0.10.0 2019-04-17 15:55:57 +02:00
Karl-Philipp Wulfert 6628bdfd20 build: update dependencies and adjust configuration 2019-04-17 15:55:39 +02:00
Karl-Philipp Wulfert ad99e45ee3 feat: add timestamp to reports 2019-04-17 15:45:25 +02:00
Karl-Philipp Wulfert d86236e944 refactor: remove report task 2019-04-17 15:45:05 +02:00
Karl-Philipp Wulfert 87801ee921 docs: remove meeting reports 2019-04-17 15:44:47 +02:00
Rainer Killinger d3790adbd8 feat: add study module interface 2019-04-17 14:50:25 +02:00
Roman Klopsch f417525195 docs: Update README.md 2019-04-17 08:56:24 +00:00
Karl-Philipp Wulfert cbc5a57cae docs: update changelog 2019-04-16 15:33:46 +02:00
Karl-Philipp Wulfert e7fb36c190 0.7.0 2019-04-16 15:33:42 +02:00
Karl-Philipp Wulfert 075c4e7205 build: adjust scripts and contributors 2019-04-16 14:53:28 +02:00
Karl-Philipp Wulfert 9e28ddb313 build: overwrite with suggested files 2019-04-16 14:52:52 +02:00
Karl-Philipp Wulfert e431098395 build: exclude documentation from packages
Fixes #11
2019-04-16 14:38:07 +02:00
Karl-Philipp Wulfert c1ad32a527 build: update dependencies 2019-04-16 14:37:52 +02:00
Karl-Philipp Wulfert d8aa023b28 docs: update changelog 2019-04-16 14:25:36 +02:00
Karl-Philipp Wulfert 4217e237fb 0.17.0 2019-04-16 14:25:33 +02:00
Karl-Philipp Wulfert c7e2584472 build: adjust build script and add contributors 2019-04-16 14:09:29 +02:00
Karl-Philipp Wulfert e30e04384f build: update dependencies 2019-04-16 14:08:16 +02:00
Karl-Philipp Wulfert 8c0613b3da docs: update changelog 2019-04-16 13:58:42 +02:00
Karl-Philipp Wulfert d7ef81f045 0.6.0 2019-04-16 13:58:38 +02:00
Karl-Philipp Wulfert 19a403c14d ci: adjust ci configuration 2019-04-16 13:42:06 +02:00
Karl-Philipp Wulfert 271da70483 build: adjust scripts and contributors 2019-04-16 13:41:54 +02:00
Karl-Philipp Wulfert 011c191538 build: exclude documentation from packages
Fixes #19
2019-04-16 13:41:35 +02:00
Karl-Philipp Wulfert c0f37ccd69 build: update dependencies 2019-04-16 13:39:34 +02:00
Karl-Philipp Wulfert 748cea493c docs: update changelog 2019-04-16 13:32:14 +02:00
Karl-Philipp Wulfert e60d2b6bb5 0.12.0 2019-04-16 13:32:08 +02:00
Karl-Philipp Wulfert a0c3a12799 refactor: extract code into several functions 2019-04-16 11:31:47 +02:00
Karl-Philipp Wulfert 34d3d43ff5 feat: add expected build script
Fixes #12
2019-04-16 10:23:25 +02:00
Karl-Philipp Wulfert 77bed076bb fix: do not escape newlines in scripts 2019-04-16 10:22:29 +02:00
Karl-Philipp Wulfert 6fb9ccb821 docs: update changelog 2019-04-15 17:41:51 +02:00
Karl-Philipp Wulfert 9fb0a7c885 0.16.0 2019-04-15 17:41:48 +02:00
Karl-Philipp Wulfert b5e0b76c24 build: exclude docs from package
Fixes #56
2019-04-15 15:51:25 +02:00
Karl-Philipp Wulfert 9bd2ba3767 docs: update changelog 2019-04-15 15:22:50 +02:00
Karl-Philipp Wulfert 5cacfadef6 0.11.0 2019-04-15 15:22:41 +02:00
Karl-Philipp Wulfert d652085b09 ci: allow audit to fail and add scheduled audit 2019-04-15 15:03:44 +02:00
Karl-Philipp Wulfert d7b6ecb734 fix: exclude docs from packages
Fixes #11
2019-04-15 15:00:03 +02:00
Jovan Krunić 58960a29ea feat(data): use general template for all offers
With help of Object.keys (which is provided to the
template) make offers template general for different
price group types (which are academic or sport course
for now).

See discussions on !2
2019-04-15 13:58:25 +02:00
Jovan Krunić c3bc227a3c fix(data): fix template and other consistency issues 2019-04-15 13:41:27 +02:00
Jovan Krunić 5855accc16 feat(data): add data detail templates
Additionally clean up the code
2019-04-12 14:14:22 +02:00
Jovan Krunić 75ca8c8a73 build: update dependencies
Additionally adjust the code after the latest
rebase.
2019-04-12 14:14:22 +02:00
Jovan Krunić 3e697b17b4 feat: add basic templates for data list items 2019-04-12 14:14:22 +02:00
Jovan Krunić 9850cf77c2 build: update openstapps packages 2019-04-12 14:14:22 +02:00
Jovan Krunić b6f92a7449 feat(data): implement basic facets handling
Related to #1
2019-04-12 14:14:22 +02:00
Jovan Krunić 2558163ad6 feat: use http interceptor for backendless development
Note: intercept method of the FakeBackendInterceptor should
be developed further whenever it is needed to fake a response
from the backend.

Closes #37
2019-04-12 14:14:22 +02:00
Jovan Krunić 8c3c2810e5 refactor(data): adjust data detail component 2019-04-12 14:14:22 +02:00
Jovan Krunić 017fc67765 feat(data): add method that checks if data item has been saved 2019-04-12 14:14:22 +02:00
Jovan Krunić 7caaa18b7e feat(data): use data provider for list and detail view 2019-04-12 14:14:22 +02:00
Jovan Krunić ffe05e4548 feat(data): add basic methods of data provider
Related to #1
2019-04-12 14:14:20 +02:00
Jovan Krunić c819d15386 build: upgrade to ionic 4 (update dependencies)
Closes #35
2019-04-12 13:51:43 +02:00
Jovan Krunić 63266f588f feat(storage): support deletion of multiple entries 2019-04-12 13:51:43 +02:00
Jovan Krunić 4334cad68c feat(storage): support search using a string 2019-04-12 13:51:43 +02:00
Jovan Krunić 86b9bff09a feat(storage): add search using regex 2019-04-12 13:51:43 +02:00
Jovan Krunić 246dddd5a5 refactor: move web http client to a new file 2019-04-12 13:51:43 +02:00
Jovan Krunić 83a2c85e05 ci: use gitlab's review apps (using surge.sh)
Closes #42
2019-04-12 12:12:27 +02:00
Jovan Krunić a503811c1c fix: fix issues found by ng build for production
Closes #48
2019-04-12 12:12:26 +02:00
Karl-Philipp Wulfert 2c70896c1c docs: update changelog 2019-04-09 17:29:55 +02:00
Karl-Philipp Wulfert 132ca7755e 0.10.0 2019-04-09 17:29:52 +02:00
Karl-Philipp Wulfert a2f44762f9 docs: update changelog 2019-04-09 17:14:55 +02:00
Karl-Philipp Wulfert d46abbe29b 0.15.0 2019-04-09 17:14:52 +02:00
Sebastian Lange 161da630ea fix(config): fix catch ConfigFetchError in getValue
Closes #46
2019-04-09 14:57:06 +00:00
Jovan Krunić 301f872c06 ci: allow failure for audit 2019-04-09 14:31:07 +00:00
Karl-Philipp Wulfert b1cee16bde docs: update changelog 2019-04-09 16:11:12 +02:00
Karl-Philipp Wulfert 7f8b158eae 0.5.1 2019-04-09 16:11:09 +02:00
Rainer Killinger 4986042428 fix: change SCThingMeta getInstance() return value 2019-04-09 14:08:07 +00:00
Karl-Philipp Wulfert 89232d9de8 docs: update changelog 2019-04-09 15:59:25 +02:00
Karl-Philipp Wulfert de3cbdb60a 0.6.0 2019-04-09 15:58:56 +02:00
Jovan Krunić 7512135393 ci: remove duplicate image entry (setup) 2019-04-09 13:50:58 +00:00
Michel Jonathan Schmitz 3242411768 feat: provide context based search 2019-04-09 13:47:53 +00:00
Karl-Philipp Wulfert bc4a85f542 docs: update changelog 2019-04-09 15:43:56 +02:00
Karl-Philipp Wulfert 1f839b46ea 0.9.0 2019-04-09 15:43:54 +02:00
Jovan Krunić f0303d27b6 build: remove extraneous comma (tsconfig.json)
Closes #44
2019-04-09 13:34:54 +00:00
Rainer Killinger b8e3322d7f docs: Update examples in README.md 2019-04-09 12:32:45 +00:00
Karl-Philipp Wulfert 37e5f6c490 build: update dependencies
Fixes #53
2019-04-09 12:36:22 +02:00
Karl-Philipp Wulfert 641b80964e docs: update changelog 2019-04-09 11:09:38 +02:00
Karl-Philipp Wulfert 67b6d50459 0.5.0 2019-04-09 11:09:20 +02:00
Karl-Philipp Wulfert cbe465efd5 build: correctly list dev dependencies 2019-04-09 08:59:28 +00:00
Karl-Philipp Wulfert e34ac4308e ci: fix scheduled audit 2019-04-09 10:57:20 +02:00
Karl-Philipp Wulfert ab81aab046 feat: add check for contributors 2019-04-08 11:35:25 +02:00
Karl-Philipp Wulfert 61d2285a1f feat: check entries in CI config
Fixes #10
2019-04-08 11:35:25 +02:00
Karl-Philipp Wulfert 081e6008cd docs: update changelog 2019-04-08 11:29:25 +02:00
Karl-Philipp Wulfert e4f6e7ca98 0.9.0 2019-04-08 11:29:19 +02:00
Karl-Philipp Wulfert 497db2cd07 build: update dependencies
Fixes #7
2019-04-08 11:10:00 +02:00
Karl-Philipp Wulfert 9e8dc186f3 build: update dependencies
Fixes #16
2019-04-08 10:59:40 +02:00
Karl-Philipp Wulfert feb0c3ba01 feat: add check for protected tags to tidy task
Fixes #14
2019-04-08 10:49:36 +02:00
Karl-Philipp Wulfert fa66a3abc1 docs: update changelog 2019-04-04 15:18:21 +02:00
Karl-Philipp Wulfert e4b97151ae 0.5.0 2019-04-04 15:18:18 +02:00
Karl-Philipp Wulfert 1b5dbdb8bc build: adjust npm scripts 2019-04-04 14:24:32 +02:00
Karl-Philipp Wulfert 385617fe39 ci: allow test job to fail 2019-04-04 14:24:32 +02:00
Karl-Philipp Wulfert 9cf6fde050 feat: add method to remove references from a thing
Fixes #6
2019-04-04 14:23:40 +02:00
Karl-Philipp Wulfert a3b16b8a37 refactor: adjust to changed dependency 2019-04-04 14:23:40 +02:00
Karl-Philipp Wulfert eed01d6d3d build: update dependencies 2019-04-04 14:23:38 +02:00
Karl-Philipp Wulfert 623ed613a9 fix: resolve issues with things that can be offered
Fixes #41
2019-04-04 13:47:30 +02:00
Karl-Philipp Wulfert f09d00dd7d docs: adjust readme to reflect actual behavior 2019-04-03 17:45:56 +02:00
Karl-Philipp Wulfert 92bfe50e1c ci: add test stage and audit job 2019-04-03 17:45:56 +02:00
Karl-Philipp Wulfert 277118b6e8 build: add incremental build 2019-04-03 17:45:54 +02:00
Karl-Philipp Wulfert fd994e2c08 docs: update changelog 2019-04-03 16:23:56 +02:00
Karl-Philipp Wulfert 8dc40dbb00 0.14.0 2019-04-03 16:23:53 +02:00
Sebastian Lange 406f400555 feat: add ConfigModule and FakeBackendInterceptor
Closes #34, #37
2019-04-03 15:57:29 +02:00
Wieland Schöbl c4e30c5fdd docs: add blank line before @param 2019-04-03 15:49:34 +02:00
Wieland Schöbl 81887315f8 feat: add model for plugin register route 2019-04-03 15:17:01 +02:00
Karl-Philipp Wulfert a7ac4fe23d docs: update changelog 2019-04-03 15:06:56 +02:00
Karl-Philipp Wulfert bd41c3a707 0.4.0 2019-04-03 15:06:53 +02:00
Wieland Schöbl 944f4e252d ci: allow audit to fail 2019-04-03 14:31:47 +02:00
Wieland Schöbl 1022150ca3 feat: add feature to validate schemas directly 2019-04-03 14:31:38 +02:00
Karl-Philipp Wulfert 55687daca9 docs: update changelog 2019-04-02 17:14:45 +02:00
Karl-Philipp Wulfert 2bf65a9086 0.13.0 2019-04-02 17:14:41 +02:00
Karl-Philipp Wulfert d9347ece05 build: remove extraneous dependency 2019-04-02 16:52:32 +02:00
Karl-Philipp Wulfert acdca2f554 test: add test for isThing guard 2019-04-02 16:24:40 +02:00
Karl-Philipp Wulfert 67868e9eb8 fix: correct isThing guard 2019-04-02 16:24:27 +02:00
Karl-Philipp Wulfert bc00f62117 test: appropriately rename schema spec 2019-04-02 16:24:03 +02:00
Karl-Philipp Wulfert 75e833d841 refactor: adjust type to new requirements 2019-04-02 15:47:20 +02:00
Karl-Philipp Wulfert a97805172c ci: allow audit stage to fail 2019-04-02 15:38:59 +02:00
Karl-Philipp Wulfert c8bda2eae7 feat: add conditional "maps" for associated types
Fixes #50
2019-04-02 15:37:10 +02:00
Karl-Philipp Wulfert 1e9f36c4be refactor: apply structure to favorites and saveable things 2019-04-02 15:36:14 +02:00
Karl-Philipp Wulfert 6da9d73477 build: update dependencies 2019-04-02 15:34:38 +02:00
Karl-Philipp Wulfert 1090d9361b build: update dependencies 2019-04-02 13:49:44 +02:00
Rainer Killinger bbe4fcac42 fix: update tslint dependencies 2019-04-01 14:10:14 +02:00
Karl-Philipp Wulfert e3bf266d60 docs: update changelog 2019-04-01 12:00:47 +02:00
Karl-Philipp Wulfert c25b449c82 0.8.0 2019-04-01 12:00:44 +02:00
Karl-Philipp Wulfert a2cf41e977 refactor: fix compile script and expected compile script 2019-03-25 12:30:17 +01:00
Karl-Philipp Wulfert bf26effe68 fix: remove @types/chalk
Furthermore update dependencies.
2019-03-25 12:28:53 +01:00
Jovan Krunić 5d1e79d487 feat: provide sample JSON files with the package
Closes #46
2019-03-21 17:34:28 +01:00
Jovan Krunić 7532a9bb62 test: use different UIDs for different things 2019-03-21 16:15:10 +01:00
Karl-Philipp Wulfert af49f4a429 docs: update changelog 2019-03-20 16:31:18 +01:00
Karl-Philipp Wulfert e65a18964a 0.8.1 2019-03-20 16:31:15 +01:00
Karl-Philipp Wulfert 5577ffee7d refactor: remove remains of markdown specific code 2019-03-20 16:30:42 +01:00
Karl-Philipp Wulfert 04eb1f1f36 docs: update changelog 2019-03-20 15:47:43 +01:00
Karl-Philipp Wulfert 06ff995d9a 0.8.0 2019-03-20 15:47:39 +01:00
Karl-Philipp Wulfert 95f7521dbd feat: use mustache instead of tangular 2019-03-20 15:47:32 +01:00
Karl-Philipp Wulfert 9847fc809c docs: update changelog 2019-03-20 13:35:44 +01:00
Karl-Philipp Wulfert 638fb7571a 0.7.0 2019-03-20 13:35:40 +01:00
Karl-Philipp Wulfert 940e0136a1 refactor: create dedicated function for report 2019-03-20 13:35:12 +01:00
Karl-Philipp Wulfert 17ae4cd0b2 docs: adjust mail address of author 2019-03-20 13:34:56 +01:00
Karl-Philipp Wulfert 5bdfb69072 docs: update report 2019-03-20 09:58:33 +01:00
Karl-Philipp Wulfert 8c2e1ad9e1 docs: update report 2019-03-18 12:47:39 +01:00
Jovan Krunić 184f6dee77 docs: update changelog 2019-03-15 11:40:37 +01:00
Jovan Krunić 923a26ef05 0.4.1 2019-03-15 11:40:02 +01:00
Jovan Krunić 7f8c9eda2f fix: adjust compile npm script to exact configuration guideline 2019-03-15 11:37:27 +01:00
Jovan Krunić fba64a4ef2 docs: update changelog 2019-03-15 11:32:08 +01:00
Jovan Krunić e98c938ba8 0.4.0 2019-03-15 11:31:51 +01:00
Jovan Krunić 782fdbebba fix: apply changes suggested by @openstapps/configuration 2019-03-14 14:48:54 +01:00
Rainer Killinger f3d27a8c6e refactor: simplify setup by already adding folder 2019-03-14 13:39:09 +00:00
Jovan Krunić 2692263533 build: update dependencies 2019-03-14 14:36:53 +01:00
Rainer Killinger 58802562f3 fix: change permissions of database folder 2019-03-14 13:31:51 +00:00
Rainer Killinger 62e36ba5a3 Merge branch '1-backend-should-wait-for-the-database-to-be-ready' into 'master'
Resolve "Backend should "wait" for the database to be ready"

Closes #1

See merge request openstapps/minimal-deployment!1
2019-03-14 11:24:28 +00:00
Jovan Krunić a4db76ec36 docs: update changelog 2019-03-14 10:16:50 +01:00
Jovan Krunić 2ff10692d5 0.12.0 2019-03-14 10:15:50 +01:00
Karl-Philipp Wulfert d12c2e7308 docs: update report 2019-03-13 09:55:30 +01:00
Sebastian Lange 7c7f2726aa refactor: remodel buckets in SCFacet 2019-03-13 09:38:31 +01:00
Rainer Killinger c609078e47 feature: add rudimentary "wait for elasticsearch" 2019-03-12 16:21:00 +00:00
Rainer Killinger 0679690a18 test: add nyc coverage report 2019-03-12 10:05:18 +01:00
Rainer Killinger 186ce89b91 test: add unit test for translation 2019-03-12 10:05:14 +01:00
Karl-Philipp Wulfert 123c9d26df docs: update report 2019-03-11 10:38:51 +01:00
Karl-Philipp Wulfert 818cad1c14 docs: update report 2019-03-07 11:33:27 +01:00
Karl-Philipp Wulfert 4f5b913539 docs: update report 2019-03-05 20:29:59 +01:00
Jovan Krunić 0d1d26cd5d docs: add badges for pipeline status and docs 2019-03-04 15:05:20 +01:00
Jovan Krunić 5a74d7e85f build: upgrade packages with security issues 2019-03-04 14:32:56 +01:00
Jovan Krunić 11be564c8a docs: generate docs and publish them on gitlab pages
Closes #38
2019-03-04 11:55:30 +01:00
Rainer Killinger 62975b9ded refactor: change meta class structure to include types.
Introduce requiredness of translations via implemented interface.
2019-02-28 10:51:37 +00:00
Rainer Killinger 90e3d22399 feat: add SCThingTranslator class. move functionality accordingly 2019-02-28 10:51:37 +00:00
Karl-Philipp Wulfert 7ebe58781b docs: update report 2019-02-28 10:59:42 +01:00
Michel Jonathan Schmitz 797e5ca9de refactor: moved default price into SCPriceGroup 2019-02-27 13:59:14 +01:00
Karl-Philipp Wulfert 04fabac8ea ci: remove npm install before script
Fixes #5
2019-02-27 13:43:44 +01:00
Karl-Philipp Wulfert 36265c19e7 docs: update report 2019-02-27 11:37:07 +01:00
Karl-Philipp Wulfert 96021991fb docs: update report 2019-02-27 09:57:49 +01:00
Karl-Philipp Wulfert 3e5fa7fc2f build: update dependencies 2019-02-26 17:13:43 +01:00
Karl-Philipp Wulfert 15e9432ae0 docs: adjust readme to reflect changes 2019-02-26 16:56:06 +01:00
Karl-Philipp Wulfert 89fcf5b642 ci: add test job for generation of route documentation 2019-02-26 16:55:53 +01:00
Karl-Philipp Wulfert d3ce936626 feat: adjust generation of route documentation
Fixes #12
2019-02-26 16:52:11 +01:00
Karl-Philipp Wulfert 4073642ec4 docs: update report 2019-02-26 13:57:56 +01:00
Jovan Krunić 6c6fc0d559 docs: update changelog 2019-02-26 10:26:46 +01:00
Jovan Krunić 3f4f47715f 0.7.0 2019-02-26 10:26:26 +01:00
Karl-Philipp Wulfert 662f534550 feat: add ability to check scripts
Furthermore do not overwrite existing NYC configuration.

Fixes #6
2019-02-25 19:27:47 +01:00
Karl-Philipp Wulfert c3dde94530 build: install correct dependencies before publishing 2019-02-25 19:27:23 +01:00
Karl-Philipp Wulfert 0de6ce30c1 docs: update changelog 2019-02-25 17:31:16 +01:00
Karl-Philipp Wulfert 7a773b6d79 0.6.0 2019-02-25 17:31:12 +01:00
Karl-Philipp Wulfert e02939c470 feat: adjust reminder for unfixed merge requests 2019-02-25 17:30:41 +01:00
Karl-Philipp Wulfert 5c6bdb98ad build: install correct dependencies before publishing 2019-02-25 17:30:28 +01:00
Karl-Philipp Wulfert dfb9d533f1 build: update dependencies 2019-02-25 17:30:22 +01:00
Karl-Philipp Wulfert a64e975df1 docs: update changelog 2019-02-25 17:22:52 +01:00
Karl-Philipp Wulfert 131bd7030c 0.5.1 2019-02-25 17:22:46 +01:00
Karl-Philipp Wulfert a74ad2f6d3 fix: correct return type for method 2019-02-25 17:22:00 +01:00
Karl-Philipp Wulfert 2464772b4c docs: update changelog 2019-02-25 17:11:53 +01:00
Karl-Philipp Wulfert a5e38bac45 0.5.0 2019-02-25 17:11:47 +01:00
Karl-Philipp Wulfert 4ef2cfb738 feat: add method to fetch merge request discussions 2019-02-25 17:11:32 +01:00
Karl-Philipp Wulfert 7c9b56f678 feat: add types for discussions 2019-02-25 17:10:56 +01:00
Karl-Philipp Wulfert 58bb6f805b build: install correct dependencies before publishing 2019-02-25 17:10:35 +01:00
Karl-Philipp Wulfert 562ee5707b build: update dependencies 2019-02-25 16:41:04 +01:00
Karl-Philipp Wulfert 3759dd59c7 docs: update report 2019-02-25 16:19:41 +01:00
Karl-Philipp Wulfert 86d9696f58 build: ensure that correct dependencies are installed 2019-02-25 15:09:03 +00:00
Karl-Philipp Wulfert 94f528bb92 docs: explain how to update related projects
Fixes #37
2019-02-25 15:09:02 +00:00
Jovan Krunić 9a49442902 fix: add todo to SCThingsWithoutDiff and SCClasses
Closes #39
2019-02-25 11:52:51 +00:00
Michel Jonathan Schmitz 1dcf0bca7c docs: add licensing guidelines 2019-02-22 12:07:30 +01:00
Karl-Philipp Wulfert 21a5986e3f docs: adjust documentation generation
Fixes #25
2019-02-22 11:01:30 +00:00
Michel Jonathan Schmitz 1dbb59b9d7 refactor: remove deprecated and unused methods 2019-02-22 11:09:35 +01:00
Michel Jonathan Schmitz d2eeaeffd8 refactor: move location from the dish to its offers 2019-02-22 10:02:11 +01:00
Karl-Philipp Wulfert 7ffc613bd7 docs: update report 2019-02-21 18:00:19 +01:00
Karl-Philipp Wulfert 47e9d0f570 docs: update changelog 2019-02-21 17:23:26 +01:00
Karl-Philipp Wulfert 1a76c98300 0.3.0 2019-02-21 17:23:22 +01:00
Karl-Philipp Wulfert c74b7c639b build: make sure that dependencies are installed 2019-02-21 17:22:58 +01:00
Karl-Philipp Wulfert 1fe63c133d build: update dependencies 2019-02-21 17:22:43 +01:00
Karl-Philipp Wulfert ac08d226e9 docs: update changelog 2019-02-21 17:08:50 +01:00
Karl-Philipp Wulfert c7462237eb 0.11.0 2019-02-21 17:08:43 +01:00
Wieland Schöbl b5bd09e40b feat: add maxRequestBodySize in backend configuration 2019-02-21 15:16:37 +00:00
Michel Jonathan Schmitz 8f66abbb73 refactor: use the SCMap more consistently 2019-02-20 11:04:55 +01:00
Karl-Philipp Wulfert 224c3466fb docs: update report 2019-02-20 09:57:43 +01:00
Jovan Krunić a0ab72e597 feat: add laboratory and computer as room categories
Closes #33
2019-02-18 12:23:13 +00:00
Karl-Philipp Wulfert 33dae87a49 ci: ensure that dependencies are installed 2019-02-18 13:07:04 +01:00
Karl-Philipp Wulfert 9ade1da6db docs: update changelog 2019-02-18 12:59:09 +01:00
Karl-Philipp Wulfert 8fd916c857 0.2.0 2019-02-18 12:59:05 +01:00
Karl-Philipp Wulfert dd6a09a4c4 build: update dependencies
Set peer dependency core to v0.10.0.
2019-02-18 12:57:12 +01:00
Karl-Philipp Wulfert b4229aac35 docs: update changelog 2019-02-18 12:47:37 +01:00
Karl-Philipp Wulfert 824e841dad 0.10.0 2019-02-18 12:47:32 +01:00
Wieland Schöbl bc3a0f6d11 feat: add model for requestBodyTooLargeError 2019-02-18 12:21:31 +01:00
Karl-Philipp Wulfert a09aae5d5d docs: update changelog 2019-02-14 13:21:51 +01:00
Karl-Philipp Wulfert c5c59412f4 0.9.0 2019-02-14 13:21:47 +01:00
Karl-Philipp Wulfert 2b54af6c7e build: replace circular-json with flatted
Fixes #2
2019-02-14 13:20:36 +01:00
Anselm Stordeur 85b62544bf build: update dependencies to fix security issues 2019-02-14 12:08:11 +01:00
Karl-Philipp Wulfert b219fb2c0f docs: update report 2019-02-14 11:42:50 +01:00
Wieland Schöbl e2ff4f4ec6 refactor: use constructor for checking error type in SCRoute
change SCRouteHttpVerbs from type to enum
2019-02-13 16:43:07 +01:00
Karl-Philipp Wulfert ad89bbbdcd docs: update report 2019-02-13 15:45:47 +01:00
Karl-Philipp Wulfert 777864964e docs: update changelog 2019-02-13 14:44:06 +01:00
Karl-Philipp Wulfert 638b79d7f9 0.6.0 2019-02-13 14:43:59 +01:00
Karl-Philipp Wulfert f9c357fccf docs: update changelog 2019-02-13 14:25:47 +01:00
Karl-Philipp Wulfert 6618f91ab6 0.8.0 2019-02-13 14:25:43 +01:00
Wieland Schöbl c7ab47397e feat: add config for maximum queries 2019-02-13 11:57:14 +01:00
Karl-Philipp Wulfert d3f1e0ff99 docs: update changelog 2019-02-13 11:48:28 +01:00
Karl-Philipp Wulfert 5eb614789a 0.7.0 2019-02-13 11:48:24 +01:00
Wieland Schöbl ce8873544d refactor: rename SCSyntaxError to SCSyntaxErrorResponse 2019-02-13 10:55:06 +01:00
Karl-Philipp Wulfert 5bf06ea75d docs: update report 2019-02-13 09:57:06 +01:00
Karl-Philipp Wulfert 267fde4024 docs: update report 2019-02-12 13:25:37 +01:00
Karl-Philipp Wulfert 418b605e0c docs: update report 2019-02-11 13:47:17 +01:00
Sebastian Lange 584878d950 fix: catch error Setting "language" not provided 2019-02-11 12:33:33 +01:00
Sebastian Lange a0c798f765 feat: add logger 2019-02-11 10:56:50 +01:00
Karl-Philipp Wulfert 9c8ce486ce fix: correctly check tslint.json
Fixes #3, #4
2019-02-07 17:50:29 +01:00
Jovan Krunić cb70ac5354 docs: update changelog 2019-02-07 17:25:10 +01:00
Jovan Krunić a12bcb3dbf 0.1.1 2019-02-07 17:24:50 +01:00
Karl-Philipp Wulfert 8ec4401d21 docs: update changelog 2019-02-07 17:05:42 +01:00
Karl-Philipp Wulfert 207ed23478 0.2.0 2019-02-07 17:05:36 +01:00
Michel Jonathan Schmitz 15ae7e5bd8 refactor: provide a generic test class 2019-02-07 16:13:11 +01:00
Michel Jonathan Schmitz 11fa530d7f docs: describe how to tidy up commits before merging 2019-02-07 15:05:52 +00:00
Michel Jonathan Schmitz 99f3236c12 build: update the dependencies 2019-02-07 16:04:38 +01:00
Jovan Krunić bceb402b5f docs: update changelog 2019-02-07 11:40:14 +01:00
Jovan Krunić 80b420e7f5 0.6.0 2019-02-07 11:31:29 +01:00
Karl-Philipp Wulfert e0169daa00 docs: update report 2019-02-07 11:24:45 +01:00
Michel Jonathan Schmitz 01a1d40f11 refactor: extract inline type definitions 2019-02-07 10:56:18 +01:00
Karl-Philipp Wulfert 4984f78d95 docs: update changelog 2019-02-06 17:04:13 +01:00
Karl-Philipp Wulfert bf7ff5abd5 0.3.0 2019-02-06 17:04:11 +01:00
Karl-Philipp Wulfert 1c744328eb feat: ensure correct path for input files 2019-02-06 17:03:51 +01:00
Karl-Philipp Wulfert 06f8e1f436 docs: update changelog 2019-02-06 16:48:00 +01:00
Karl-Philipp Wulfert 16deed5e54 0.5.0 2019-02-06 16:47:29 +01:00
Wieland Schöbl a3f9fcbfb0 feat: add model for syntax error 2019-02-06 16:37:28 +01:00
Karl-Philipp Wulfert 558a04cfd8 docs: update report 2019-02-06 11:50:00 +01:00
Karl-Philipp Wulfert 221b54fb09 docs: update report 2019-02-06 09:57:37 +01:00
Karl-Philipp Wulfert 8b0799eb9d docs: update report 2019-02-05 15:55:30 +01:00
Karl-Philipp Wulfert 9b68b492ad docs: update changelog 2019-02-05 15:53:11 +01:00
Karl-Philipp Wulfert cb7268802a 0.5.0 2019-02-05 15:52:45 +01:00
Karl-Philipp Wulfert cd48929ca1 refactor: adjust to refactored GitLab API 2019-02-05 15:52:28 +01:00
Karl-Philipp Wulfert 201ec093b7 feat: add new task to remind about open merge requests 2019-02-05 15:52:08 +01:00
Karl-Philipp Wulfert b15ef713a3 build: update dependencies 2019-02-05 15:49:31 +01:00
Karl-Philipp Wulfert 774b76b170 docs: update changelog 2019-02-05 15:47:10 +01:00
Karl-Philipp Wulfert e7be1697ec 0.4.0 2019-02-05 15:47:04 +01:00
Karl-Philipp Wulfert dc4a119172 build: update dependencies 2019-02-05 15:46:55 +01:00
Karl-Philipp Wulfert 80fd3aa42e refactor: adjust existing methods for greater scopes 2019-02-05 15:45:16 +01:00
Karl-Philipp Wulfert e4cf8dac78 refactor: remove unused method 2019-02-05 15:44:58 +01:00
Karl-Philipp Wulfert 203700a16d refactor: use stricter types and backticks for strings 2019-02-05 15:44:38 +01:00
Karl-Philipp Wulfert 9d5e2727f8 feat: add type for merge request approval 2019-02-05 15:42:58 +01:00
Karl-Philipp Wulfert 2dc6e808a9 feat: add enums for stricter types 2019-02-05 15:42:40 +01:00
Karl-Philipp Wulfert 5f12c8e70a docs: update report 2019-02-05 10:43:52 +01:00
Karl-Philipp Wulfert 62ae50d4cb docs: update report 2019-02-04 11:27:19 +01:00
Jovan Krunić fa6f3271cb docs: fix untranslated word 2019-02-01 08:40:01 +00:00
Michel Jonathan Schmitz 9f50c9c565 test: add image properties to some entities 2019-01-31 15:51:44 +00:00
Michel Jonathan Schmitz bd3d3820c6 refactor: remove the reference property 2019-01-31 15:51:44 +00:00
Michel Jonathan Schmitz 38257c0d39 refactor: help to better grasp, what the reference property is about 2019-01-31 15:51:44 +00:00
Michel Jonathan Schmitz 5238abee57 refactor: update the test to match the new characteristics structure 2019-01-31 15:51:44 +00:00
Michel Jonathan Schmitz 05d346b5c6 refactor: resolve discussions from last commit 2019-01-31 15:51:44 +00:00
Michel Jonathan Schmitz d5a0c6ba11 refactor: make characteristic a seperate type to allow additional images 2019-01-31 15:51:44 +00:00
Karl-Philipp Wulfert f78ed3b9eb docs: update report 2019-01-31 13:10:02 +01:00
Jovan Krunić 5aaa679d30 docs: update changelog 2019-01-31 12:04:48 +01:00
Jovan Krunić 85ee44626e 0.4.0 2019-01-31 12:03:34 +01:00
Jovan Krunić 7519ba2bfe docs: update changelog 2019-01-30 15:43:39 +01:00
Jovan Krunić f73d0779f1 0.2.1 2019-01-30 15:43:12 +01:00
Karl-Philipp Wulfert 6b1a4202f9 fix: use tsconfig.json of project for schema generation
Fixes #10
2019-01-30 15:15:03 +01:00
Karl-Philipp Wulfert aa645a2cc4 feat: add function to find tsconfig.json 2019-01-30 15:15:03 +01:00
Karl-Philipp Wulfert f2fb634bf3 docs: update report 2019-01-30 15:10:43 +01:00
Karl-Philipp Wulfert 87f812c857 docs: update changelog 2019-01-30 15:04:13 +01:00
Karl-Philipp Wulfert 4327e74970 build: update scripts 2019-01-30 15:03:33 +01:00
Karl-Philipp Wulfert f04c9df48c 0.1.0 2019-01-30 15:02:22 +01:00
Karl-Philipp Wulfert 9a7f4cac0b docs: update changelog 2019-01-30 14:48:09 +01:00
Karl-Philipp Wulfert f769b012d1 0.4.1 2019-01-30 14:48:04 +01:00
Karl-Philipp Wulfert 1607666266 build: adjust libs in tsconfig.json 2019-01-30 14:47:43 +01:00
Karl-Philipp Wulfert 031bbfbedb docs: update changelog 2019-01-30 14:33:47 +01:00
Karl-Philipp Wulfert 321c79e59e 0.4.0 2019-01-30 14:33:43 +01:00
Karl-Philipp Wulfert 47e977583b feat: add slack reminder for open merge requests 2019-01-30 14:32:05 +01:00
Michel Jonathan Schmitz b094885b05 style: use single quotes 2019-01-30 14:26:27 +01:00
Michel Jonathan Schmitz 3bf69988f4 style: order the scripts alphabetically 2019-01-30 14:03:34 +01:00
Michel Jonathan Schmitz 2adc0a0213 refactor: use async and wait for adding schemas 2019-01-30 14:01:04 +01:00
Michel Jonathan Schmitz 466cc2579c docs: update the method description 2019-01-30 12:29:41 +00:00
Michel Jonathan Schmitz 0f179f1200 docs: add the hint to only use the method for SC types 2019-01-30 11:29:42 +00:00
Karl-Philipp Wulfert 2860a11b61 feat: add draft of todo 2019-01-30 12:17:28 +01:00
Michel Jonathan Schmitz e559234cea fix: add SC prefix to the camel cased type of the instance 2019-01-30 10:38:11 +00:00
Michel Jonathan Schmitz 721fa02d5b refactor: update the usage of the validator tool 2019-01-30 10:41:25 +01:00
Karl-Philipp Wulfert d75f9429ac docs: update report 2019-01-30 10:03:18 +01:00
Michel Jonathan Schmitz ba2de4b48f refactor: update the CLI examples 2019-01-30 08:14:47 +00:00
Sebastian Lange 1589845ccb docs: update and translate PITFALLS 2019-01-30 09:06:28 +01:00
Michel Jonathan Schmitz da044bf470 refactor: update the dependencies 2019-01-29 16:04:03 +01:00
Karl-Philipp Wulfert 91851d8ade docs: update report 2019-01-29 14:32:24 +01:00
Karl-Philipp Wulfert 713bda7e04 docs: update changelog 2019-01-28 17:41:28 +01:00
Karl-Philipp Wulfert 6fae6180c0 0.1.0 2019-01-28 17:41:24 +01:00
Karl-Philipp Wulfert a309c4026f build: update scripts 2019-01-28 17:41:08 +01:00
Karl-Philipp Wulfert 3fa84fe1b0 docs: update changelog 2019-01-28 16:57:13 +01:00
Karl-Philipp Wulfert 88331171f5 0.3.0 2019-01-28 16:57:02 +01:00
Karl-Philipp Wulfert d3fb89c651 docs: update report 2019-01-28 16:56:45 +01:00
Karl-Philipp Wulfert 040c666e74 feat: include sub groups in report generation 2019-01-28 16:50:44 +01:00
Karl-Philipp Wulfert f1fe412734 build: update dependencies 2019-01-28 16:49:21 +01:00
Karl-Philipp Wulfert 42f9d22481 docs: update changelog 2019-01-28 16:18:39 +01:00
Karl-Philipp Wulfert a68ba59697 0.3.1 2019-01-28 16:18:34 +01:00
Karl-Philipp Wulfert 3e494ce0dc fix: correct property order 2019-01-28 16:18:15 +01:00
Karl-Philipp Wulfert 16f67c71eb docs: update changelog 2019-01-28 16:14:31 +01:00
Karl-Philipp Wulfert be71d66218 0.3.0 2019-01-28 16:14:28 +01:00
Karl-Philipp Wulfert 1854f38190 feat: add method to get subgroups 2019-01-28 16:14:14 +01:00
Jovan Krunić e37a23e8e0 build: update dependencies 2019-01-28 14:50:12 +01:00
Karl-Philipp Wulfert 557880d846 build: update scripts 2019-01-28 13:56:20 +01:00
Karl-Philipp Wulfert 3d9afcabb6 docs: update changelog 2019-01-28 13:54:03 +01:00
Karl-Philipp Wulfert fdd372f864 0.5.1 2019-01-28 13:53:55 +01:00
Jovan Krunić c46dc1828c fix: exclude CLI file in nyc configuration
Closes #5
2019-01-28 11:50:43 +01:00
Jovan Krunić db240aa4b1 ci: provide lib via artifacts instead of cache
Closes #2
2019-01-25 17:46:44 +01:00
Jovan Krunić 120f697a9b docs: update changelog 2019-01-25 17:33:17 +01:00
Jovan Krunić ab263a0a9f 0.3.0 2019-01-25 10:12:41 +01:00
Karl-Philipp Wulfert deafd8ab64 ci: add tag performance to build job
Fixes #24
2019-01-25 09:00:51 +00:00
Karl-Philipp Wulfert 3cf4e99fee build: use pack from core-tools
Fixes #27
2019-01-24 14:26:29 +01:00
Karl-Philipp Wulfert fd3cc7e3f2 docs: update report 2019-01-24 12:43:17 +01:00
Karl-Philipp Wulfert 3301545d45 docs: update changelog 2019-01-23 08:24:15 +01:00
Karl-Philipp Wulfert 4f8af3b2c2 0.2.2 2019-01-23 08:24:12 +01:00
Karl-Philipp Wulfert 8f06fc3534 fix: correctly determine project for issue 2019-01-23 08:20:03 +01:00
Karl-Philipp Wulfert 0e87e4f60d docs: update report 2019-01-23 08:19:56 +01:00
Karl-Philipp Wulfert 7ec00a415a docs: update report 2019-01-23 08:17:13 +01:00
Anselm Stordeur d3a9f38539 feat: add minimal deployment 2019-01-22 13:39:04 +01:00
Karl-Philipp Wulfert 5d105c4fa4 docs: update changelog 2019-01-21 15:43:50 +01:00
Karl-Philipp Wulfert db607545bb 0.2.0 2019-01-21 15:43:47 +01:00
Anselm Stordeur 515536f629 0.0.3 2019-01-21 15:01:34 +01:00
Anselm Stordeur cac7dbfa7d ci: rename job names 2019-01-21 14:58:59 +01:00
Anselm Stordeur df28f487e5 ci: add missing stage publish 2019-01-21 14:55:51 +01:00
Anselm Stordeur 5e3518bd62 ci: publish image after build and tests 2019-01-21 14:53:24 +01:00
Karl-Philipp Wulfert 44713d3852 docs: update changelog 2019-01-17 14:39:11 +01:00
Karl-Philipp Wulfert c9d9cebfce 0.2.1 2019-01-17 14:39:08 +01:00
Karl-Philipp Wulfert f2933ef9e2 fix: correctly add shebang line to cli 2019-01-17 14:38:40 +01:00
Karl-Philipp Wulfert 9c3cd369b0 docs: update changelog 2019-01-17 14:35:17 +01:00
Karl-Philipp Wulfert 15e20ab73c 0.2.0 2019-01-17 14:35:14 +01:00
Karl-Philipp Wulfert a22ace9c18 docs: update reports 2019-01-17 14:35:02 +01:00
Karl-Philipp Wulfert a95ec14be8 fix: correct link for projects 2019-01-17 14:33:20 +01:00
Karl-Philipp Wulfert e902d705bf fix: do not add issues to report from backlog 2019-01-17 14:33:01 +01:00
Karl-Philipp Wulfert 98d58fa472 refactor: rename cli 2019-01-17 13:29:23 +01:00
Karl-Philipp Wulfert 48c34d9e1f refactor: fix type error with flattening arrays 2019-01-17 13:28:21 +01:00
Karl-Philipp Wulfert 6d5a47292c refactor: remove remnants of pack 2019-01-17 12:56:52 +01:00
Michel Jonathan Schmitz f9a73e2b9c refactor: remove the type SCDrinkCategories 2019-01-17 12:33:24 +01:00
Karl-Philipp Wulfert 41a349ead5 fix: unlabel issues with label meeting only 2019-01-17 11:23:27 +01:00
Karl-Philipp Wulfert 3a37e607ae build: update dependencies 2019-01-17 11:23:15 +01:00
Karl-Philipp Wulfert ab19086400 refactor: remove pack 2019-01-17 11:23:05 +01:00
Anselm Stordeur f26153d970 build: add prepublishOnly script 2019-01-16 19:40:00 +01:00
Anselm Stordeur 42713f061a docs: update changelog 2019-01-16 19:28:34 +01:00
Anselm Stordeur 7590497b8c 0.0.5 2019-01-16 19:28:15 +01:00
Karl-Philipp Wulfert 27b18bec89 docs: update reports 2019-01-16 17:51:14 +01:00
Karl-Philipp Wulfert ad2e83379a docs: updat reports 2019-01-16 10:04:13 +01:00
Karl-Philipp Wulfert faca4e1300 docs: enhance and fix readme 2019-01-15 12:18:50 +01:00
Karl-Philipp Wulfert 7438465149 feat: add pack script
Fixes #4
2019-01-14 17:57:18 +01:00
Karl-Philipp Wulfert b9bd9ace50 docs: update reports 2019-01-14 17:07:48 +01:00
Jovan Krunić 73484ac686 ci: use artifacts instead of cache for lib
Fixes #23
2019-01-14 14:52:44 +01:00
Karl-Philipp Wulfert 5194c0fb11 docs: update changelog 2019-01-14 14:10:45 +01:00
Karl-Philipp Wulfert 0cdc5b97bf 0.1.1 2019-01-14 14:10:32 +01:00
Karl-Philipp Wulfert 9852f67838 refactor: remove extraneous file 2019-01-14 14:09:55 +01:00
Sebastian Lange b3ca8a2744 refactor: move SettingsProvider into package 'settings' 2019-01-11 13:53:19 +01:00
Sebastian Lange d5fa2fd9a5 feat: add permission check for geoLocation setting 2019-01-11 13:47:29 +01:00
Anselm Stordeur b248d1b5e0 fix: add missing dependency typedoc
Fixes #5
2019-01-10 17:07:00 +01:00
Anselm Stordeur 8c76221aad build: update all dependencies 2019-01-10 16:52:53 +01:00
Anselm Stordeur 3d82c94577 feat: allow env variables to overwrite smtp config
Fixes #3
2019-01-10 16:52:47 +01:00
Jovan Krunić d9f5532350 test: adjust test files after model changes
Additionally format test JSON files
2019-01-10 16:30:20 +01:00
Jovan Krunić d3d08e7735 fix: set larger v8 stack size
Temporary fix for the issue that the conversion library
(*.ts to JSON schema) which openstapps-convert uses
recursion extensively.
2019-01-10 16:30:20 +01:00
Jovan Krunić e0e0a09c7c refactor: use enumeration for the type of an origin 2019-01-10 16:30:18 +01:00
Jovan Krunić a4f3fab033 feat: add saveable thing for saving user/client data
Closes #12
2019-01-10 15:34:54 +01:00
Jovan Krunić 13a49650c4 feat: add different origin types: remote and user
Related to #12
2019-01-10 15:34:54 +01:00
Sebastian Lange cd5ac500a0 build: fix npm vulnerabilities 2019-01-10 13:33:14 +01:00
Karl-Philipp Wulfert e58d92e781 docs: update changelog 2019-01-09 14:05:06 +01:00
Karl-Philipp Wulfert a989f6f431 0.2.0 2019-01-09 14:04:51 +01:00
Karl-Philipp Wulfert e17ba3ea35 docs: update reports 2019-01-09 09:58:13 +01:00
Karl-Philipp Wulfert 93736043cc docs: update reports 2019-01-08 14:56:55 +01:00
Karl-Philipp Wulfert 3a15b6cf5b test: adjust tests 2019-01-08 14:47:45 +01:00
Karl-Philipp Wulfert 7f248eea13 feat: use tag @validatable to mark schema types 2019-01-08 14:47:42 +01:00
Karl-Philipp Wulfert 75ceeb4500 refactor: remove route generation
Fixes #21
2019-01-08 14:44:15 +01:00
Karl-Philipp Wulfert 6d11c9b915 ci: adjust ci configuration 2019-01-08 14:43:13 +01:00
Karl-Philipp Wulfert 2cfd08e911 build: update scripts 2019-01-08 14:41:07 +01:00
Karl-Philipp Wulfert a2ab90656f build: update dependencies 2019-01-08 14:40:46 +01:00
Karl-Philipp Wulfert a2bd0d113b docs: update changelog 2019-01-08 14:15:12 +01:00
Karl-Philipp Wulfert 0876e0cdf8 0.1.0 2019-01-08 14:15:08 +01:00
Karl-Philipp Wulfert cc1074b817 ci: run tests 2019-01-08 11:48:30 +01:00
Karl-Philipp Wulfert e82f235616 test: add tests for schema generation 2019-01-08 11:48:25 +01:00
Karl-Philipp Wulfert e7a36635ff build: update scripts 2019-01-07 16:52:43 +01:00
Karl-Philipp Wulfert 6adf5990ce docs: update reports 2019-01-07 12:10:49 +01:00
Karl-Philipp Wulfert 961c70b5b0 docs: update changelog 2019-01-07 12:10:31 +01:00
Karl-Philipp Wulfert 2a7669de4a 0.1.2 2019-01-07 12:10:24 +01:00
Karl-Philipp Wulfert 577168d62e build: update scripts 2019-01-07 12:10:09 +01:00
Karl-Philipp Wulfert 085727e4a2 docs: update changelog 2019-01-07 12:08:41 +01:00
Karl-Philipp Wulfert 2044621fb3 0.1.1 2019-01-07 12:08:21 +01:00
Karl-Philipp Wulfert ac8f2e10f9 fix: remove failing deletion of labels 2019-01-07 12:05:27 +01:00
Karl-Philipp Wulfert 5452fc86b3 refactor: temporary fix for wrong typing 2019-01-07 12:04:30 +01:00
Karl-Philipp Wulfert 4e5c3b127d build: update dependencies 2019-01-07 11:59:58 +01:00
Karl-Philipp Wulfert 4f1ab517c6 docs: update changelog 2019-01-07 11:54:07 +01:00
Karl-Philipp Wulfert 20cd3677ee 0.2.3 2019-01-07 11:54:02 +01:00
Karl-Philipp Wulfert 62a507163a build: automate adding of changelog 2019-01-07 11:53:45 +01:00
Karl-Philipp Wulfert c1e8cadf24 docs: update changelog 2019-01-07 11:51:39 +01:00
Karl-Philipp Wulfert 0a1a81cfc0 0.2.2 2019-01-07 11:51:16 +01:00
Karl-Philipp Wulfert f65b9aaf7f build: use correct lifecycle hook for publishes 2019-01-07 11:50:55 +01:00
Karl-Philipp Wulfert 130b39e3a2 docs: update changelog 2019-01-07 11:49:54 +01:00
Karl-Philipp Wulfert f4bee971f5 0.2.1 2019-01-07 11:49:47 +01:00
Karl-Philipp Wulfert 5f36b5372f fix: correctly delete labels 2019-01-07 11:49:18 +01:00
Michel Jonathan Schmitz ea2880e5f6 refactor: use SCThingTypes as type for type 2018-12-20 10:27:36 +01:00
Michel Jonathan Schmitz 2f43948307 refactor: remove offer from SCThingTypes 2018-12-20 10:27:16 +01:00
Michel Jonathan Schmitz f9056eeb33 refactor: refactor SCThingTypes from union-type to enum. SCThingType-type-attributes are now string-type-attributes. 2018-12-20 10:26:45 +01:00
Karl-Philipp Wulfert 7b7299d9c4 feat: validate generated schemas
Fixes #1
2018-12-19 15:34:26 +01:00
Karl-Philipp Wulfert 308235c6b4 ci: use npm install instead of ci 2018-12-19 14:55:04 +01:00
Karl-Philipp Wulfert c84ecf146e docs: update reports 2018-12-19 09:55:53 +01:00
Karl-Philipp Wulfert b3dcc2853b docs: update changelog 2018-12-18 22:29:33 +01:00
Karl-Philipp Wulfert 623e0da721 0.0.3 2018-12-18 22:29:16 +01:00
Karl-Philipp Wulfert 611882f752 build: build before packing 2018-12-18 22:28:59 +01:00
Karl-Philipp Wulfert 6502bcf2b5 fix: do not ignore resources 2018-12-18 22:28:39 +01:00
Karl-Philipp Wulfert b623f1cb3b ci: use npm install instead of ci 2018-12-18 22:15:29 +01:00
Karl-Philipp Wulfert ff3d73cb5e ci: use npm ci instead of install 2018-12-18 18:14:07 +01:00
Karl-Philipp Wulfert 1950032519 docs: update changelog 2018-12-18 17:59:56 +01:00
Karl-Philipp Wulfert 1aa9e2e316 0.0.2 2018-12-18 17:59:48 +01:00
Karl-Philipp Wulfert ec98d20b4a build: fix build process 2018-12-18 17:59:12 +01:00
Karl-Philipp Wulfert 40a21110db ci: use correct image 2018-12-18 17:46:08 +01:00
Karl-Philipp Wulfert e4cdba3c03 refactor: remove extraneous file 2018-12-18 17:45:55 +01:00
Karl-Philipp Wulfert d747477428 docs: add changelog 2018-12-18 17:41:48 +01:00
Karl-Philipp Wulfert 1ac90ef633 feat: add core tools 2018-12-18 17:41:03 +01:00
Karl-Philipp Wulfert 0c368eeba6 docs: update changelog 2018-12-18 13:19:39 +01:00
Karl-Philipp Wulfert 0c07fc801e 0.5.0 2018-12-18 13:19:32 +01:00
Karl-Philipp Wulfert 04b6154f9a fix: use template for .gitignore 2018-12-18 13:17:35 +01:00
Karl-Philipp Wulfert d5e4259e58 build: update dependencies 2018-12-18 13:17:31 +01:00
Karl-Philipp Wulfert 641eff15b8 docs: update changelog 2018-12-17 12:41:42 +01:00
Karl-Philipp Wulfert 1fb550f25a 0.1.0 2018-12-17 12:41:30 +01:00
Jovan Krunić 8978bd4a14 docs: update CHANGELOG 2018-12-14 17:10:38 +01:00
Jovan Krunić c15a98af36 0.0.2 2018-12-14 17:06:30 +01:00
Karl-Philipp Wulfert 67a692c08a docs: update readme 2018-12-13 18:27:24 +01:00
Karl-Philipp Wulfert 1a07df2d67 feat: add tool to generate documentation for routes 2018-12-13 18:27:23 +01:00
Sebastian Lange 0bec18bdf7 docs: adjust labels in issue templates 2018-12-13 16:25:15 +00:00
Karl-Philipp Wulfert 6a90b0791d docs: add badges to readme 2018-12-13 14:42:49 +01:00
Karl-Philipp Wulfert 47e9576624 docs: update changelog 2018-12-13 14:03:50 +01:00
Karl-Philipp Wulfert 6a05909ab7 0.1.0 2018-12-13 14:03:28 +01:00
Karl-Philipp Wulfert 7cb64d7f86 refactor: change move to unlabel 2018-12-13 14:03:01 +01:00
Karl-Philipp Wulfert 62ca2c33ea refactor: change modeling of obligatory parameters 2018-12-13 12:43:10 +01:00
Karl-Philipp Wulfert 643cc6f159 ci: replace ci_build variables
Fixes #7
2018-12-12 13:38:15 +01:00
Jovan Krunić 8b23159e67 feat: add the app 2018-12-11 22:11:50 +01:00
Jovan Krunić b4268b236f ci: add image for building the app 2018-12-11 22:05:31 +01:00
Karl-Philipp Wulfert 5f6be5fce1 docs: update changelog 2018-12-11 16:34:55 +01:00
Karl-Philipp Wulfert c382ecc4ee 0.4.0 2018-12-11 16:34:46 +01:00
Rainer Killinger e134778aa2 ci: adapt docker:dind scheme and update base image 2018-12-11 12:14:00 +00:00
Karl-Philipp Wulfert 4b23f8cd7e docs: add minor tweaks to project docs 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert f81be04e22 docs: add basic setup instructions 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert b277d9fd39 docs: add workflow documentation to readme 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert 7981463255 docs: add worklow docs 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert c3182caba5 docs: add list of license plates 2018-12-11 09:53:51 +00:00
Karl-Philipp Wulfert 4e1441564b feat: disallow spaces in curly braces
Fixes #2
2018-12-06 16:35:34 +01:00
Anselm Stordeur b64e9063a3 feat: add database image 2018-12-05 17:12:40 +01:00
Anselm Stordeur eb7c334bb8 fix: remove trailing slash from url if needed 2018-12-05 15:44:39 +01:00
Anselm Stordeur 8541b00dbb fix: add type and batchSize to required parameters
Closes #1
2018-12-04 17:56:22 +01:00
Karl-Philipp Wulfert d7f33f733a docs: update changelog 2018-12-04 17:28:37 +01:00
Karl-Philipp Wulfert 411773d1f6 0.3.1 2018-12-04 17:28:13 +01:00
Karl-Philipp Wulfert b1c27c064a build: fix inconsistencies in .npmignore 2018-12-04 17:27:52 +01:00
Karl-Philipp Wulfert 941570a140 refactor: add prefix to templates to avoid side effects 2018-12-04 17:27:24 +01:00
Karl-Philipp Wulfert 48fbd6ee38 docs: update changelog 2018-12-04 17:04:58 +01:00
Karl-Philipp Wulfert 611dea4210 0.3.0 2018-12-04 17:04:46 +01:00
Karl-Philipp Wulfert a5c39aa4f3 refactor: make path option value not optional 2018-12-04 16:47:11 +01:00
Karl-Philipp Wulfert d06c56aec4 docs: add documentation for added script 2018-12-04 16:28:30 +01:00
Karl-Philipp Wulfert bb0f1637c7 ci: remove tslint test job 2018-12-04 16:25:15 +01:00
Karl-Philipp Wulfert 1a72f20c10 refactor: add license headers to source files 2018-12-04 16:15:54 +01:00
Karl-Philipp Wulfert adfc5aa5dc feat: add script to check configuration 2018-12-04 14:53:14 +01:00
Karl-Philipp Wulfert 594842c7b8 build: remove extraneous files from .npmignore 2018-12-04 14:52:39 +01:00
Karl-Philipp Wulfert 96651b1c12 docs: make badges consistent 2018-12-04 14:36:06 +01:00
Karl-Philipp Wulfert a3f858942b ci: use npm ci instead of npm install 2018-12-04 14:16:48 +01:00
Karl-Philipp Wulfert d5e58586a6 build: add entry for binary 2018-12-04 14:13:31 +01:00
Karl-Philipp Wulfert f53e2aa3b8 ci: add ci config 2018-12-04 14:11:46 +01:00
Karl-Philipp Wulfert ffe2bda937 docs: update readme 2018-12-04 14:11:38 +01:00
Karl-Philipp Wulfert 827d87ba03 build: fix inconsistencies with .npmignore 2018-12-04 14:11:14 +01:00
Karl-Philipp Wulfert 0017c0f3ce build: ignore errors on install hook 2018-12-04 13:03:40 +01:00
Karl-Philipp Wulfert dae09c5c59 build: update .gitignore 2018-12-04 13:00:55 +01:00
Karl-Philipp Wulfert 98aa5a5f70 feat: add cli to copy configurations
Fixes #1
2018-12-04 13:00:50 +01:00
Jovan Krunić 47f0a4bd3d docs: add changelog 2018-12-03 18:08:38 +01:00
Jovan Krunić a8307bf975 0.0.2 2018-12-03 18:07:14 +01:00
Jovan Krunić d09744c5ff chore: update dependencies 2018-12-03 18:04:21 +01:00
Jovan Krunić 3adad8d95b docs: update package name in README 2018-12-03 18:03:55 +01:00
Jovan Krunić d332f6e6b5 feat: add minimal connector 2018-12-03 18:02:16 +01:00
Rainer Killinger 5ff7111a16 test: adjust test files to schema changes 2018-12-03 17:39:01 +01:00
Karl-Philipp Wulfert 071f39fdd8 ci: except building the project from schedules 2018-12-03 17:38:23 +01:00
Karl-Philipp Wulfert aa2cffa95e ci: use built images 2018-12-03 17:38:23 +01:00
Karl-Philipp Wulfert 94538ad5ac ci: build images on schedule 2018-12-03 17:38:23 +01:00
Rainer Killinger 0757b7b3bd refactor: exchange academicTerms for semesters 2018-12-03 17:37:18 +01:00
Rainer Killinger 67cf59c50d docs: fix typos in issue templates 2018-12-03 14:46:15 +01:00
Karl-Philipp Wulfert cb8bb21d0d docs: update changelog 2018-12-03 14:42:29 +01:00
Karl-Philipp Wulfert 756eca860a 0.0.2 2018-12-03 14:42:18 +01:00
Karl-Philipp Wulfert e3404793db docs: make readme nicer 2018-12-03 14:41:49 +01:00
Karl-Philipp Wulfert 84beb5065e docs: add issue templates 2018-12-03 14:14:39 +01:00
Rainer Killinger 3d8b03d241 test: add validation test for course of studies schema 2018-12-03 14:09:07 +01:00
Rainer Killinger 2d4a76a555 feat: add schema for course of studies 2018-12-03 14:09:07 +01:00
Rainer Killinger 85c8fc49c1 feat: add base scheme for academic degrees 2018-12-03 14:09:02 +01:00
Karl-Philipp Wulfert 06bbbd4891 build: use platform independent build tools
Fixes #5
2018-12-03 13:07:07 +01:00
Karl-Philipp Wulfert 50b5cf04f1 docs: add author and contributors 2018-11-30 17:27:40 +01:00
Karl-Philipp Wulfert 37a424c311 docs: update changelog 2018-11-30 16:49:11 +01:00
Karl-Philipp Wulfert 767df6ba32 0.2.0 2018-11-30 16:48:33 +01:00
Karl-Philipp Wulfert f228af24f9 feat: copy .editorconfig during installation 2018-11-30 16:47:57 +01:00
Karl-Philipp Wulfert 7cc274c3d5 docs: update changelog 2018-11-30 16:13:15 +01:00
Karl-Philipp Wulfert 6dcf959355 0.1.1 2018-11-30 16:13:06 +01:00
Karl-Philipp Wulfert d28d19bfc7 build: add .editorconfig to npm package 2018-11-30 16:12:45 +01:00
Karl-Philipp Wulfert fc3f54d3cf docs: update changelog 2018-11-30 16:09:34 +01:00
Karl-Philipp Wulfert 90d496f7b9 0.1.0 2018-11-30 16:09:34 +01:00
Karl-Philipp Wulfert ecbc768b32 feat: add editor config 2018-11-30 16:09:34 +01:00
Karl-Philipp Wulfert e2b9e1a07e refactor: adjust report generation and tidying 2018-11-30 14:09:47 +01:00
Karl-Philipp Wulfert 07b1c76a57 docs: update changelog 2018-11-30 11:37:37 +01:00
Karl-Philipp Wulfert 20e73a0f26 0.2.0 2018-11-30 11:37:28 +01:00
Karl-Philipp Wulfert ae6968afa4 build: update typescript 2018-11-30 11:37:14 +01:00
Karl-Philipp Wulfert ad5b0b9fe5 fix: correctly build request url 2018-11-30 11:36:18 +01:00
Karl-Philipp Wulfert c163285d05 refactor: consistently handle leading slash 2018-11-30 11:35:55 +01:00
Karl-Philipp Wulfert b828bd89ee docs: update changelog 2018-11-30 11:27:25 +01:00
Karl-Philipp Wulfert f8f099bb93 0.1.3 2018-11-30 11:27:09 +01:00
Karl-Philipp Wulfert 5e358bcacd fix: remove undocumented default params 2018-11-30 11:26:51 +01:00
Michel Jonathan Schmitz 100d1781ba refactor: Fixed spelling error availability 2018-11-30 09:25:55 +00:00
Karl-Philipp Wulfert b59dde2a48 docs: add changelog 2018-11-29 17:39:31 +01:00
Karl-Philipp Wulfert 4839f941c6 feat: add api 2018-11-29 17:38:57 +01:00
Karl-Philipp Wulfert 067f583de0 0.0.2 2018-11-29 16:43:27 +01:00
Karl-Philipp Wulfert 67bb33b2f5 ci: fix job dependency 2018-11-29 16:31:23 +01:00
Karl-Philipp Wulfert a5767063e6 docs: remove report directory from repository 2018-11-29 16:31:03 +01:00
Karl-Philipp Wulfert 8c30b2a5c6 docs: add changelog 2018-11-29 16:23:07 +01:00
Karl-Philipp Wulfert 2d770dde44 feat: add core 2018-11-29 16:22:57 +01:00
Karl-Philipp Wulfert 0ca6af8226 docs: update changelog 2018-11-29 14:39:52 +01:00
Karl-Philipp Wulfert 67bfc53af2 0.1.2 2018-11-29 14:39:46 +01:00
Karl-Philipp Wulfert 547e28fc57 fix: use correct prefix for binary 2018-11-29 14:39:26 +01:00
Karl-Philipp Wulfert 0ff24e2ca8 docs: update changelog 2018-11-29 14:37:32 +01:00
Karl-Philipp Wulfert d8a5ea03ab 0.1.1 2018-11-29 14:37:13 +01:00
Karl-Philipp Wulfert b55799b851 build: add shebang line to cli 2018-11-29 14:36:45 +01:00
Karl-Philipp Wulfert a706928f51 refactor: use lowercase for meeting label 2018-11-29 14:01:45 +01:00
Karl-Philipp Wulfert 8ae1a51669 feat: add issue template for features 2018-11-29 14:01:28 +01:00
Karl-Philipp Wulfert 82cb6970bf ci: use dind for building docker images 2018-11-29 13:52:24 +01:00
Karl-Philipp Wulfert 883ab9bfa5 feat: add nyc configuration 2018-11-29 13:48:02 +01:00
Karl-Philipp Wulfert 85228cef80 docs: add changelog 2018-11-29 13:36:42 +01:00
Karl-Philipp Wulfert 19fd0f6e4c feat: add projectmanagement and pack 2018-11-29 13:36:34 +01:00
Karl-Philipp Wulfert 40beb93a17 docs: update changelog 2018-11-29 13:02:39 +01:00
Karl-Philipp Wulfert 6266eef401 0.1.0 2018-11-29 13:02:09 +01:00
Karl-Philipp Wulfert 9b8c960144 ci: replace test with audit job 2018-11-29 12:57:47 +01:00
Karl-Philipp Wulfert fd9fd8dbd9 refactor: remove prefixes 2018-11-29 12:57:29 +01:00
Karl-Philipp Wulfert 8a823f0e3c docs: add changelog 2018-11-29 12:10:04 +01:00
Karl-Philipp Wulfert 54d212963c feat: add GitLab API 2018-11-29 12:09:55 +01:00
Karl-Philipp Wulfert 6bc370c577 docs: remove extraneous parenthesis 2018-11-29 09:24:43 +00:00
Anselm Stordeur cdbbb0ae1f docs: update changelog 2018-11-28 19:06:07 +01:00
Anselm Stordeur eff8216aff 0.0.4 2018-11-28 19:05:52 +01:00
Anselm Stordeur 77c5be6747 ci: rename publish stage to deploy 2018-11-28 19:05:35 +01:00
Anselm Stordeur ac589f0173 docs: update changelog 2018-11-28 18:50:58 +01:00
Anselm Stordeur 35fc915696 0.0.3 2018-11-28 18:50:43 +01:00
Anselm Stordeur 9cde9aa95a ci: move docs to public folder 2018-11-28 18:50:23 +01:00
Anselm Stordeur ebae32b88f docs: update changelog 2018-11-28 18:37:51 +01:00
Anselm Stordeur 7aeef17f20 0.0.2 2018-11-28 18:37:17 +01:00
Anselm Stordeur ae868a890f ci: add missing stage to .gitlab-ci.yml 2018-11-28 18:34:13 +01:00
Anselm Stordeur 2e0bbb87df docs: add changelog 2018-11-28 18:31:25 +01:00
Anselm Stordeur 911d71cf3b feat: add logger 2018-11-28 18:31:01 +01:00
Karl-Philipp Wulfert ac8119e82c docs: change title in readme 2018-11-28 17:47:50 +01:00
Karl-Philipp Wulfert d11c8270d0 docs: update changelog 2018-11-28 17:28:04 +01:00
Karl-Philipp Wulfert a529126f61 0.0.2 2018-11-28 17:27:39 +01:00
Karl-Philipp Wulfert 71a8729d4d build: install correct package for changelog 2018-11-28 17:27:06 +01:00
Karl-Philipp Wulfert ccc5ba5313 docs: add changelog 2018-11-28 16:43:58 +01:00
Karl-Philipp Wulfert e2bb08d1e8 feat: add tslint and tsconfig 2018-11-28 16:43:15 +01:00
1491 changed files with 163414 additions and 5551 deletions

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
{
"all": true,
"src": "./src",
"reporter": ["text", "text-summary", "cobertura"]
}
+8
View File
@@ -0,0 +1,8 @@
# Changesets
Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
with multi-package repos, or single-package repos to help you version and publish your code. You can
find the full documentation for it [in our repository](https://github.com/changesets/changesets)
We have a quick list of common questions to get you started engaging with this project in
[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
+11
View File
@@ -0,0 +1,11 @@
{
"$schema": "https://unpkg.com/@changesets/config@2.3.0/schema.json",
"changelog": "@changesets/changelog-git",
"commit": false,
"fixed": [],
"linked": [["@openstapps/*"]],
"access": "restricted",
"baseBranch": "develop",
"updateInternalDependencies": "patch",
"ignore": []
}
-2
View File
@@ -1,4 +1,3 @@
# EditorConfig helps developers define and maintain consistent coding styles between different editors and IDEs
# editorconfig.org
root = true
@@ -7,7 +6,6 @@ root = true
indent_style = space
indent_size = 2
# We recommend you to keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
+1
View File
@@ -0,0 +1 @@
use flake
-3
View File
@@ -1,3 +0,0 @@
{
"extends": "@openstapps"
}
+17
View File
@@ -0,0 +1,17 @@
# Auto detect text files and perform LF normalization
* text=auto
# Custom for Visual Studio
*.cs diff=csharp
# Standard to msysgit
*.doc diff=astextplain
*.DOC diff=astextplain
*.docx diff=astextplain
*.DOCX diff=astextplain
*.dot diff=astextplain
*.DOT diff=astextplain
*.pdf diff=astextplain
*.PDF diff=astextplain
*.rtf diff=astextplain
*.RTF diff=astextplain
+32 -14
View File
@@ -1,5 +1,5 @@
# Logs
logs/
logs
*.log
npm-debug.log*
yarn-debug.log*
@@ -10,12 +10,27 @@ pids
*.pid
*.seed
*.pid.lock
.DS_Store
.angular/
www/
.docs.json
coverage.xml
report-junit.xml
.deploy/
.venv/
# NixOS flake
result
hsperfdata_root
.direnv/
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov/
lib-cov
# Coverage directory used by tools like istanbul
coverage/
coverage
# nyc test coverage
.nyc_output
@@ -24,7 +39,7 @@ coverage/
.grunt
# Bower dependency directory (https://bower.io/)
bower_components/
bower_components
# node-waf configuration
.lock-wscript
@@ -34,13 +49,14 @@ build/Release
# Dependency directories
node_modules/
.pnpm-store/
jspm_packages/
# TypeScript v1 declaration files
typings/
# Optional npm cache directory
.npm/
.npm
# Optional eslint cache
.eslintcache
@@ -55,7 +71,7 @@ typings/
.yarn-integrity
# dotenv environment variables file
.env
.env.local
# parcel-bundler cache (https://parceljs.org/)
.cache
@@ -81,16 +97,18 @@ typings/
########## end of https://github.com/github/gitignore/blob/master/Node.gitignore
# ignore ide files
.idea/
.vscode/
.idea
.vscode?*
!.vscode/launch.json
# ignore lib
lib/
lib
# ignore docs
docs/
docs
# Certificates
*.crt
*.key
test/certs
# report directory
report
# turbo cache
.turbo/
+102 -68
View File
@@ -1,91 +1,125 @@
image: registry.gitlab.com/openstapps/projectmanagement/node
# `rules: if $CI_PIPELINE_SOURCE == 'merge_request_event'` seems to convert the whole
# workflow into a merge request pipeline, effectively removing all the jobs.
# To work around that, add:
# ```
# rules:
# when: on_success
# ```
# To your pipeline.
# https://docs.gitlab.com/ee/ci/pipelines/merge_request_pipelines.html#use-rules-to-add-jobs
.limit_pipelines:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event' || $CI_COMMIT_BRANCH == 'main' || $CI_COMMIT_BRANCH == 'develop'
when: on_success
- when: never
include:
- local: /backend/backend/.gitlab-ci.yml
- local: /frontend/app/.gitlab-ci.yml
- local: /.gitlab/schedules.gitlab-ci.yml
- local: /.gitlab/publishing.gitlab-ci.yml
variables:
TURBO_CACHE_BYPASS: "--force --no-cache"
default:
image: registry.gitlab.com/openstapps/openstapps/node-builder
tags:
- saas-linux-xlarge-amd64
interruptible: true
before_script:
- corepack enable
- corepack prepare pnpm@latest-10 --activate
- pnpm config set store-dir .pnpm-store
cache: &pnpm_cache
key:
files:
- pnpm-lock.yaml
paths:
- .pnpm-store/
policy: pull
stages:
- setup
- build
- test
- audit
- publish
before_script:
- npm ci
build:
stage: build
script:
- npm run build
artifacts:
paths:
- lib
# - pnpm config set recursive-install false
# - pnpm i --prefer-offline
# - pnpm build:full:skip || pnpm i -r --prefer-offline
- pnpm install
# TODO: whats the benefit for CI? something doesn't work with git here...
# "🦋 error Error: Failed to find where HEAD diverged from master. Does master exist?"
# - pnpm changeset:status
- pnpm build:full $TURBO_CACHE_BYPASS
- .gitlab/ci/enableGitlabReviewToolbar.sh frontend/app/www/browser/index.html "$CI_PROJECT_ID" "$CI_OPEN_MERGE_REQUESTS"
- cp frontend/app/www/browser/index.html frontend/app/www/browser/200.html
- pnpm dlx surge -p frontend/app/www/browser -d https://$CI_PROJECT_NAME-$DEPLOY_ID.surge.sh/
cache:
<<: *pnpm_cache
policy: pull-push
environment:
name: review/$DEPLOY_ID
url: https://$CI_PROJECT_NAME-$DEPLOY_ID.surge.sh/
on_stop: stop review
rules: &deploy-rules
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
variables:
DEPLOY_ID: $CI_MERGE_REQUEST_IID
- if: $CI_COMMIT_BRANCH == 'main'
variables:
DEPLOY_ID: production
- if: $CI_COMMIT_BRANCH == 'develop'
variables:
DEPLOY_ID: staging
- !reference [.limit_pipelines, rules]
stop review:
stage: build
needs: ['build']
script:
- pnpm dlx surge teardown $CI_PROJECT_NAME-$DEPLOY_ID.surge.sh
environment:
name: review/$DEPLOY_ID
action: stop
when: manual
rules: *deploy-rules
unit:
image: registry.gitlab.com/openstapps/openstapps/app-builder
stage: test
needs: ['build']
script:
- npm test
- pnpm install
- pnpm test $TURBO_CACHE_BYPASS
coverage: '/Statements[^:]*\:[^:]*\s+([\d\.]+)%/'
artifacts:
when: on_failure
paths:
- report-junit.xml
- coverage.xml
reports:
junit:
- report-junit.xml
coverage_report:
coverage_format: cobertura
path: coverage/cobertura-coverage.xml
path: coverage.xml
rules:
- !reference [.limit_pipelines, rules]
audit:
stage: audit
allow_failure: true
except:
- schedules
needs: []
script:
- npm audit
stage: audit
scheduled-audit:
only:
- schedules
script:
- npm audit --audit-level=high
stage: audit
docker image build:
image: registry.gitlab.com/openstapps/projectmanagement/builder
stage: test
dependencies:
- build
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
script:
- docker build -t $CI_REGISTRY_IMAGE/$REGISTRY_BRANCH$CI_COMMIT_REF_NAME:latest .
tags:
- docker
docker image:
image: registry.gitlab.com/openstapps/projectmanagement/builder
stage: publish
dependencies:
- build
variables:
DOCKER_DRIVER: overlay2
services:
- docker:dind
script:
- export VERSION=$(echo -n "$CI_BUILD_REF_NAME" | cut -c 2-)
- export IMAGETAG_BASE=$CI_REGISTRY_IMAGE
- export IMAGETAG_VERSION=$IMAGETAG_BASE:$VERSION
- export IMAGETAG_LATEST=$IMAGETAG_BASE:latest
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker build -t $IMAGETAG_VERSION -t $IMAGETAG_LATEST .
- docker push $IMAGETAG_BASE
only:
- /^v[0-9]+\.[0-9]+\.[0-9]+$/
tags:
- docker
pages:
artifacts:
paths:
- public
only:
- /^v[0-9]+\.[0-9]+\.[0-9]+$/
script:
- npm run documentation
- mv docs public
stage: publish
- pnpm audit --prod --audit-level critical
rules:
- !reference [.limit_pipelines, rules]
# - if: $CI_COMMIT_BRANCH == 'main'
# allow_failure: false
+16
View File
@@ -0,0 +1,16 @@
#!/usr/bin/env sh
set -e
# Adds a preedefined script tag including the merge current request id to the angular web app index.html.
# This enables the interactive gitlab review toolbar.
MERGE_REQUEST_ID=""
if echo -n $3 | grep -Eq '[0-9]+$'; then
MERGE_REQUEST_ID="$(echo -n "$3" | grep -Eo '[0-9]+$')"
fi
INDEX_PATH=$(dirname $1)
SCRIPT_TAG="<script defer data-project-id=\"$2\" data-project-path=\"openstapps/openstapps\" data-merge-request-id=\"$MERGE_REQUEST_ID\" data-mr-url=\"https://gitlab.com\" id=\"review-app-toolbar-script\" src=\"visual_review_toolbar.js\"></script>"
curl https://gitlab.com/assets/webpack/visual_review_toolbar.js --output "$INDEX_PATH/visual_review_toolbar.js" --silent
sed -i -e "\@</head>@i\\$SCRIPT_TAG" $1
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env sh
# script returns string with everything after the last colon of $1 input
echo -n $1 | grep -oE '[^:]+$'
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env sh
# script returns semantical versioning string like 2.0.0 (if $1 is v2.0.0) or $1
if echo -n $1 | grep -Eq 'v[0-9]+\.[0-9]+\.[0-9]+'; then
echo $(echo -n "$1" | cut -c 2-);
else
echo $1;
fi
+6
View File
@@ -0,0 +1,6 @@
#!/usr/bin/env sh
if pnpm dlx turbo-ignore "$@"
then
pnpm config --location=project set recursive-install false
fi
+7
View File
@@ -0,0 +1,7 @@
#!/usr/bin/env sh
# If this is a pipeline of a version tag, also push this version
# as latest to the registry alias $2:latest
if echo -n $1 | grep -Eq 'v[0-9]+\.[0-9]+\.[0-9]+'; then
docker push $2:latest;
fi
+5
View File
@@ -0,0 +1,5 @@
#!/bin/bash
echo TURBO_API=$TURBO_API >> .env.local
echo TURBO_TOKEN=$TURBO_TOKEN >> .env.local
echo TURBO_TEAM=$TURBO_TEAM >> .env.local
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env sh
# test all CI scripts
SCRIPT_DIR=$(dirname "$0")
TAG_VERSION=$(sh $SCRIPT_DIR/getRegistryTag.sh "v1.0.0")
TAG_TEST=$(sh $SCRIPT_DIR/getRegistryTag.sh "TEST")
BRANCH_NAME=$(sh $SCRIPT_DIR/getRegistryBranch.sh "very:first:test")
# Leaving out pushAsLatestVersion.sh as its control flow
# is based on the same condition as getRegistryTag.sh
if [ $TAG_VERSION != "1.0.0" ]; then
echo "ERROR in CI SCRIPT: $SCRIPT_DIR/getRegistryTag.sh"
return 1
fi
if [ $TAG_TEST != "TEST" ]; then
echo "ERROR in CI SCRIPT: $SCRIPT_DIR/getRegistryTag.sh"
return 2
fi
if [ $BRANCH_NAME != "test" ]; then
echo "ERROR in CI SCRIPT: $SCRIPT_DIR/getRegistryBranch.sh"
return 3
fi
return 0
+1 -7
View File
@@ -2,37 +2,31 @@
(Summarize the bug encountered concisely)
## Steps to reproduce
(How one can reproduce the issue - this is very important)
## Example Project
(If possible, please create an example project here on GitLab.com that exhibits the problematic behaviour, and link to it here in the bug report)
(If you are using an older version of GitLab, this will also determine whether the bug has been fixed in a more recent version)
## What is the current bug behavior?
(What actually happens)
## What is the expected correct behavior?
(What you should see instead)
## Relevant logs and/or screenshots
(Paste any relevant logs - please use code blocks (```) to format console output,
logs, and code as it's very hard to read otherwise.)
## Possible fixes
(If you can, link to the line of code that might be responsible for the problem)
/label ~meeting ~bug
/label ~bug ~meeting
+4 -3
View File
@@ -2,15 +2,16 @@
(Describe the feature that you're requesting concisely)
## Explanation
(Explain why the feature is necessary)
## Mockups/Screenshots
(If possible, provide mockups or screenshots, which demonstrate the feature)
## Dependencies, issues to be resolved beforehand
(List issues or dependencies that need to be resolved before this feature can be implemented)
/label ~meeting ~feature
/label ~feature ~meeting
+17
View File
@@ -0,0 +1,17 @@
## What needs to be changed?
??? - Describe use case!
## How is the current state not sufficient?
???
## Which changes are necessary?
???
## Do the proposed changes impact current use cases?
???
/label ~improvement ~meeting
+83
View File
@@ -0,0 +1,83 @@
.limit_publish_pipelines:
rules:
- if: '$CI_COMMIT_BRANCH == "develop" && $CI_COMMIT_MESSAGE =~ /ci: publish prerelease/ && $CI_PIPELINE_SOURCE != "schedule"'
variables:
PUBLISH_TAG: next
- if: '$CI_COMMIT_BRANCH == "main" && $CI_COMMIT_MESSAGE =~ /ci: publish release/ && $CI_PIPELINE_SOURCE != "schedule"'
variables:
PUBLISH_TAG: latest
deploy:
stage: publish
needs: ['build', 'unit', 'integration', 'e2e', 'audit']
script:
- pnpm install
- pnpm run deploy
artifacts:
paths:
- ./.deploy
- ./frontend/app/www
rules:
- !reference [.limit_publish_pipelines, rules]
publish image:
stage: publish
inherit:
default:
- tags
needs: ['deploy']
image:
name: gcr.io/kaniko-project/executor:v1.24.0-debug
entrypoint: [""]
script:
- >
/kaniko/executor
--context "${CI_PROJECT_DIR}/${DEPLOY_DIR}"
--dockerfile "${CI_PROJECT_DIR}/${DEPLOY_DIR}/Dockerfile"
--destination "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:$(grep -o '"version": "[^"]*' "${DEPLOY_DIR}/package.json" | cut -d'"' -f4)"
--destination "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${PUBLISH_TAG}"
parallel:
matrix:
- IMAGE_NAME: database
DEPLOY_DIR: backend/database
- IMAGE_NAME: backend
DEPLOY_DIR: .deploy/backend
- IMAGE_NAME: proxy
DEPLOY_DIR: .deploy/proxy
- IMAGE_NAME: api
DEPLOY_DIR: .deploy/api-cli
- IMAGE_NAME: minimal-connector
DEPLOY_DIR: .deploy/minimal-connector
- IMAGE_NAME: minimal-plugin
DEPLOY_DIR: .deploy/minimal-plugin
- IMAGE_NAME: app
DEPLOY_DIR: frontend/app
rules:
- !reference [.limit_publish_pipelines, rules]
publish packages:
stage: publish
needs: ['deploy']
variables:
GIT_STRATEGY: clone
GIT_DEPTH: 0
script:
- pnpm install
- pnpm build
- pnpm config set '//registry.npmjs.org/:_authToken' "${NPM_AUTH_TOKEN}"
- pnpm publish -r --publish-branch ${CI_COMMIT_BRANCH} --tag ${PUBLISH_TAG} --no-git-checks # TODO: Git checks...
rules:
- !reference [.limit_publish_pipelines, rules]
publish docs:
stage: publish
needs: ['deploy']
script:
- pnpm install --prefer-offline
- pnpm run docs
- mv docs public
artifacts:
paths:
- public
rules:
- !reference [.limit_publish_pipelines, rules]
+35
View File
@@ -0,0 +1,35 @@
.limit_scheduled_pipelines:
rules:
- if: $CI_COMMIT_BRANCH == 'main' && $CI_PIPELINE_SOURCE == "schedule"
base image:
image: docker
stage: setup
tags:
- gitlab-org-docker
inherit:
default:
- interruptible
services:
- docker:dind
script:
- >
docker login -u "${CI_REGISTRY_USER}" -p "${CI_JOB_TOKEN}" "${CI_REGISTRY}" &&
docker build
-t "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:$(grep -o '"version": "[^"]*' "${DEPLOY_DIR}/package.json" | cut -d'"' -f4)"
-t "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:latest" "${CI_PROJECT_DIR}/${DEPLOY_DIR}" &&
docker push "${CI_REGISTRY_IMAGE}/${IMAGE_NAME}" --all-tags
cache: {} # disable irrelevant cache for this job
before_script: [] # do not run irrelevant before script for this job
parallel:
matrix:
- IMAGE_NAME: node-base
DEPLOY_DIR: images/node-base
- IMAGE_NAME: node-builder
DEPLOY_DIR: images/node-builder
- IMAGE_NAME: app-builder
DEPLOY_DIR: images/app-builder
- IMAGE_NAME: app-cypress
DEPLOY_DIR: images/app-cypress
rules:
- !reference [.limit_scheduled_pipelines, rules]
+3
View File
@@ -0,0 +1,3 @@
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <git@killinger.co>
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <killinge@hrz.uni-frankfurt.de>
Rainer Killinger <mail-openstapps@killinger.co> Rainer Killinger <killinger@hrz.uni-frankfurt.de>
+7
View File
@@ -0,0 +1,7 @@
{
"extension": ["ts"],
"node-option": ["loader=ts-node/esm"],
"reporter": "mocha-junit-reporter",
"reporter-option": ["mochaFile=coverage/report-junit.xml"],
"spec": ["test/**/*.spec.ts"]
}
-10
View File
@@ -1,10 +0,0 @@
# Ignore all files/folders by default
# See https://stackoverflow.com/a/29932318
/*
# Except these files/folders
!lib
!LICENSE
!package.json
!package-lock.json
!README.md
!src
+1
View File
@@ -0,0 +1 @@
auto-install-peers=true
+23
View File
@@ -0,0 +1,23 @@
const path = require("path");
// const merge = require("deepmerge");
const additionalDeps = {
'@openstapps/eslint-config': require('./configuration/eslint-config/package.json'),
'@openstapps/prettier-config': require('./configuration/prettier-config/package.json'),
}
function readPackage(pkg, context) {
for (const dep in additionalDeps) {
if (dep in pkg.devDependencies) {
Object.assign(pkg.devDependencies, additionalDeps[dep].peerDependencies)
}
}
return pkg
}
module.exports = {
hooks: {
readPackage,
}
}
+1
View File
@@ -0,0 +1 @@
pnpm-lock.yaml
+66
View File
@@ -0,0 +1,66 @@
// @ts-check
/** @type {import('syncpack').RcFile} */
const config = {
semverGroups: [
{
range: '',
dependencies: ['**'],
packages: ['**'],
}
],
source: ['package.json', '**/package.json'],
indent: ' ',
sortFirst: [
'name',
'description',
'version',
'private',
'type',
'license',
'repository',
'author',
'contributors',
'keywords',
'main',
'types',
'bin',
'files',
'engines',
'packageManager',
'scripts',
'dependencies',
'devDependencies',
'peerDependencies',
'pnpm',
'tsup',
'prettier',
'eslintConfig',
'eslintIgnore',
'nyc',
],
versionGroups: [
{
label: 'Package version is controlled by changesets',
dependencies: ['**'],
dependencyTypes: ['workspace'],
packages: ['**'],
isIgnored: true,
},
{
label: 'ES Mapping Generator Special Dependencies',
dependencies: ['typescript', 'typedoc', 'ts-node', '@types/node', 'got'],
packages: ['@openstapps/es-mapping-generator'],
isIgnored: true,
},
{
label: 'Packages should use workspace version',
dependencies: ['@openstapps/**'],
dependencyTypes: ['prod', 'dev', 'peer'],
packages: ['**'],
pinVersion: 'workspace:*',
},
],
};
module.exports = config;
+3
View File
@@ -0,0 +1,3 @@
nodejs 22.16.0
pnpm 10.12.3
python 3.11.5
+23
View File
@@ -0,0 +1,23 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome",
"request": "launch",
"type": "chrome",
"url": "http://localhost:8100",
"webRoot": "${workspaceFolder}/frontend/app/www"
},
{
"type":"node",
"request": "launch",
"name": "Run mocha for nodejs workspace",
"runtimeExecutable": "${fileDirname}/../node_modules/.bin/c8",
"cwd": "${fileDirname}/../",
"runtimeArgs": ["--config", "${workspaceFolder}/.c8rc.json", "${fileDirname}/../node_modules/.bin/mocha", "--exit", "--reporter", "spec"]
},
]
}
-55
View File
@@ -1,55 +0,0 @@
# [1.2.0](https://gitlab.com/openstapps/proxy/compare/v1.1.0...v1.2.0) (2022-06-08)
### Features
* added prometheus metrics support ([5522ac5](https://gitlab.com/openstapps/proxy/commit/5522ac55ac00d4b809d942d0a8c58d15b0432fb8))
* reload nginx on proxyconfig change ([1fcf734](https://gitlab.com/openstapps/proxy/commit/1fcf7340d49bde993b3acc7bdc90e6a637a05321))
* support docker swarm deployments ([4bb46d8](https://gitlab.com/openstapps/proxy/commit/4bb46d8a06ff7829b6908bd03c1cf4240767fcc2))
# [1.1.0](https://gitlab.com/openstapps/proxy/compare/v1.0.1...v1.1.0) (2022-03-10)
## [1.0.1](https://gitlab.com/openstapps/proxy/compare/v1.0.0...v1.0.1) (2022-03-10)
### Bug Fixes
* nginx deleting its own conifg ([edbd739](https://gitlab.com/openstapps/proxy/commit/edbd739db995b72fd3f5b5bec7558442a329f719))
# [1.0.0](https://gitlab.com/openstapps/proxy/compare/v0.4.0...v1.0.0) (2022-03-09)
### Features
* add rate limit allow list ([f10cd6c](https://gitlab.com/openstapps/proxy/commit/f10cd6c4314ee8b5f4bddc54b61231335116376d))
# [0.4.0](https://gitlab.com/openstapps/proxy/compare/fbe1a65cd1cfed81c26af14690c620c4cb4fbdc0...v0.4.0) (2021-09-06)
### Bug Fixes
* deny PUT method requests ([61ad5ab](https://gitlab.com/openstapps/proxy/commit/61ad5abc2bc45b7cb405b59d6bc095ff1e12a5cf))
* fix ci job dependencies and caching ([f59cc58](https://gitlab.com/openstapps/proxy/commit/f59cc5832c0b1cfc4b43889e1cedc360e42850e8))
* handle patch & duplicate versions correctly ([8dffe29](https://gitlab.com/openstapps/proxy/commit/8dffe29146f00b8da98b505b41ab374daf093af2))
* increase nginx transport security ([8fe6a27](https://gitlab.com/openstapps/proxy/commit/8fe6a2795f0c6f9107662ef9e5a43c6a3c8c066c))
* remove reasons of linting errors ([b624ed3](https://gitlab.com/openstapps/proxy/commit/b624ed342657f6a574059734f0399ba8539d6c82))
* remove superfluous visible routes ([96741f3](https://gitlab.com/openstapps/proxy/commit/96741f3789d4a0785124a95475a2ad05b41c9dad)), closes [#10](https://gitlab.com/openstapps/proxy/issues/10)
### Features
* accept PUT method ([59db3b5](https://gitlab.com/openstapps/proxy/commit/59db3b5c50be42ef2d2a4acbad8da2e7d813efd6))
* add issues templates ([9637574](https://gitlab.com/openstapps/proxy/commit/96375740719191850238dca975a153a37fe7d4e6)), closes [#4](https://gitlab.com/openstapps/proxy/issues/4)
* add proxy ([fbe1a65](https://gitlab.com/openstapps/proxy/commit/fbe1a65cd1cfed81c26af14690c620c4cb4fbdc0))
* add systemd service examples ([c54aa25](https://gitlab.com/openstapps/proxy/commit/c54aa25f3460e0d08ac4f66621e639a2b46ccc6d))
+100
View File
@@ -0,0 +1,100 @@
# Contributing to `@openstapps/core`
Please see the appropriate general group contributing guides in [project-management](https://gitlab.com/openstapps/projectmanagement/tree/master/project-docs/workflow).
## Updating and releasing related projects
Following semantic versioning patches to the core should not break existing usage.
### API
Every minor and major version of the core needs a corresponding version of the [API](https://openstapps.gitlab.io/api) to be used in the app and connectors.
Because the API is an integral part of the App and Node.js-based connectors this should be done for every new minor and major release of the core.
### Backend
The [backend](https://openstapps.gitlab.io/backend) uses the core to validate requests and responses. With the use of the [core tools](https://openstapps.gitlab.io/core-tools) it uses the core to set up the database according to the model.
Like for the API there should be a new release of the backend for every minor and major release of the core.
### Core tools
The [core tools](https://openstapps.gitlab.io/core-tools) are more or less not dependent on a specific core version and should normally not need adjustments for new core versions as long the structure of the code in the core stays the same.
### App and connectors
[App](https://openstapps.gitlab.io/app) and connectors use the API to communicate with the backend. To ensure compatibility the version of the used core must be the same as the one that is used in the used API.
App and connectors should be updated regularly to new releases of the core but not as important like API and backend. Since the app is just a view for the data stored in the backend it is not necessary to be up to date with the newest core immediately and the connectors are developed independently by every school and up to their responsibility.
## Adding new Types
Adding new types requires changes at multiple locations for it to work correctly
### Required changes
- Add your SCThing and SCThingWithoutReferences to `src/things/your-thing-name.ts` and make them extend `SCThingWithoutReferences` and `SCThing` respectively
- Add your SCThingMeta to `src/things/your-thing-name.ts` and make it extend `SCThingMeta`
- Add your SCThingMeta to `SCClasses` in `src/meta.ts`
- Add your SCThing to `SCIndexableThings ` in `src/meta.ts`
- Add your SCThingWithoutReferences to `SCAssociatedThingWithoutReferences` in `src/meta.ts`
- Add your SCThing to `SCAssociatedThing` in `src/meta.ts`
- Add your SCThing to the `SCThingType` enum in `src/things/abstract/thing.ts`
- Add an example file for your SCThing in `test/resources/YourThingName.json`
- Add the following lines for your SCThing in `test/type.spec.ts`:
- Make sure your SCThing (but not SCThingWithoutReferences!) includes the `@indexable` and `@validatable` JSDoc annotations, otherwise neither JSON Schemas nor Elasticsearch mappings will be generated
```typescript
/**
* Types of properties of SCYourThingName
*/
type SCYourThingNamePropertyTypes = PropertyTypesNested<SCYourThingName>;
assert<NotHas<SCYourThingNamePropertyTypes, SCThingWithoutReferences>>(false);
assert<Has<SCYourThingNamePropertyTypes, SCThingWithoutReferences>>(true);
assert<NotHas<SCYourThingNamePropertyTypes, SCThing>>(true);
assert<Has<SCYourThingNamePropertyTypes, SCThing>>(false);
assert<Extends<SCYourThingNameWithoutReferences, SCThing>>(false);
assert<Extends<SCYourThingName, SCThing>>(true);
```
## Additional coding style
### Extract inline type definitions
For consistency and correct functionality of `core-tools` we need well-defined type assignments.
Type assignments shall always be primitive types, classes, interfaces, enums or unions. Not allowed are inline type-definitions. Those shall be refactored accordingly:
```typescript
export interface SCPlaceWithoutReferences extends SCThing {
...
// Use this:
geo: SCGeoInformation;
// Instead of:
geo: {
point: Point,
polygon?: Polygon,
};
}
```
### Reuse the map structure
If you come around a map-like-type use `SCMap<T>`.
```typescript
// Use this:
interface AnyClass {
inventory: SCMap<number>;
}
// Instead of:
interface AnyClass {
inventory?: Array<{key: string; value: number}>;
}
// or instead of
interface AnyClass {
inventory?: {[key: string]: number};
}
```
-29
View File
@@ -169,32 +169,3 @@ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY C
If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <https://www.gnu.org/ licenses/why-not-lgpl.html>.
+78 -65
View File
@@ -1,88 +1,101 @@
# proxy
# Open StApps Monorepo
This proxy is based on NGINX. The NGINX configuration is generated by a simple Node.js script which parses
the docker socket. NGINX acts as a reverse proxy server. The Node.js script reads the docker socket file to generate
a configuration for each running docker container. The base template for configuration is `nginx.conf.template`
All `*.template` files are written with [mustache-js](https://github.com/janl/mustache.js "GitHub") syntax.
The templates are assembled by the Node.js program.
Refer to the [contribution guide](./CONTRIBUTING.md)
**Important:**
## Projects
The proxy expects your backend containers to provide following structure:
### Apps
* Service name for the backend container has to be `backend` in docker-compose.yml. If you don't use docker-compose
set `com.docker.compose.service`-label to `backend`.
* Set the `stapps.version`-label of the container/service to coresponing the backend version
* The proxy container has to be executed with `--net=host`
* Port 80 or 443 being free for exclusive use by the proxy container
* Always publish the backend container ports to the host machines internal loopback interface or an interace you control. This is the only way communication with the internet is restricted to going through the proxy. E.g this can be achieved by the `ports` syntax `127.0.0.1:3000-4000:3000` in the docker-compose file (here with a random port to avoid collisions).
| Name | Version | License | Readme |
| -------- | --------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------- |
| Core | [![npm](https://img.shields.io/npm/v/@openstapps/app.svg?style=flat-square)](https://npmjs.com/package/@openstapps/app) | [![license)](https://img.shields.io/npm/l/@openstapps/app.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`frontend/app`](./frontend/app/README.md) |
| Backend | [![npm](https://img.shields.io/npm/v/@openstapps/backend.svg?style=flat-square)](https://npmjs.com/package/@openstapps/backend) | [![license)](https://img.shields.io/npm/l/@openstapps/backend.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`backend/backend`](./backend/backend/README.md) |
| Proxy | [![npm](https://img.shields.io/npm/v/@openstapps/proxy.svg?style=flat-square)](https://npmjs.com/package/@openstapps/proxy) | [![license)](https://img.shields.io/npm/l/@openstapps/proxy.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`backend/proxy`](./backend/proxy/README.md) |
| Database | [![npm](https://img.shields.io/npm/v/@openstapps/database.svg?style=flat-square)](https://npmjs.com/package/@openstapps/database) | [![license)](https://img.shields.io/npm/l/@openstapps/database.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`backend/database`](./backend/database/README.md) |
## SSL/TLS
### Libraries
For a working https configuration you need to have a valid certificate ***including the intemediate certificas without the root*** (*.crt file ) and its private key (*.key file) in two ***seperate*** files. In addition to your certificate you need to provide the certificate chain ***including*** the root certificate. [Read up on](https://medium.com/@superseb/get-your-certificate-chain-right-4b117a9c0fce) how to [create this chain](https://blog.pki.dfn.de/2015/06/ocsp-stapling-in-nginx/) (*.crt file) or ask your admins to provide you one. The final and easiest requirement of the ssl setup is to create custom Diffie-Hellman parameters in a file:
| Name | Version | License | Readme |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- |
| Core | [![npm](https://img.shields.io/npm/v/@openstapps/core.svg?style=flat-square)](https://npmjs.com/package/@openstapps/core) | [![license)](https://img.shields.io/npm/l/@openstapps/core.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/core`](./packages/core/README.md) |
| API | [![npm](https://img.shields.io/npm/v/@openstapps/api.svg?style=flat-square)](https://npmjs.com/package/@openstapps/api) | [![license)](https://img.shields.io/npm/l/@openstapps/api.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/api`](./packages/api/README.md) |
| API Plugin | [![npm](https://img.shields.io/npm/v/@openstapps/api-plugin.svg?style=flat-square)](https://npmjs.com/package/@openstapps/api-plugin) | [![license)](https://img.shields.io/npm/l/@openstapps/api-plugin.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/api-plugin`](./packages/api-plugin/README.md) |
| Logger | [![npm](https://img.shields.io/npm/v/@openstapps/logger.svg?style=flat-square)](https://npmjs.com/package/@openstapps/logger) | [![license)](https://img.shields.io/npm/l/@openstapps/logger.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/logger`](./packages/logger/README.md) |
| Core Tools | [![npm](https://img.shields.io/npm/v/@openstapps/core-tools.svg?style=flat-square)](https://npmjs.com/package/@openstapps/core-tools) | [![license)](https://img.shields.io/npm/l/@openstapps/core-tools.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-3.0.en.html) | [`packages/core-tools`](./packages/core-tools/README.md) |
```sh
openssl dhparam -out dhparams.pem 4096
## Publishing
After having added all changes using `pnpm changeset`
```shell
pnpm publish-packages
```
## Configuration file
Internally, this will run
To Provide your own configuration file you can create a `default.json` file in the `config` directory. The JSON structure has to follow `config/default.ts`. Adding this file via docker mount is also possible (eg. `-v <path JSON file>:/app/config/default.json`)
## Status Codes
* OutdatedVersions return a `HTTP 404`
* ActiveVersions return a `HTTP 503` if currently unavailable or the given code by running backend-node
* Unsupported versions (not configured as outdated or active) return a `HTTP 404`
* No version header given returns a `HTTP 300`
**NOTE:** The default configuration expects the client to set a version header: `X-StApps-Version=<version of app>`
## Logger
The proxy uses [@openstapps/logger](https://gitlab.com/openstapps/logger). You can provide `NODE_ENV=production`
and SMTP-Configuration via environment-variables for monitoring in production use.
## Usage
The Node.js script reads out the `/var/run/docker.sock` to get the containers of the host system via
[dockerode](https://github.com/apocas/dockerode "GitHub").
Without ssl:
```sh
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock --net="host" registry.gitlab.com/openstapps/proxy/master
```shell
pnpm changeset version # bump versions
pnpm syncpack:fix
pnpm format:fix # changes to the package.json can cause issues
pnpm install # update lockfile and rebuild packages
git add .
git commit -m "refactor: update changelog"
pnpm changeset tags
git push --follow-tags
# from here the pipeline will do the publishing
```
With ssl:
## Remote caching
```sh
docker run --rm --net="host" \
-v /var/run/docker.sock:/var/run/docker.sock \
-v <path to *.crt-file>:/etc/nginx/certs/ssl.crt \
-v <path to *.key-file>:/etc/nginx/certs/ssl.key \
-v <path to certificate chain (*.crt) file>:/etc/nginx/certs/chain.crt \
-v <path to dhparam.pem file>:/etc/nginx/certs/dhparam.pem \
-v <path RECIPIENTS file>:/app/config/RECIPIENTS \
registry.gitlab.com/openstapps/proxy/master
Turbo supports remote caching, which massively speeds up build processes.
### Connecting to the remote cache locally
`.env.local`
```dotenv
TURBO_API=http://example:3000
TURBO_TEAM=openstapps
TURBO_TOKEN=abc123
```
## Static Folder (docker run option: `-v <path to static folder>:/static`)
### Connecting to the remote cache in GitLab Pipelines
Der Zugriff erfolgt über: `http(s)://<url>/_static/<path-to-file>`
You will need to define
Beispiel Proxy auf Localhost für die Datei `static/test.json`: `http://localhost/_static/test.json`
- `TURBO_API`
- `TURBO_TEAM`
- `TURBO_TOKEN`
Like you did locally as described in [this](https://turbo.build/repo/docs/ci/gitlabci#remote-caching)
guide.
## Bilder im Static Folder
### Hosting a cache
Bilder sollten folgendermaßen abgelegt und benannt werden:
Self-hosting via Docker is extremely simple, just follow
[this](http://v2202207178592194230.supersrv.de:6341) guide
or in short:
`<pfad analog zur imageURL aus der App>/<type>/<uid>-<size>.[jpg|png|gif]`
`.env`
Beispiel:
`_static/images/Place/hautpmensa-thumbnail.jpg`
```dotenv
PORT=...
TURBO_TOKEN=...
```
Aufgerufen wird das mit:
'https://server.deiner.uni.de/_static/images/Place/hauptmensa-thumbnail'
```shell
docker run --env-file=.env -p 3000:3000 fox1t/turborepo-remote-cache
```
Bildgrößen sind: thumbnail, small, medium, large
## Useful commands
#### Why is this package bloating the app?
```shell
pnpm why --prod -r --filter @openstapps/app PACKAGE
```
#### Licenses
```shell
pnpm licenses --prod --filter PROJECT
```
+22
View File
@@ -0,0 +1,22 @@
integration:
image: registry.gitlab.com/openstapps/openstapps/node-builder
stage: test
needs: ['build']
variables:
DOCKER_DRIVER: overlay2
WAIT_FOR_SERVICES_TIMEOUT: 1
services:
- name: registry.gitlab.com/openstapps/openstapps/database:latest
alias: elasticsearch
script:
- pnpm install
- pnpm test:integration:backend --force --no-cache
artifacts:
when: on_failure
paths:
- backend/backend/coverage/integration-report-junit.xml
reports:
junit:
- backend/backend/coverage/integration-report-junit.xml
rules:
- !reference [.limit_pipelines, rules]
+550
View File
@@ -0,0 +1,550 @@
# @openstapps/backend
## 4.0.7
### Patch Changes
- ae1cad3b: upgrade project to Typescript 5.9
- 93c38b74: dependency updates
- Updated dependencies [ae1cad3b]
- Updated dependencies [93c38b74]
- @openstapps/core-tools@4.0.7
- @openstapps/core@4.0.7
- @openstapps/logger@4.0.7
## 4.0.6
### Patch Changes
- 019f8013: Enable ID cards and assessments using Shibboleth as identity provider
## 4.0.5
### Patch Changes
- Updated dependencies [86004881]
- Updated dependencies [09ad903a]
- @openstapps/core-tools@4.0.5
- @openstapps/core@4.0.5
## 4.0.3
### Patch Changes
- 3a274a3a: Upgrade to Capacitor 7 and Anuglar 18
- @openstapps/core@4.0.2
- @openstapps/core-tools@4.0.2
- @openstapps/logger@4.0.2
## 4.0.2
### Patch Changes
- 6b06de40: Updated nodemailer dependency
- Updated dependencies [6b06de40]
- @openstapps/logger@4.0.2
- @openstapps/core@4.0.2
- @openstapps/core-tools@4.0.2
## 4.0.1
### Patch Changes
- b40ba7ad: Updated Elasticsearch dependency
- @openstapps/core@4.0.0
## 4.0.0
### Major Changes
- c8e29020: Update to Node 22
### Patch Changes
- Updated dependencies [c8e29020]
- @openstapps/core@4.0.0
- @openstapps/core-tools@4.0.0
- @openstapps/logger@4.0.0
## 3.3.2
### Patch Changes
- @openstapps/core@3.3.2
- @openstapps/core-tools@3.3.2
## 3.3.1
### Patch Changes
- 67ab1fd6: fix for geo.point mapping
## 3.3.0
### Minor Changes
- 688bc5f2: v3.3.0 changes
### Patch Changes
- Updated dependencies [688bc5f2]
- @openstapps/core@3.3.0
- @openstapps/core-tools@3.3.0
- @openstapps/logger@3.0.0
## 3.2.0
### Minor Changes
- 912ae422: Add the ability to filter by existence of a field
### Patch Changes
- 689ac68b: pin alpine version to 3.18 and add healthchecks
- e8d72683: Backend unit tests break every year
- Updated dependencies [912ae422]
- @openstapps/core@4.0.0
- @openstapps/core-tools@3.0.0
- @openstapps/logger@3.0.0
## 3.1.2
### Patch Changes
- Fix backend rejecting plugins
- Fix backend sliently falling back to default configs
## 3.1.1
### Patch Changes
- Fix version history offered by backend
- Updated dependencies
- @openstapps/core@3.1.1
## 3.1.0
### Minor Changes
- 06b8ca10: Add job portal feature
### Patch Changes
- Updated dependencies [06b8ca10]
- @openstapps/core@3.1.0
## 3.0.1
### Patch Changes
- Fix missing dependency
## 3.0.0
### Major Changes
- 64caebaf: Migrate config system to cosmiconfig
Configs are now written using type-checked JavaScript
```js
// @ts-check
// This file is now type-safe just like TypeScript, but
// without the compilation step
/** @type {import('@openstapps/package').Type} */
const foo = {};
```
You can write config files in JavaScript, JSON, or other
cosmiconfig-supported formats.
The config files now are
- `backendrc.{js,json,...}`
- `elasticsearchrc.{js,json,...}`
- `prometheusrc.{js,json,...}`
You can also split them into multiple files,
as well as using the `markdown.js` helper in
`config/default/tools` to include markdown files
as text (see `config/f-u/about-pages`)
- 64caebaf: Move project to a turbo monorepo & pnpm
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
- Removed extraneous files from packages
- `.npmrc`
- `.npmignore`
- `.mailmap`
- `.gitignore`
- `CONTRIBUTING.md`
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
- `package-lock.json`
- `.editorconfig`
- `.eslintrc.json` (moved eslint config to `package.json`)
- `.eslintignore`
- `.gitlab-ci.yml` (Most workflows are workspace-level)
- `.gitlab/**` (issue templates etc. are now workspace-level)
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
- Replaced conventional changelog with changesets
- Apps with binaries now use a top level `app.js`
```js
#!/usr/bin/env node
import './lib/app.js';
```
- 64caebaf: Migrate to ESM
CommonJS is no longer supported in any capacity. To use the new
version, you will need to migrate your package to ESM.
We recommend using `tsup` and `Node 18`.
```json
{
"type": "module"
}
```
- 64caebaf: Migrate package to Node 18
- Consumers of this package will need to migrate to Node 18 or
higher.
- Packages have been migrated from promisified `readFile` or
`readFileSync` towards `fs/promises`
- Packages use native `flatMap` now
- 0a7e6af1: Migrate es mapping types from es-mapping-generator to .d.ts next to generated mappings
- 64caebaf: Migrate build system to `tsup`
All packages now use an `index.ts` file to expose contents.
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
### Minor Changes
- 64caebaf: Migrate integration tests from docker-compose solution to a shell script
`api-cli` no longer builds as a Docker container as a result.
- 64caebaf: Migrate tests to C8/Chai/Mocha
- `@testdeck` OOP testing has been removed.
- Tests have been unified
- CommonJS module mocking has been replaced through
refactoring of tests, as ES Modules cannot be mocked
(do yourself a favor and don't try to mock them)
- C8 now replaces NYC as a native coverage tool
- 64caebaf: Migrate away from `@krlwlfrt/async-pool`
```ts
import {mapAsyncLimit} from '@openstapps/collection-utils';
await mapAsyncLimit(
[1, 2, 3],
async it => {
await someNetworkRequest(it);
},
5,
);
```
### Patch Changes
- 64caebaf: Migrated changelogs to changeset format
```js
import fs from 'fs';
const path = 'packages/logger/CHANGELOG.md';
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
```
- 98546a97: Migrate away from @openstapps/configuration
- 23481d0d: Update to TypeScript 5.1.6
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [1f62b5c5]
- Updated dependencies [98546a97]
- Updated dependencies [23481d0d]
- Updated dependencies [0a7e6af1]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- @openstapps/core-tools@3.0.0
- @openstapps/logger@3.0.0
- @openstapps/core@3.0.0
## 3.0.0-next.4
### Patch Changes
- 23481d0d: Update to TypeScript 5.1.6
- Updated dependencies [23481d0d]
- @openstapps/core-tools@3.0.0-next.4
- @openstapps/logger@3.0.0-next.4
- @openstapps/core@3.0.0-next.4
## 3.0.0-next.0
### Major Changes
- 64caebaf: Migrate config system to cosmiconfig
Configs are now written using type-checked JavaScript
```js
// @ts-check
// This file is now type-safe just like TypeScript, but
// without the compilation step
/** @type {import('@openstapps/package').Type} */
const foo = {};
```
You can write config files in JavaScript, JSON, or other
cosmiconfig-supported formats.
The config files now are
- `backendrc.{js,json,...}`
- `elasticsearchrc.{js,json,...}`
- `prometheusrc.{js,json,...}`
You can also split them into multiple files,
as well as using the `markdown.js` helper in
`config/default/tools` to include markdown files
as text (see `config/f-u/about-pages`)
- 64caebaf: Move project to a turbo monorepo & pnpm
Internal dependencies are now defined using `"@openstapps/package": "workspace:*"`
- Removed extraneous files from packages
- `.npmrc`
- `.npmignore`
- `.mailmap`
- `.gitignore`
- `CONTRIBUTING.md`
- `LICENSE` (Project license file is added upon publishing, see [pnpm.io](https://pnpm.io/cli/publish))
- `package-lock.json`
- `.editorconfig`
- `.eslintrc.json` (moved eslint config to `package.json`)
- `.eslintignore`
- `.gitlab-ci.yml` (Most workflows are workspace-level)
- `.gitlab/**` (issue templates etc. are now workspace-level)
- `.dockerignore` (Docker files are determined by which files are deployed with `pnpm deploy`, as per `package.json/files`)
- TSConfig has been moved to its own package (You can now use `"extends": "@openstapps/tsconfig"`)
- Removed ESLint and Prettier peer dependency hell by injecting them through the `.pnpmfile.cjs`
- Added syncpack for keeping dependency versions in sync (and consistent key ordering in `package.json`)
- Replaced conventional changelog with changesets
- Apps with binaries now use a top level `app.js`
```js
#!/usr/bin/env node
import './lib/app.js';
```
- 64caebaf: Migrate to ESM
CommonJS is no longer supported in any capacity. To use the new
version, you will need to migrate your package to ESM.
We recommend using `tsup` and `Node 18`.
```json
{
"type": "module"
}
```
- 64caebaf: Migrate package to Node 18
- Consumers of this package will need to migrate to Node 18 or
higher.
- Packages have been migrated from promisified `readFile` or
`readFileSync` towards `fs/promises`
- Packages use native `flatMap` now
- 0a7e6af1: Migrate es mapping types from es-mapping-generator to .d.ts next to generated mappings
- 64caebaf: Migrate build system to `tsup`
All packages now use an `index.ts` file to expose contents.
You will need to migrate paths from `import foo from '@scope/package/lib/foo` to `import foo from '@scope/package'`
### Minor Changes
- 64caebaf: Migrate integration tests from docker-compose solution to a shell script
`api-cli` no longer builds as a Docker container as a result.
- 64caebaf: Migrate tests to C8/Chai/Mocha
- `@testdeck` OOP testing has been removed.
- Tests have been unified
- CommonJS module mocking has been replaced through
refactoring of tests, as ES Modules cannot be mocked
(do yourself a favor and don't try to mock them)
- C8 now replaces NYC as a native coverage tool
- 64caebaf: Migrate away from `@krlwlfrt/async-pool`
```ts
import {mapAsyncLimit} from '@openstapps/collection-utils';
await mapAsyncLimit(
[1, 2, 3],
async it => {
await someNetworkRequest(it);
},
5,
);
```
### Patch Changes
- 64caebaf: Migrated changelogs to changeset format
```js
import fs from 'fs';
const path = 'packages/logger/CHANGELOG.md';
fs.writeFileSync(path, fs.readFileSync(path, 'utf8').replace(/^#+\s+\[/gm, '## ['));
```
- 98546a97: Migrate away from @openstapps/configuration
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [0a7e6af1]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [64caebaf]
- Updated dependencies [98546a97]
- @openstapps/core-tools@3.0.0-next.0
- @openstapps/logger@3.0.0-next.0
- @openstapps/core@3.0.0-next.0
## [1.0.0](https://gitlab.com/openstapps/backend/compare/v0.6.0...v1.0.0) (2023-05-08)
### Bug Fixes
- openapi docs generation ([4ebe44a](https://gitlab.com/openstapps/backend/commit/4ebe44a5a7a1b7bfd0aa5b84d47d4056d3068ffe))
- rename deprecated Gitlab CI variables ([3471591](https://gitlab.com/openstapps/backend/commit/3471591a7d458df70447c8dac91f96f3c83e763c))
- semster boosting ([515a6ee](https://gitlab.com/openstapps/backend/commit/515a6eeea56305a37510d99b9f84a6b118b66f8a))
### Features
- update to of elasticsearch 8.4 ([c9b83b5](https://gitlab.com/openstapps/backend/commit/c9b83b5d71610f82bd1d99e837e29ad445758aea))
## [0.6.0](https://gitlab.com/openstapps/backend/compare/v0.5.0...v0.6.0) (2023-01-30)
## [0.5.0](https://gitlab.com/openstapps/backend/compare/v0.4.1...v0.5.0) (2022-12-06)
## [0.4.1](https://gitlab.com/openstapps/backend/compare/v0.4.0...v0.4.1) (2022-11-02)
## [0.4.0](https://gitlab.com/openstapps/backend/compare/v0.3.1...v0.4.0) (2022-10-21)
## [0.3.1](https://gitlab.com/openstapps/backend/compare/v0.3.0...v0.3.1) (2022-09-02)
## [0.3.0](https://gitlab.com/openstapps/backend/compare/v0.2.0...v0.3.0) (2022-08-24)
## [0.2.0](https://gitlab.com/openstapps/backend/compare/v0.1.0...v0.2.0) (2022-08-22)
### Bug Fixes
- update PAIA API URL ([a20200e](https://gitlab.com/openstapps/backend/commit/a20200e52a725ede42cb5e026a5a693b1ba3d149))
## [0.1.0](https://gitlab.com/openstapps/backend/compare/16bbb7e9e36b7adf27452e1b09f7970e98aa27df...v0.1.0) (2022-06-30)
### Bug Fixes
- Add default configuration file for prometheus monitoring ([7ed2921](https://gitlab.com/openstapps/backend/commit/7ed2921efbce7fa5134206763eea986c6ef9a919))
- add prefix to schema names ([90822f5](https://gitlab.com/openstapps/backend/commit/90822f5888ed34d594b02df3f5cd9ec8ce74251e))
- apply correct types and tslint rules ([0cbf9b2](https://gitlab.com/openstapps/backend/commit/0cbf9b26a972563ad9483d78cea9ba809381f7dd))
- automatically remove invalid characters for aliases generated from index names ([6f7e23d](https://gitlab.com/openstapps/backend/commit/6f7e23df20af54abf2459da8aaebe236b82a5f1c))
- Don't force Mapping generation with 'npm start' ([4cfb560](https://gitlab.com/openstapps/backend/commit/4cfb560954ca97e22091e13d515475218885b1de))
- enhance default search query generation ([24a9122](https://gitlab.com/openstapps/backend/commit/24a91229f28fb17cb4941aab688a08266437c1eb))
- error thrown on consecutive connector executions ([2259da3](https://gitlab.com/openstapps/backend/commit/2259da317a848660fc2b0a14e50e2ae5ae329889)), closes [#73](https://gitlab.com/openstapps/backend/issues/73)
- esacpe mappin template filename ([496e6c5](https://gitlab.com/openstapps/backend/commit/496e6c5bd0563bd2dc0c6eff45c9bd685d95b453))
- fix markdown formatting in config ([9c5581a](https://gitlab.com/openstapps/backend/commit/9c5581af2cc131b81c288eadc39827124963ce55))
- fix reading url path as parameters ([9b889c8](https://gitlab.com/openstapps/backend/commit/9b889c873624d43baed4769a788db39528b143d8))
- imports from src in config files lead to crash ([f6003d7](https://gitlab.com/openstapps/backend/commit/f6003d7f8709d4424acd261cc7804e4d2684a9f4))
- invalid monthly cron execution time ([7a9f3ea](https://gitlab.com/openstapps/backend/commit/7a9f3eaca4667870ed19b17fd26c3c6d8e1fadd5))
- make config compatible with core, update database version ([f11376e](https://gitlab.com/openstapps/backend/commit/f11376ecf8c4997f6d0a85b3f3fde9e8b02bd61b))
- make facets work again ([d917627](https://gitlab.com/openstapps/backend/commit/d917627d588783d8734bd1d0c30d3d2782d02761))
- make index route work correctly ([fa2c9d7](https://gitlab.com/openstapps/backend/commit/fa2c9d7a881d9e94da8512349056b69206e4e3d0))
- properly check if an object exists before update ([e165837](https://gitlab.com/openstapps/backend/commit/e165837a154243305dc300acaa29605732290f6a)), closes [#70](https://gitlab.com/openstapps/backend/issues/70)
- remove onlyOnTypes from mustMatch ([1d5f99b](https://gitlab.com/openstapps/backend/commit/1d5f99b1fa74c486dc4df29daf9c0aa453935821)), closes [#83](https://gitlab.com/openstapps/backend/issues/83)
- replace isProductiveEnvironment with isTestEnvironment ([8c48552](https://gitlab.com/openstapps/backend/commit/8c48552abf7b7983e966ebc22299b334cae46167))
- return syntax error when receiving bad json ([12b71ba](https://gitlab.com/openstapps/backend/commit/12b71ba1f1f3e45a84b001b395dcfa1578355276)), closes [#3](https://gitlab.com/openstapps/backend/issues/3)
- return validation error instead of internal server error ([24e27c1](https://gitlab.com/openstapps/backend/commit/24e27c1d9e002db3b8f4afb4a31ad994c0eaad42))
- route for news ([7e35fae](https://gitlab.com/openstapps/backend/commit/7e35fae34e02bf2e12cf0d0b960d48de97fd4200))
- set config file before accessing it ([e17db52](https://gitlab.com/openstapps/backend/commit/e17db521e2a3f4f15dc5e5b758bd1ada10c78161)), closes [#27](https://gitlab.com/openstapps/backend/issues/27)
- stapps core version in config ([32c8a21](https://gitlab.com/openstapps/backend/commit/32c8a2149ad18179610af02483b794b426b7b9dc)), closes [#74](https://gitlab.com/openstapps/backend/issues/74)
- take coordinates in right order ([bb3be5a](https://gitlab.com/openstapps/backend/commit/bb3be5a816f7e4eb85b69ec558572bed9c3b6b39)), closes [#116](https://gitlab.com/openstapps/backend/issues/116)
- use SCRequestBodyTooLargeError ([e70e50a](https://gitlab.com/openstapps/backend/commit/e70e50a1eab00cd180479c5e0299f974da92fe94)), closes [#20](https://gitlab.com/openstapps/backend/issues/20)
- use specific time from filter if defined ([80e6249](https://gitlab.com/openstapps/backend/commit/80e62496f0731af721193875d5a6cdbf10b34607))
- wait for config file validation ([30082f8](https://gitlab.com/openstapps/backend/commit/30082f87262fa7428172fcbb6710b66d4bfe6261))
- wrong way alias names are generated ([9488451](https://gitlab.com/openstapps/backend/commit/94884510802906cdbfdd3490fac5fc9401937da7)), closes [#79](https://gitlab.com/openstapps/backend/issues/79)
### Features
- add backend ([16bbb7e](https://gitlab.com/openstapps/backend/commit/16bbb7e9e36b7adf27452e1b09f7970e98aa27df))
- add boosting to context based search ([dd4be92](https://gitlab.com/openstapps/backend/commit/dd4be92f90c6e7047eea0d00a2442b75673329f6))
- add catalog menu entry and rearrange ([4e42772](https://gitlab.com/openstapps/backend/commit/4e42772ca3788d3ee7af78266ee223e05fe6a8f3))
- add default app settings and menus ([54301ae](https://gitlab.com/openstapps/backend/commit/54301ae8fb656db17e231197c3a64fc27f541024))
- add dummy about config ([d6f126f](https://gitlab.com/openstapps/backend/commit/d6f126f19776ee7902e65d9248501b4986657ed9))
- add favorites to personal menu ([de0617b](https://gitlab.com/openstapps/backend/commit/de0617b8dd51182326094543110b8ed294a6e940))
- add feedback to config as menu item ([7ba6472](https://gitlab.com/openstapps/backend/commit/7ba647271efd87c422ce302bd5baf5760671e1a1))
- add functionality to register plugins via http ([3d51ccf](https://gitlab.com/openstapps/backend/commit/3d51ccfac26b2c3ad1271c29c1e736aaf7fcd88f)), closes [#2](https://gitlab.com/openstapps/backend/issues/2) [#37](https://gitlab.com/openstapps/backend/issues/37)
- add hebis proxy url ([ca1d244](https://gitlab.com/openstapps/backend/commit/ca1d2444e03aacad37219d93d657968b7a933f78)), closes [#120](https://gitlab.com/openstapps/backend/issues/120)
- add openapi docs generation to api ([614a1b1](https://gitlab.com/openstapps/backend/commit/614a1b1e9b3c525d5524065851689f793a4b3b4b))
- Add prometheus middleware to express ([b42e911](https://gitlab.com/openstapps/backend/commit/b42e911a117c59b2d70c1587f9e9b20a846e92d0))
- add routes doc generation to npm documentation script ([4a64f26](https://gitlab.com/openstapps/backend/commit/4a64f26e43979cdd4390bad796e1b7dc3f8c7027))
- add schedule route ([785813c](https://gitlab.com/openstapps/backend/commit/785813c3fb92bbebd7b07246bbcec77a9a4520e3))
- Add start-debug npm run script ([23eb1e2](https://gitlab.com/openstapps/backend/commit/23eb1e2263d2dd9d55f9a6ac5fca2a8fad7f1e84))
- add support for generated elasticsearch mappings ([8eab6b8](https://gitlab.com/openstapps/backend/commit/8eab6b8531d91d4569fe13743624f5ce91a7dc1e)), closes [#38](https://gitlab.com/openstapps/backend/issues/38)
- add support for multiple values in value filter ([de60311](https://gitlab.com/openstapps/backend/commit/de60311bd072db01eaf50965f3fdc307bfedc4c2))
- add support for new availability filter ([47f3232](https://gitlab.com/openstapps/backend/commit/47f3232f155a13ea39abb2aaaecafd54fa7d98ce))
- add support for range filters ([dc16974](https://gitlab.com/openstapps/backend/commit/dc169746e7fa0f50a1f969653043e5a4d5fa0f01))
- add support for range filters ([dcf7906](https://gitlab.com/openstapps/backend/commit/dcf7906f79f07d9cfee704454eedddb452a1f255))
- adjust to changes of SCFacet in core v0.12.0 ([2f13010](https://gitlab.com/openstapps/backend/commit/2f13010480b87a4a06634084033b3b0822eb78ee)), closes [#30](https://gitlab.com/openstapps/backend/issues/30)
- allow for searching illegal elasticsearch characters ([b629d05](https://gitlab.com/openstapps/backend/commit/b629d058eb64c7a785648fab0a7073eeaa37e895))
- boost academic terms dynamically ([13938ec](https://gitlab.com/openstapps/backend/commit/13938ecf211060a3f50747ac7fed343b71a6aa4b))
- log registration and removal of plugins ([006bbeb](https://gitlab.com/openstapps/backend/commit/006bbebe60b7f5015d80ac825622cefbc25cd959)), closes [#71](https://gitlab.com/openstapps/backend/issues/71)
- make backend work with automatically generated aggregations ([ba2c6f6](https://gitlab.com/openstapps/backend/commit/ba2c6f655c263f0b1d1e55b739adde0004bbf408))
- move EXTERNAL_REQUEST_TIMEOUT to config file ([5d6d4b5](https://gitlab.com/openstapps/backend/commit/5d6d4b53f01550365a330daecbcb4e0f6bdb8aef))
- move up and enable cors ([6483221](https://gitlab.com/openstapps/backend/commit/6483221b62d84c5871ee4ec82158f8b9ef1ed54e))
- support geo shape filter ([dd8a6b3](https://gitlab.com/openstapps/backend/commit/dd8a6b3abcc90c50a16167054e2f3cdcee40c863))
- use config file for maxRequestBodySize ([d110d60](https://gitlab.com/openstapps/backend/commit/d110d60123a28563fe0c58ab903f61255a9644a2))
- use config for MultiSearchRoute ([8278279](https://gitlab.com/openstapps/backend/commit/827827905b71c71dfa9299a9deb92a8c9cfc0e20))
- use new Elasticsearch package ([1bad092](https://gitlab.com/openstapps/backend/commit/1bad092185d989078badc66f9c138d2e1baa27e4))
- utilize api-cli for e2e integration test ([ce06e73](https://gitlab.com/openstapps/backend/commit/ce06e735bea379c9ad955a627e3e1cead37c85fe))
+14
View File
@@ -0,0 +1,14 @@
FROM registry.gitlab.com/openstapps/openstapps/node-base
USER root
RUN apk add --update python3 py3-pip make g++ gcompat
USER node
ADD --chown=node:node . /app
ENV NODE_ENV=production
WORKDIR /app
EXPOSE 3000
HEALTHCHECK --interval=10s --timeout=10s --start-period=10s --retries=12 CMD curl -s --fail --request POST --data '{}' --header 'Content-Type: application/json' http://localhost:3000/ >/dev/null || exit 1
ENTRYPOINT ["node", "app.js"]
+619
View File
@@ -0,0 +1,619 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing under
this license.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your version
supports such interaction) an opportunity to receive the Corresponding
Source of your version by providing access to the Corresponding Source
from a network server at no charge, through some standard or customary
means of facilitating copying of software. This Corresponding Source
shall include the Corresponding Source for any work covered by version 3
of the GNU General Public License that is incorporated pursuant to the
following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU Affero General Public License from time to time. Such new versions
will be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
+114
View File
@@ -0,0 +1,114 @@
[![pipeline status](https://img.shields.io/gitlab/pipeline/openstapps/backend.svg?style=flat-square)](https://gitlab.com/openstapps/backend/commits/master)
# backend (a reference implementation of a StApps backend)
This project is a reference implementation for a StApps backend. It provides an HTTP API to index data into a database,
perform full text search, sorts and filters. It also delivers the configuration needed by the app. The API is specified
within the [@openstapps/core](https://gitlab.com/openstapps/core).
If you want to perform requests, index data or search within JavaScript or TypeScript you should consider using our client
[@openstapps/api](https://gitlab.com/openstapps/api).
Or generate your own client using the openapi/swagger definitions you can get form the [API documentation](https://openstapps.gitlab.io/backend).
# Usage
This backend is not a standalone software. It needs a database like Elasticsearch to work.
If you just want to use the backend you should consider using
[minimal-deployment](https://gitlab.com/openstapps/minimal-deployment). The minimal-deployment will provide
you with everything you need to run this backend.
# Local usage for development purposes
## Requirements
- Elasticsearch (8.4)
- [ICU analysis plugin](https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-icu.html)
- OR Docker
- Node.js (~14) / NPM
### Startup Behaviour
_This might be important if you work on the Core_
The backend is using Elasticsearch Mappings and Aggregations from its currently used `core` dependency.
## Start Database (Elasticsearch)
Elasticsearch needs some configuration and plugins to be able to work
with the backend. To save you some work we provide a
[docker image](https://gitlab.com/openstapps/database) which
only needs to be executed to work with the backend.
Run `docker run -d -p 9200:9200 registry.gitlab.com/openstapps/database:latest`
Elasticsearch should be running at port 9200 now. If you have problems with
getting elasticsearch to work, have a look in the
[README](https://gitlab.com/openstapps/database) of the image
first.
## Metrics collection
The backend contains an express middleware which can be optionally enabled by setting the environment variable
`PROMETHEUS_MIDDLEWARE` to `true`. The middleware collects metrics and provides a [Prometheus](https://prometheus.io/)
compatible endpoint from which the metrics may be scraped by Prometheus.
The middleware may be configured with JSON provided in `config/prometheus.json`, i.e.
```JSON
{
"metricsPath": "/metrics",
"collectDefaultMetrics": true,
"requestDurationBuckets": [0.1, 0.5, 1, 2, 5, 10, 20],
"requestLengthBuckets": [512, 1024, 5120, 10240, 51200, 102400],
"responseLengthBuckets": [512, 1024, 5120, 10240, 51200, 102400]
}
```
The available options are documented on [npmjs](https://www.npmjs.com/package/express-prometheus-middleware) or the [homepage](https://github.com/joao-fontenele/express-prometheus-middleware#readme) of the express-prometheus-middleware project. You may get a compatible grafana dashboard at [grafana.com](https://grafana.com/grafana/dashboards/14565).
## Start backend
Run `npm install` and `npm run build`, then start with `npm start`. The server should now be accepting connections at `http://localhost:3000`.
# Environment Variables
To select a database implementation you have to set the `NODE_CONFIG_ENV` variable. At the time only `NODE_CONFIG_ENV=elasticsearch` is supported.
Set `NODE_ENV=production` to run backend for production usages. In production the backend expects some kind of monitoring to be set via the
environment. At the time only SMTP is being implemented. The backend wouldn't start if you don't provide SMTP authentification. Alternatively
you can set `ALLOW_NO_TRANSPORT=true`. To set up an SMTP configuration have a look at
[@openstapps/logger](https://gitlab.com/openstapps/logger).
The list of environment variables includes:
- `NODE_ENV` when set to `production`, there will be a reduced amount of output from the logger
- `PORT` when this is not set, the backend will default to port 3000
- `ES_ADDR` the Elasticsearch address, if not set it will default the Elasticsearch address to `http://localhost:9200`
- `ALLOW_NO_TRANSPORT` if set to true, the backend will allow starting without an Email configured that receives critical errors.
- `ES_DEBUG` setting this to `true` will result in Elasticsearch logging to be **VERY** extensive, in almost all situation this should no be enabled.
- `PROMETHEUS_MIDDLEWARE` if set to `true` will enable metrics collection with [Express Prometheus Middleware](https://www.npmjs.com/package/express-prometheus-middleware)
## Config files
Each university can have it's specific config for the general backend and app and for all databases.
All config files can be found in `./config/`. There is a `default.ts` which is used by default. You can create an
university specific file with following naming scheme: `default-<university license plate>.ts`
A university specific file will only overwrite all properties of the `default.ts` that are set in the file itself.
To start the backend using your configuration you have to provide the `NODE_APP_INSTANCE` environment variable
with your university license plate.
To set a database you have to provide the `NODE_CONFIG_ENV` environment variable with the name of the database.
At the time only Elasticsearch is implemented.
To create your university specific config file for the elasticsearch you have to create a file with following naming
scheme: `elasticsearch-<university license plate>.ts`.
## Debugging
Set `ES_DEBUG=true` to enable verbose Elasticsearch tracing information.
This can be useful to debug some issues between backend and elasticsearch.
## [Contributing](https://gitlab.com/openstapps/projectmanagement/blob/master/CONTRIBUTING.md)
+145
View File
@@ -0,0 +1,145 @@
# Routes
## `POST /bookAvailability` [Book availability route](https://openstapps.gitlab.io/core/classes/_index.d_.scbookavailabilityroute.html)
**Route for book availability**
This checks if a book is available in a library.<br>
**Example**:
`POST https://example.com/bookAvailability`
```json
{
"isbn": "978-3-16-148410-0"
}
```
### Definition
| parameter | value |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCBookAvailabilityRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scbookavailabilityrequest) |
| response | [SCBookAvailabilityResponse](https://openstapps.gitlab.io/core/modules/_index.d_.html#scbookavailabilityresponse) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /bulk/:UID` [Bulk add route](https://openstapps.gitlab.io/core/classes/_index.d_.scbulkaddroute.html)
**Route for indexing SC things in a bulk**
### Definition
| parameter | value |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCBulkAddRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scbulkaddrequest) |
| response | [SCBulkAddResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkaddresponse.html) |
| success code | 201 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
| obligatory parameters | <table><tr><th>parameter</th><th>type</th></tr><tr><td>UID</td><td>[SCUuid](https://openstapps.gitlab.io/core/modules/_index.d_.html#scuuid)</td></tr></table> |
## `POST /bulk/:UID/done` [Bulk done route](https://openstapps.gitlab.io/core/classes/_index.d_.scbulkdoneroute.html)
**Route for closing bulks**
### Definition
| parameter | value |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCBulkDoneRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkdonerequest.html) |
| response | [SCBulkDoneResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkdoneresponse.html) |
| success code | 204 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
| obligatory parameters | <table><tr><th>parameter</th><th>type</th></tr><tr><td>UID</td><td>[SCUuid](https://openstapps.gitlab.io/core/modules/_index.d_.html#scuuid)</td></tr></table> |
## `POST /bulk` [Bulk route](https://openstapps.gitlab.io/core/classes/_index.d_.scbulkroute.html)
**Route for bulk creation**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCBulkRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkrequest.html) |
| response | [SCBulkResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scbulkresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /feedback` [Feedback route](https://openstapps.gitlab.io/core/classes/_index.d_.scfeedbackroute.html)
**Route for feedback submission**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCFeedbackRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scfeedbackrequest.html) |
| response | [SCFeedbackResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scfeedbackresponse.html) |
| success code | 204 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /` [Index route](https://openstapps.gitlab.io/core/classes/_index.d_.scindexroute.html)
**Route to request meta information about the deployment**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCIndexRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scindexrequest.html) |
| response | [SCIndexResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scindexresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /search/multi` [Multi search route](https://openstapps.gitlab.io/core/classes/_index.d_.scmultisearchroute.html)
**Route for submission of multiple search requests at once**
### Definition
| parameter | value |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCMultiSearchRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scmultisearchrequest) |
| response | [SCMultiSearchResponse](https://openstapps.gitlab.io/core/modules/_index.d_.html#scmultisearchresponse) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCTooManyRequestsErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.sctoomanyrequestserrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `POST /plugin/register` [Plugin register route](https://openstapps.gitlab.io/core/classes/_index.d_.scpluginregisterroute.html)
**Route to register plugins**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCPluginRegisterRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scpluginregisterrequest) |
| response | [SCPluginRegisterResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scpluginregisterresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCParametersNotAcceptable](https://openstapps.gitlab.io/core/classes/_index.d_.scparametersnotacceptable.html)<br>[SCPluginAlreadyRegisteredErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scpluginalreadyregisterederrorresponse.html)<br>[SCPluginRegisteringFailedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scpluginregisteringfailederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html) |
## `POST /search` [Search route](https://openstapps.gitlab.io/core/classes/_index.d_.scsearchroute.html)
**Route for searching things**
### Definition
| parameter | value |
| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCSearchRequest](https://openstapps.gitlab.io/core/interfaces/_index.d_.scsearchrequest.html) |
| response | [SCSearchResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scsearchresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
## `PUT /:TYPE/:UID` [Thing update route](https://openstapps.gitlab.io/core/classes/_index.d_.scthingupdateroute.html)
**Route for updating existing things**
### Definition
| parameter | value |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| request | [SCThingUpdateRequest](https://openstapps.gitlab.io/core/modules/_index.d_.html#scthingupdaterequest) |
| response | [SCThingUpdateResponse](https://openstapps.gitlab.io/core/interfaces/_index.d_.scthingupdateresponse.html) |
| success code | 200 |
| errors | [SCInternalServerErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scinternalservererrorresponse.html)<br>[SCMethodNotAllowedErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scmethodnotallowederrorresponse.html)<br>[SCNotFoundErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scnotfounderrorresponse.html)<br>[SCRequestBodyTooLargeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.screquestbodytoolargeerrorresponse.html)<br>[SCSyntaxErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scsyntaxerrorresponse.html)<br>[SCUnsupportedMediaTypeErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scunsupportedmediatypeerrorresponse.html)<br>[SCValidationErrorResponse](https://openstapps.gitlab.io/core/classes/_index.d_.scvalidationerrorresponse.html) |
| obligatory parameters | <table><tr><th>parameter</th><th>type</th></tr><tr><td>TYPE</td><td>SCThingTypes</td></tr><tr><td>UID</td><td>[SCUuid](https://openstapps.gitlab.io/core/modules/_index.d_.html#scuuid)</td></tr></table> |
+2
View File
@@ -0,0 +1,2 @@
#!/usr/bin/env node
import './lib/cli.js';
@@ -0,0 +1,18 @@
/**
* This is the database configuration for the technical university of berlin
*
* @type {import('@openstapps/logger').RecursivePartial<import('../../src/storage/elasticsearch/types/elasticsearch-config.js').ElasticsearchConfigFile>}
*/
const config = {
internal: {
database: {
name: 'elasticsearch',
query: {
minMatch: '60%',
queryType: 'query_string',
},
},
},
};
export default config;
@@ -0,0 +1,28 @@
import userGroupSetting from './user-group-setting.js';
import languageSetting from './language-setting.js';
import menus from './menu.js';
/** @type {import('@openstapps/core').SCAppConfiguration} */
const app = {
aboutPages: {},
campusPolygon: {
coordinates: [
[
[8.660_432_999_690_723, 50.123_027_017_044_436],
[8.675_496_285_518_358, 50.123_027_017_044_436],
[8.675_496_285_518_358, 50.130_661_764_486_42],
[8.660_432_999_690_723, 50.130_661_764_486_42],
[8.660_432_999_690_723, 50.123_027_017_044_436],
],
],
type: 'Polygon',
},
features: {},
menus,
name: 'Goethe-Uni',
privacyPolicyUrl: 'https://mobile.server.uni-frankfurt.de/_static/privacy.md',
settings: [userGroupSetting, languageSetting],
versionHistory: [],
};
export default app;
@@ -0,0 +1,33 @@
import {SCSettingInputType, SCThingOriginType, SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCLanguageSetting} */
const languageSetting = {
categories: ['profile'],
defaultValue: 'en',
description: 'The language this app is going to use.',
inputType: SCSettingInputType.SingleChoice,
name: 'language',
order: 0,
origin: {
indexed: '2018-09-11T12:30:00Z',
name: 'SCConfigFile Default Values',
type: SCThingOriginType.Remote,
},
translations: {
de: {
description: 'Die Sprache in der die App angezeigt wird.',
name: 'Sprache',
values: ['Deutsch', 'English'],
},
en: {
description: 'The language this app is going to use.',
name: 'Language',
values: ['Deutsch', 'English'],
},
},
type: SCThingType.Setting,
uid: 'dc9d6dec-6576-45ef-9e35-3598c0d6a662',
values: ['de', 'en'],
};
export default languageSetting;
+180
View File
@@ -0,0 +1,180 @@
/** @type {import('@openstapps/core').SCAppConfigurationMenuCategory[]} */
const menus = [
{
icon: 'home',
items: [
{
icon: 'newspaper',
route: '/news',
title: 'news',
translations: {
de: {
title: 'Aktuelles',
},
en: {
title: 'news',
},
},
},
{
icon: 'search',
route: '/search',
title: 'search',
translations: {
de: {
title: 'Suche',
},
en: {
title: 'search',
},
},
},
{
icon: 'inventory_2',
route: '/catalog',
title: 'course catalog',
translations: {
de: {
title: 'Vorlesungsverzeichnis',
},
en: {
title: 'course catalog',
},
},
},
{
icon: 'work',
route: '/jobs',
title: 'job postings',
translations: {
de: {
title: 'Jobangebote',
},
en: {
title: 'job postings',
},
},
},
],
title: 'overview',
route: '/overview',
translations: {
de: {
title: 'Übersicht',
},
en: {
title: 'overview',
},
},
},
{
icon: 'local_cafe',
items: [],
route: '/canteen',
title: 'canteen',
translations: {
de: {
title: 'Mensa',
},
en: {
title: 'canteen',
},
},
},
{
icon: 'map',
items: [],
route: '/map',
title: 'campus map',
translations: {
de: {
title: 'Campus Karte',
},
en: {
title: 'campus map',
},
},
},
{
icon: 'school',
items: [
{
icon: 'star',
route: '/favorites',
title: 'favorites',
translations: {
de: {
title: 'Favoriten',
},
en: {
title: 'favorites',
},
},
},
{
icon: 'calendar_today',
route: '/schedule',
title: 'schedule',
translations: {
de: {
title: 'Stundenplan',
},
en: {
title: 'schedule',
},
},
},
{
icon: 'settings',
route: '/settings',
title: 'settings',
translations: {
de: {
title: 'Einstellungen',
},
en: {
title: 'settings',
},
},
},
{
icon: 'rate_review',
route: '/feedback',
title: 'feedback',
translations: {
de: {
title: 'Feedback',
},
en: {
title: 'feedback',
},
},
},
{
icon: 'info',
route: '/about',
title: 'about',
translations: {
de: {
title: 'Über die App',
},
en: {
title: 'About the App',
},
},
},
],
title: 'my app',
route: '/profile',
translations: {
de: {
title: 'Meine App',
},
en: {
title: 'my app',
},
},
},
];
export default menus;
@@ -0,0 +1,39 @@
import {SCSettingInputType, SCThingOriginType, SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCUserGroupSetting} */
const userGroupSetting = {
categories: ['profile'],
defaultValue: 'students',
description:
'The user group the app is going to use primarily.' +
' This settings for example is getting used for the predefined price category of mensa meals.',
inputType: SCSettingInputType.SingleChoice,
name: 'group',
order: 1,
origin: {
indexed: '2018-09-11T12:30:00Z',
name: 'SCConfigFile Default Values',
type: SCThingOriginType.Remote,
},
translations: {
de: {
description:
'Mit welcher Benutzergruppe soll die App verwendet werden?' +
' Die Einstellung wird beispielsweise für die Vorauswahl der Preiskategorie der Mensa verwendet.',
name: 'Gruppe',
values: ['Studierende', 'Angestellte', 'Gäste'],
},
en: {
description:
'The user group the app is going to use primarily.' +
' This settings for example is getting used for the predefined price category of mensa meals.',
name: 'Group',
values: ['students', 'employees', 'guests'],
},
},
type: SCThingType.Setting,
uid: '2c97aa36-4aa2-43de-bc5d-a2b2cb3a530e',
values: ['students', 'employees', 'guests'],
};
export default userGroupSetting;
@@ -0,0 +1,50 @@
import {SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCBackendAggregationConfiguration[]} */
const aggregations = [
{
fieldName: 'categories',
onlyOnTypes: [
SCThingType.AcademicEvent,
SCThingType.Article,
SCThingType.Building,
SCThingType.Catalog,
SCThingType.Dish,
SCThingType.PointOfInterest,
SCThingType.Room,
],
},
{
fieldName: 'inPlace.name',
onlyOnTypes: [
SCThingType.DateSeries,
SCThingType.Dish,
SCThingType.Floor,
SCThingType.Organization,
SCThingType.PointOfInterest,
SCThingType.Room,
SCThingType.Ticket,
],
},
{
fieldName: 'academicTerms.acronym',
onlyOnTypes: [SCThingType.AcademicEvent, SCThingType.SportCourse],
},
{
fieldName: 'academicTerm.acronym',
onlyOnTypes: [SCThingType.Catalog],
},
{
fieldName: 'majors',
onlyOnTypes: [SCThingType.AcademicEvent],
},
{
fieldName: 'keywords',
onlyOnTypes: [SCThingType.Article, SCThingType.Book, SCThingType.Message, SCThingType.Video],
},
{
fieldName: 'type',
},
];
export default aggregations;
@@ -0,0 +1,102 @@
import {
month,
sommerRange,
ssAcronymLong,
ssAcronymShort,
winterRange,
wsAcronymLong,
wsAcronymShort,
} from '../tools/semester-acronym.js';
import {SCThingType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCBackendConfigurationSearchBoostingContext} */
const boostings = {
default: [
{
factor: 1,
fields: {
'academicTerms.acronym': {
[ssAcronymShort]: sommerRange.includes(month) ? 1.1 : 1.05,
[wsAcronymShort]: winterRange.includes(month) ? 1.1 : 1.05,
[ssAcronymLong]: sommerRange.includes(month) ? 1.1 : 1.05,
[wsAcronymLong]: winterRange.includes(month) ? 1.1 : 1.05,
},
},
type: SCThingType.AcademicEvent,
},
{
factor: 1,
fields: {
categories: {
'course': 1.08,
'integrated course': 1.08,
'introductory class': 1.05,
'lecture': 1.1,
'seminar': 1.01,
'tutorial': 1.05,
},
},
type: SCThingType.AcademicEvent,
},
{
factor: 1.6,
type: SCThingType.Building,
},
{
factor: 1,
fields: {
categories: {
cafe: 1.1,
learn: 1.1,
library: 1.2,
restaurant: 1.1,
},
},
type: SCThingType.PointOfInterest,
},
{
factor: 1,
fields: {
categories: {
'main dish': 2,
},
},
type: SCThingType.Dish,
},
],
dining: [
{
factor: 1,
fields: {
categories: {
'cafe': 2,
'canteen': 2,
'restaurant': 2,
'restroom': 1.2,
'student canteen': 2,
},
},
type: SCThingType.Building,
},
{
factor: 2,
type: SCThingType.Dish,
},
],
place: [
{
factor: 2,
type: SCThingType.Building,
},
{
factor: 2,
type: SCThingType.PointOfInterest,
},
{
factor: 2,
type: SCThingType.Room,
},
],
};
export default boostings;
@@ -0,0 +1,72 @@
import {SCThingType} from '@openstapps/core';
import aggregations from './aggregations.js';
import boostings from './boostings.js';
import {readFile} from 'fs/promises';
/** @type {import('@openstapps/core').SCBackendInternalConfiguration} */
export const internal = {
aggregations,
boostings,
};
/** @type {import('@openstapps/core').SCBackendConfiguration} */
export const backend = {
SCVersion: JSON.parse(await readFile('package.json', 'utf8')).version,
externalRequestTimeout: 5000,
hiddenTypes: [SCThingType.DateSeries, SCThingType.Diff, SCThingType.Floor],
mappingIgnoredTags: ['minlength', 'pattern', 'see', 'tjs-format'],
maxMultiSearchRouteQueries: 5,
maxRequestBodySize: 2e6,
name: 'Goethe-Universität Frankfurt am Main',
namespace: '909a8cbc-8520-456c-b474-ef1525f14209',
sortableFields: [
{
fieldName: 'name',
sortTypes: ['ducet'],
},
{
fieldName: 'type',
sortTypes: ['ducet'],
},
{
fieldName: 'categories',
onlyOnTypes: [
SCThingType.AcademicEvent,
SCThingType.Building,
SCThingType.Catalog,
SCThingType.Dish,
SCThingType.PointOfInterest,
SCThingType.Room,
],
sortTypes: ['ducet'],
},
{
fieldName: 'geo',
onlyOnTypes: [SCThingType.Building, SCThingType.PointOfInterest, SCThingType.Room],
sortTypes: ['distance'],
},
{
fieldName: 'geo',
onlyOnTypes: [SCThingType.Building, SCThingType.PointOfInterest, SCThingType.Room],
sortTypes: ['distance'],
},
{
fieldName: 'inPlace.geo',
onlyOnTypes: [
SCThingType.DateSeries,
SCThingType.Dish,
SCThingType.Floor,
SCThingType.Organization,
SCThingType.PointOfInterest,
SCThingType.Room,
SCThingType.Ticket,
],
sortTypes: ['distance'],
},
{
fieldName: 'offers',
onlyOnTypes: [SCThingType.Dish],
sortTypes: ['price'],
},
],
};
@@ -0,0 +1,25 @@
import app from './app/index.js';
import {backend, internal} from './backend/index.js';
/**
* This is the default configuration for app and backend
*
* University-specific files can be created with the following naming scheme: default-<university license plate>.ts
*
* To select your university-specific configuration which is merged from this default file and your university-specific
* file, you have to supply the `NODE_APP_INSTANCE` environment variable with your license plate
*
* To get more information about the meaning of specific fields, please have a look at `@openstapps/core` or use your
* IDE to read the TSDoc documentation.
*
* @type {import('@openstapps/core').SCConfigFile}
*/
const config = {
app,
auth: {},
backend,
internal,
uid: 'f-u',
};
export default config;
@@ -0,0 +1,31 @@
/**
* This is the default configuration for elasticsearch (a database)
*
* To select your university-specific configuration which is merged from this default file and your university-specific
* file, you have to supply the `NODE_APP_INSTANCE` environment variable with your license plate
*
* To select a different database, you have to supply the `NODE_CONFIG_ENV` environment variable with a database name
* that is implemented in the backend
*
* To get more information about the meaning of specific fields, please use your IDE to read the TSDoc documentation.
*
* @type {import('../../src/storage/elasticsearch/types/elasticsearch-config.js').ElasticsearchConfigFile}
*/
const config = {
internal: {
database: {
name: 'elasticsearch',
version: '8.4.2',
query: {
minMatch: '75%',
queryType: 'dis_max',
matchBoosting: 1.3,
fuzziness: 'AUTO',
cutoffFrequency: 0,
tieBreaker: 0,
},
},
},
};
export default config;
@@ -0,0 +1,9 @@
{
"metricsPath": "/metrics",
"includeMethod": true,
"includePath": true,
"promClient": {
"collectDefaultMetrics": {}
},
"for-more-options-see": "https://github.com/jochen-schweizer/express-prom-bundle#options"
}
@@ -0,0 +1,28 @@
import {readFile} from 'fs/promises';
import {SCAboutPageContentType} from '@openstapps/core';
/**
* Usage:
*
* ```js
* await markdown('./page.md', import.meta.url)
* ```
*
* @param {string} path relative path to the file, omitting the language marker
* @param {string | URL} base base path, usually import.meta.url
* @returns {Promise<import('@openstapps/core').SCAboutPageMarkdown>}
*/
export async function markdown(path, base) {
const de = await readFile(new URL(path.replace(/\.md$/, '.de.md'), base), 'utf8');
const en = await readFile(new URL(path.replace(/\.md$/, '.en.md'), base), 'utf8');
return {
value: de,
translations: {
en: {
value: en,
},
},
type: SCAboutPageContentType.MARKDOWN,
};
}
@@ -0,0 +1,33 @@
/**
* Generates a range of numbers that represent consecutive calendar months
*
* @param {number} startMonth The month to start with (inclusive)
* @param {number} endMonth The month to end with (inclusive)
* @returns {number[]}
*/
export function yearSlice(startMonth, endMonth) {
let months = [...Array.from({length: 13}).keys()].slice(1);
months = [...months, ...months];
if (!months.includes(startMonth) || !months.includes(endMonth)) {
throw new Error(`Given months not part of a year! Check ${startMonth} or ${endMonth}!`);
}
const startIndex = months.indexOf(startMonth);
const endIndex =
months.indexOf(endMonth) <= startIndex ? months.lastIndexOf(endMonth) : months.indexOf(endMonth);
return months.slice(startIndex, endIndex + 1);
}
export const sommerRange = yearSlice(3, 8);
export const winterRange = yearSlice(9, 2);
export const month = new Date().getMonth();
export const year = new Date().getFullYear();
export const winterYearOffset = month < winterRange[0] ? -1 : 0;
export const sommerYear = year + (month <= winterRange[winterRange.length] ? -1 : 0);
export const winterYear = `${year + winterYearOffset}/${(year + 1 + winterYearOffset).toString().slice(-2)}`;
export const wsAcronymShort = `WS ${winterYear}`;
export const ssAcronymShort = `SS ${sommerYear}`;
export const wsAcronymLong = `WiSe ${winterYear}`;
export const ssAcronymLong = `SoSe ${sommerYear}`;
@@ -0,0 +1,37 @@
import {readFile, readdir} from 'fs/promises';
import url from 'url';
import path from 'path';
/**
* @example version(1, import.meta.url)
* @param options {Omit<import('@openstapps/core').SCAppVersionInfo, 'releaseNotes' | 'translations'>}
* @param base {string}
* @returns {Promise<import('@openstapps/core').SCAppVersionInfo>}
*/
export async function version(options, base) {
const de = await readFile(new URL(`${options.version}.de.md`, base), 'utf8');
const en = await readFile(new URL(`${options.version}.en.md`, base), 'utf8');
return {
...options,
releaseNotes: de,
translations: {
en: {
releaseNotes: en,
},
},
};
}
/**
* @param base {string} Base path of the file as `import.meta.url`
* @returns {Promise<import('@openstapps/core').SCAppVersionInfo[]>}
*/
export async function versions(base) {
const directory = await readdir(path.dirname(url.fileURLToPath(base)));
const versions = [
...new Set(directory.filter(it => it.endsWith('.md')).map(it => it.replace(/\.\w+\.md$/, ''))),
].sort((a, b) => -a.localeCompare(b, undefined, {numeric: true}));
return Promise.all(versions.map(versionName => version({version: versionName}, base)));
}
@@ -0,0 +1,7 @@
Open StApps bietet Studierenden aller beteiligten Hochschulen eine qualitativ
hochwertige App für den Studienalltag. Open StApps-Verbundpartner integrieren
generalisierbare Studierendenprozesse so in App-Module, dass diese auch
von anderen Hochschulen verwendet werden können. Die in der Open StApps App
verwendeten Daten einer Datenquelle sind in einem generalisierten Datenmodell
so aufbereitet, dass ein Austausch oder Abschaltung der Datenquelle problemlos möglich
ist und die Open StApps App problemlos weiterhin funktionsfähig bleibt.
@@ -0,0 +1,6 @@
Open StApps provides students from all participating universities with a
high-quality app for everyday study. Open StApps partners integrate
generalizable student processes into app modules in such a way that they can be
used by other universities. The data of a data source used in the Open StApps app
is prepared in a generalized data model in a way that the data source can be easily
exchanged or switched off while the app continues to function without any problems.
@@ -0,0 +1,125 @@
import {SCAboutPageContentType} from '@openstapps/core';
import {markdown} from '../../default/tools/markdown.js';
/** @type {import('@openstapps/core').SCAboutPage} */
export const about = {
title: 'Über Open StApps',
content: [
{
title: 'Verbundprojekt mehrerer Hochschulen für eine generische Studierenden-App',
content: await markdown('./about.md', import.meta.url),
translations: {
en: {
title: 'Collaborative project of multiple universities for a single generic study app',
},
},
type: SCAboutPageContentType.SECTION,
},
{
title: 'Goethe-Uni Kontakt',
content: {
rows: [
[
{
value: 'Adresse',
translations: {
en: {
value: 'Address',
},
},
type: SCAboutPageContentType.MARKDOWN,
},
{
// language=Markdown
value:
'Goethe Universität<br>' +
'Hochschulrechenzentrum (HRZ)<br>' +
'Norbert-Wollheim-Platz 1<br>' +
'60629 Frankfurt',
translations: {},
type: SCAboutPageContentType.MARKDOWN,
},
],
[
{
value: 'Kontaktinformation',
translations: {
en: {
value: 'Contact information',
},
},
type: SCAboutPageContentType.MARKDOWN,
},
{
// language=Markdown
value:
'[app@rz.uni-frankfurt.de](mailto:app@rz.uni-frankfurt.de)<br>' +
'[+49 69 798 32936](tel:+496979832936)<br>' +
'[https://app.rz.uni-frankfurt.de](https://app.rz.uni-frankfurt.de)',
translations: {},
type: SCAboutPageContentType.MARKDOWN,
},
],
],
type: SCAboutPageContentType.TABLE,
},
translations: {
en: {
title: 'Goethe-Uni Contact',
},
},
type: SCAboutPageContentType.SECTION,
},
{
icon: 'newspaper',
title: 'Neue Funktionen / Gelöste Probleme',
link: 'changelog',
translations: {
en: {
title: 'New features / Resolved issues',
},
},
type: SCAboutPageContentType.ROUTER_LINK,
},
{
icon: 'description',
title: 'Impressum',
link: 'imprint',
translations: {
en: {
title: 'Imprint',
},
},
type: SCAboutPageContentType.ROUTER_LINK,
},
{
icon: 'policy',
title: 'Datenschutz',
link: 'privacy',
translations: {
en: {
title: 'Privacy policy',
},
},
type: SCAboutPageContentType.ROUTER_LINK,
},
{
icon: 'copyright',
title: 'Bibliotheken und Lizenzen',
link: 'licenses',
translations: {
en: {
title: 'Libraries and licenses',
},
},
type: SCAboutPageContentType.ROUTER_LINK,
},
],
translations: {
en: {
title: 'About Open StApps',
},
},
};
export default about;
@@ -0,0 +1,26 @@
import {SCAboutPageContentType} from '@openstapps/core';
/** @type {import('@openstapps/core').SCAboutPage} */
export const imprint = {
title: 'Impressum',
content: [
{
// language=Markdown
value: `[Impressum der Johann Wolfgang Goethe-Universität Frankfurt am Main](https://www.uni-frankfurt.de/impressum)`,
translations: {
en: {
// language=Markdown
value: `[Imprint of the Goethe University Frankfurt](https://www.uni-frankfurt.de/impressum)`,
},
},
type: SCAboutPageContentType.MARKDOWN,
},
],
translations: {
en: {
title: 'Imprint',
},
},
};
export default imprint;
@@ -0,0 +1,12 @@
import about from './about.js';
import imprint from './imprint.js';
import privacy from './privacy.js';
/** @type {import('@openstapps/core').SCMap<import('@openstapps/core').SCAboutPage>} */
const aboutPages = {
'about': about,
'about/imprint': imprint,
'about/privacy': privacy,
};
export default aboutPages;
@@ -0,0 +1,166 @@
# Datenschutzerklärung
## Kontaktdaten des Verantwortlichen
Verantwortlich im Sinne der Datenschutz-Grundverordnung und weiterer Vorschriften zum Datenschutz ist die:
Johann Wolfgang Goethe-Universität Frankfurt am Main vertreten durch ihren Präsidenten<br />
Theodor-W.-Adorno-Platz 1<br />
60323 Frankfurt am Main
Postanschrift:<br />
Goethe-Universität Frankfurt am Main<br />
60629 Frankfurt
Website: http://www.uni-frankfurt.de
## Kontaktdaten der Datenschutzbeauftragten an der Goethe-Universität
Sie erreichen die behördlichen Datenschutzbeauftragten der Johann Wolfgang Goethe-Universität Frankfurt am Main unter:<br />
Mail: <dsb@uni-frankfurt.de><br />
Website: http://www.uni-frankfurt.de/47859992/datenschutzbeauftragte
## Informationen zur Verarbeitung personenbezogener Daten
### <u>1. Umfang der Verarbeitung personenbezogener Daten</u>
Personenbezogene Daten sind gemäß Artikel 4 DSGVO alle Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen.
Wir verarbeiten personenbezogene Daten von Ihnen als Nutzer:innen der Goethe-Uni-App, soweit dies zur Bereitstellung einer **funktionsfähigen Applikation** technisch erforderlich ist.
Weiterhin kann eine Datenverarbeitung auf Ihrer freiwilligen Einwilligung basieren, wenn Sie **spezifische Funktionen** nutzen möchten.
Wir unterscheiden daher nachfolgend zwischen
- Zugriffsdaten bei der Nutzung der App: Inhalt der Anfragen, IP-Adressen, Datum/Uhrzeit der Anfrage, Angefragte URL, Fehlermeldungen, Browser-Kennung, HTTP-Header
- Standortbestimmung und Navigation: freiwillige Standortangaben
- Nutzer:inneneinstellungen: freiwillige Angabe von a) Sprachpräferenzen (derzeit: deutsch/englisch), b) Status (z. B. Gast/Student) oder c) spezifischen Suchanfragen und Suchergebnissen (Notifications)
- Kalenderfunktion: freiwillige Nutzung der Kalenderfunktion (optional mit freiwilliger Nutzung einer Synchronisationsfunktion: Opt-in) oder der integrierten Stundenplanfunktion, hierbei werden folgende Daten auf dem Endgerät verarbeitet und gespeichert: Termine und Veranstaltungen
- Feedbackfunktion und Kontaktaufnahme: freiwillige Nutzung mit der Angabe von Kontaktdaten und ggf. freiwilliger Übermittlung von Protokolldaten
- Campus Dienste: freiwillige Nutzung mit Verarbeitung von Notenansicht, Matrikelnummer, E-Mailadresse, Name
- Funktionen der Bibliothek: freiwillige Nutzung mit Verarbeitung von Bibliothekskontodaten, wie z.B. Ausweisnummer mit Name, E-Mailadresse, postalischer Adresse, Nutzungsberechtigung, Bestelldaten, Gebühren, Vormerkung, Ausleihdaten. Die vollständigen Angaben zur Verarbeitung finden Sie in der Datenschutzerklärung der Bibliothek:<br />
https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
Die App verlinkt an einigen Stellen auf die Website der Goethe-Universität sowie auf andere, externe Websites, die in einem In-App-Browser dargestellt werden. Wir bitten Sie bei Aufruf dieser Websites, die dort geltenden gesonderte Datenschutzhinweise und Erklärungen zu beachten.
### <u>2. Zweck(e) der Datenverarbeitung</u>
**Zugriff auf Standortdaten**
Für die Navigation benötigt die Goethe-Uni-App Zugriff auf den Standort des verwendeten Endgerätes (Location Based Services). Bei einer Anfrage erhebt die App den aktuellen Standort über GPS, Funkzellendaten und WLAN-Datenbanken, um Ihnen als Nutzer:in Informationen zu Ihrer unmittelbaren Umgebung geben zu können. Der Zugriff auf die Standortdaten erfolgt nur, wenn Sie den Zugriff auf die Standortdaten erlauben. Daten zu Ihrem Standort werden ausschließlich für die Bearbeitung von standortbezogenen Anfragen genutzt und um Ihren Standort auf der Karte anzuzeigen.
**Zugriff auf Zugriffsdaten**
Die Speicherung und Verarbeitung von Protokolldateien erfolgt, um die Funktionsfähigkeit der Goethe Uni-App für Sie sicherzustellen. Zudem benötigen wir die die Daten aus Gründen der Sicherheit unserer informationstechnischen Systeme. Eine anderweitige Auswertung oder Weitergabe findet in diesem Zusammenhang nicht statt.
**Zugriff auf Spracheinstellungen**
Der Zugriff auf die Spracheinstellung erfolgt um Ihnen die Oberfläche der App in der von Ihnen gewünschten Sprache anzuzeigen.
**Zugriff auf die Einstellung der Statusgruppe**
Der Zugriff auf die Einstellung der Statusgruppe erfolgt um Ihnen in der App die für Ihre Gruppe zutreffenden Informationen anzuzeigen, z.B. Mensapreise
**Zugriff auf personenbezogene Daten bei der Nutzung der Feedbackfunktion**
Die Verarbeitung der personenbezogenen Daten aus der Feedbackfunktion dient uns zur Kontaktaufnahme und Fehlerbehebung.
**Zugriff auf personenbezogene Daten bei der Kalendersynchronisation**
Der Zugriff auf die Termindaten erfolgt um sie bei aktivierter Kalenderfunktion in den Gerätekalender zu schreiben.
**Zugriff auf Daten der Campus Dienste**
Der Zugriff auf das Campus Management Systems erfolgt ausschließlich um persönliche Daten der Studierendenverwaltung in der App anzuzeigen (z.B. Prüfungsnoten).
**Zugriff auf bibliotheksspezifische personenbezogene Daten**
Der Zugriff auf die Daten (z.B. Ausweisnummer, Name, Postanschrift) erfolgt zur Durchführung von Bestell- und Ausleihverfahren von Büchern und sonstigen Materialien der Universitätsbibliothek. Die vollständigen Angaben zu den Verarbeitungszwecken finden Sie in der Datenschutzerklärung der Bibliothek: https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
### <u>3. Rechtsgrundlage(n) für die Datenverarbeitung</u>
Die Nutzung der Nutzungs-/Zugriffsdaten („Protokolldateien") basiert auf Artikel 6 Absatz 1 lit. f) DSGVO.
Für alle spezifischen Funktionen, bei denen die Datenverarbeitung auf Ihrer freiwilligen Einwilligung als Nutzer:innen basiert, werden explizit Einwilligungen bzw. aktive Zustimmungsakte („Opt-In") eingeholt. Die Bereitstellung personenbezogener Daten zu Ihrer Person gegenüber der Goethe-Universität erfolgen dabei auf freiwilliger Basis. Die Rechtsgrundlage ist in diesen Fällen jeweils Artikel 6 Absatz 1 lit. a) DSGVO. Sie können Ihre jeweilige Einwilligung jederzeit einzeln widerrufen bzw. Ihre Einstellungen ändern.
### <u>4. Datenlöschung und Speicherdauer</u>
Die in den Protokolldateien der App erfassten Daten werden sieben Tage nach dem Ende des Zugriffs automatisch gelöscht oder anonymisiert.
Die Löschfristen bzw. Speicherdauer der in den Bibliotheksystemen erfassten Daten finden Sie in der Datenschutzerklärung der Bibliothek: https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
Für alle anderen Funktionen und Dienste gilt: Die Löschung erfolgt hier je nach Vorgabe des genutzten Dienstes. Die personenbezogenen Daten der betroffenen Person werden gelöscht oder gesperrt, sobald der Zweck der Speicherung entfällt.
### <u>5. Datenweitergabe/Datenübermittlung</u>
Ihre personenbezogenen Daten werden von uns nicht an Dritte weitergegeben.
Von Betreiberseite wird durch technische und organisatorische Maßnahmen sichergestellt, dass Dritte keinen Zugriff auf die verarbeiteten Daten, wie z. B. Nutzungsdaten, erhalten. Ein Auftragsverarbeitungsverhältnis nach Art. 28 DSGVO besteht nicht, da ausschließlich eigene Server verwendet werden.
### <u>6. Automatisierte Entscheidungsfindung</u>
Eine automatisierte Entscheidungsfindung einschließlich Profiling erfolgt nicht.
## Rechte der betroffenen Person
Werden personenbezogene Daten von Ihnen verarbeitet, sind Sie Betroffener im Sinne der DSGVO. Die Geltendmachung Ihrer Betroffenenrechte ist kostenfrei. Sie können sich dafür selbstverständlich an uns wenden. Es stehen Ihnen folgende Betroffenenrechte gegenüber der Goethe-Universität zu:
### <u>1. Auskunftsrecht</u>
Sie können von uns als verantwortlicher Stelle eine Bestätigung darüber verlangen, ob und welche Ihrer personenbezogenen Daten von uns verarbeitet werden. Sie haben das Recht, von uns Kopien Ihrer personenbezogenen Daten zu verlangen. Bitte beachten Sie die Ausnahmen, die sich durch spezifische Vorschriften ergeben können.
### <u>2. Recht auf Berichtigung</u>
Sie haben das Recht von uns die Berichtigung und/oder Vervollständigung zu verlangen, sofern die verarbeiteten personenbezogenen Daten, die Sie betreffen, nicht (mehr) richtig oder nicht (mehr) vollständig sind.
### <u>3. Recht auf Einschränkung der Verarbeitung</u>
Unter bestimmten Voraussetzungen können Sie die Einschränkung der Verarbeitung der Sie betreffenden personenbezogenen Daten verlangen, d. h. dass dann Ihre personenbezogenen Daten zwar nicht gelöscht, aber gekennzeichnet werden, so dass eine weitere Verarbeitung eingeschränkt ist.
### <u>4. Recht auf Löschung</u>
Sie können unter bestimmten Voraussetzungen von uns verlangen, dass die Sie betreffenden personenbezogenen Daten unverzüglich gelöscht werden. Dies ist insbesondere der Fall, wenn die personenbezogenen Daten zu dem Zweck, zu dem sie ursprünglich erhoben oder verarbeitet wurden, nicht mehr erforderlich sind.
### <u>5. Recht auf Unterrichtung</u>
Haben Sie das Recht auf Berichtigung, Löschung oder Einschränkung der Verarbeitung uns gegenüber geltend gemacht, sind wir verpflichtet, allen Empfänger/innen, denen die Sie betreffenden personenbezogenen Daten offengelegt wurden, diese Berichtigung oder Löschung der Daten oder Einschränkung der Verarbeitung mitzuteilen, es sei denn, dies erweist sich als unmöglich oder ist mit einem unverhältnismäßigen Aufwand verbunden. Sie sind berechtigt, über diese Empfänger unterrichtet zu werden.
### <u>6. Recht auf Datenübertragbarkeit</u>
Sie haben unter bestimmten Voraussetzungen das Recht von uns zu verlangen, dass Ihre personenbezogenen Daten von uns direkt an einen anderen Verantwortlichen oder an eine andere Organisation übermittelt werden. Alternativ haben Sie unter bestimmten Voraussetzungen das Recht von uns zu verlangen, dass wir Ihnen selbst die Daten in einem maschinenlesbaren Format bereitstellen.
### <u>7. Widerspruchsrecht</u>
Wenn wir Ihre personenbezogenen Daten verarbeiten, weil die Verarbeitung im öffentlichen Interesse, Teil unserer öffentlichen Aufgaben ist bzw. wenn wir Ihre Daten auf Basis eines berechtigten Interesses verarbeiten, haben Sie aus Gründen, die sich aus Ihrer besonderen Situation ergeben, das Recht, jederzeit der Verarbeitung der Sie betreffenden Daten zu widersprechen.
### <u>8. Recht auf Widerruf der datenschutzrechtlichen Einwilligungserklärung</u>
Wenn wir Ihre personenbezogenen Daten verarbeiten, weil Sie uns Ihre Einwilligung gegeben haben, haben Sie jederzeit das Recht, Ihre Einwilligungserklärung zu widerrufen.
### <u>9. Recht auf Beschwerde bei einer Aufsichtsbehörde</u>
Sie haben ferner das Recht auf Beschwerde bei einer Aufsichtsbehörde. Die zuständige Aufsichtsbehörde wird Ihre Beschwerde prüfen.
## **Kontaktdaten der Aufsichtsbehörde im Bereich Datenschutz**
Wenn Sie der Ansicht sind, dass eine Verarbeitung der Sie betreffenden personenbezogenen Daten gegen Datenschutzvorschriften verstößt, wenn Sie eine allgemeine Anfrage haben oder wenn Sie sich bei einer zuständigen Fachaufsichtsbehörde beschweren wollen, können Sie sich an den Hessischen Beauftragten für Datenschutz und Informationsfreiheit (HBDI) wenden.
**Der Hessische Beauftragte für Datenschutz und Informationsfreiheit ist auf unterschiedlichen Wegen erreichbar:**
<u>**Der Hessische Beauftragte für Datenschutz und Informationsfreiheit**</u><br />
Postfach 3163<br />
65021 Wiesbaden
Telefon: +49 611 1408 -- 0
Für allgemeine Anfragen können Sie ein Kontaktformular nutzen:<br />
<https://datenschutz.hessen.de/kontakt><br />
<br />
Für Beschwerden steht Ihnen zudem ein Beschwerdeformular zur Verfügung:<br />
<https://datenschutz.hessen.de/service/beschwerde-uebermitteln>
@@ -0,0 +1,166 @@
# Privacy policy
## Contact details of the person responsible
Responsible in the sense of the General Data Protection Regulation and further regulations on data protection is the:
Johann Wolfgang Goethe-Universität Frankfurt am Main represented by its president<br />
Theodor-W.-Adorno-Platz 1<br />
60323 Frankfurt am Main
Postanschrift:<br />
Goethe-Universität Frankfurt am Main<br />
60629 Frankfurt
Website: http://www.uni-frankfurt.de
## Contact details of the data protection officer at Goethe University
You can reach the data protection officers at Johann Wolfgang Goethe University Frankfurt am Main at:<br />
Mail: <dsb@uni-frankfurt.de><br />
Website: http://www.uni-frankfurt.de/47859992/datenschutzbeauftragte
## Information on the processing of personal data
### <u>1. Scope of the processing of personal data</u>.
According to Article 4 DSGVO, personal data is any information relating to an identified or identifiable natural person.
We process personal data of you as a user inside of the Goethe University App to the extent that this is technically necessary for the provision of a **functional application**.
Furthermore, data processing may be based on your voluntary consent if you wish to use **specific functions**.
We therefore distinguish below between
- Access data when using the app: content of requests, IP addresses, date/time of request, requested URL, error codes, browser identifier, HTTP header.
- Location and navigation: voluntary location information
- User settings: voluntary specification of a) language preferences (currently: German/English), b) status (e.g. guest/student) or c) specific search queries and search results (notifications)
- Calendar function: voluntary use of the calendar function (optional with voluntary use of a sync function: opt-in) or the integrated timetable function. The following data is processed and stored on the users device: appointments and events
- Feedback function and contacting: voluntary use with the provision of contact data and, if applicable, voluntary transmission of log data
- Campus services: voluntary use with processing of grade view, matriculation number, email address, name
- Services of the library: voluntary use with processing of library account data, such as ID number with name, e-mail address, postal address, right of use, order data, fees, reservation, loan data. Full details of processing can be found in the library's privacy policy:<br />
https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
In some places, the app links to the Goethe University website and to other external websites that are displayed in an in-app browser. When you visit these websites, we ask you to pay attention to the separate data protection notices and declarations that apply there.
### <u>2. Purpose(s) of data processing</u>
**Access to location data**.
For navigation, the Goethe University app requires access to the location of the end device used (location-based services). When a request is made, the app collects the current location via GPS, radio cell data and WLAN databases in order to be able to give you as a user:in information about your immediate surroundings. The location data is only accessed if you allow access to the location data. Data about your location is only used to process location-related requests and to display your location on the map.
**Access to access data**.
Log files are stored and processed to ensure that the Goethe Uni app functions properly for you. In addition, we need the data for reasons of security of our information technology systems. No other evaluation or disclosure takes place in this context.
**Access to language settings**.
Access to the language setting is made in order to display the interface of the app in the language of your choice.
**Access to the status group setting**.
Access to the status group setting is provided to show you the information in the app that applies to your group, e.g. canteen prices.
**Access to personal data when using the feedback function**.
We use the processing of personal data from the feedback function to contact you and troubleshoot problems.
**Access to personal data when synchronizing calendars**.
Appointment data is accessed in order to write it to the device calendar when the calendar function is enabled.
**Access to Campus Services data**.
Access to the Campus Management System is solely for the purpose of displaying personal student management data in the app (e.g., exam grades).
**Access to library-specific personal data**.
Access to data (e.g., ID number, name, mailing address) is for the purpose of carrying out ordering and borrowing procedures for books and other materials from the University Library. Full details of the purposes of processing can be found in the Library's Privacy Policy: https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
### <u>3. Rechtsgrundlage(n) für die Datenverarbeitung</u>
The use of usage/access data ("log files") is based on Article 6(1)(f) DSGVO.
For all specific functions where data processing is based on your voluntary consent as a user:in, explicit consent or active acts of consent ("opt-in") are obtained. The provision of personal data about you to Goethe University is done on a voluntary basis. The legal basis in each of these cases is Article 6 (1) a) DSGVO. You can individually revoke your respective consent or change your settings at any time.
### <u>4. Data deletion and storage duration</u>
The data collected in the log files of the app are automatically deleted or anonymized seven days after the end of the access.
The deletion periods or storage duration of the data collected in the library systems can be found in the library's privacy policy: https://www.ub.uni-frankfurt.de/benutzung/datenschutz.html
For all other functions and services, the following applies: deletion takes place here depending on the specifications of the service used. The personal data of the data subject will be deleted or blocked as soon as the purpose of the storage no longer applies.
### <u>5. Data disclosure/data transfer</u>
We will not pass on your personal data to third parties.
On the part of the operator, technical and organizational measures are taken to ensure that third parties do not gain access to the processed data, such as usage data. An order processing relationship according to Art. 28 DSGVO does not exist, as only our own servers are used.
### <u>6. Automated decision-making</u>
Automated decision-making, including profiling, does not take place.
## Rights of the data subject
If personal data is processed by you, you are a data subject within the meaning of the GDPR. The assertion of your data subject rights is free of charge. You can, of course, contact us for this purpose. You are entitled to the following data subject rights vis-à-vis Goethe University:
### <u>1. Right of access</u>
You can request confirmation from us as the controller as to whether and which of your personal data is being processed by us. You have the right to request copies of your personal data from us. Please note the exceptions that may arise due to specific regulations.
### <u>2. Right of rectification</u>
You have the right to request us to rectify and/or complete, if the processed personal data concerning you is not (anymore) accurate or not (anymore) complete.
### <u>3. Right to restriction of processing</u>
Under certain conditions, you can request the restriction of the processing of personal data concerning you, i.e. that your personal data is then not deleted, but marked so that further processing is restricted.
### <u>4. Right to erasure</u>
Under certain conditions, you can demand that we delete the personal data concerning you without delay. This is particularly the case if the personal data is no longer necessary for the purpose for which it was originally collected or processed.
### <u>5. Right to information</u>
If you have asserted the right to rectification, erasure or restriction of processing against us, we are obliged to inform all recipients to whom the personal data concerning you have been disclosed of this rectification or erasure of the data or restriction of processing, unless this proves impossible or involves a disproportionate effort. You are entitled to be informed about these recipients.
### <u>6. Right to data portability</u>
Under certain conditions, you have the right to request that we transfer your personal data directly to another controller or organization. Alternatively, under certain conditions, you have the right to request that we ourselves provide you with the data in a machine-readable format.
### <u>7. Right to object</u>
If we process your personal data because the processing is in the public interest, part of our public duties, or if we process your data on the basis of a legitimate interest, you have the right to object at any time to the processing of data relating to you for reasons arising from your particular situation.
### <u>8. Right to revoke the declaration of consent under data protection law</u>
If we process your personal data because you have given us your consent, you have the right to revoke your declaration of consent at any time.
### <u>9. Right to lodge a complaint with a supervisory authority</u>
You also have the right to lodge a complaint with a supervisory authority. The competent supervisory authority will examine your complaint.
## **Contact details of the supervisory authority in the area of data protection**
If you believe that the processing of your personal data violates data protection regulations, if you have a general inquiry or if you want to complain to a competent supervisory authority, you can contact the Hessian Commissioner for Data Protection and Freedom of Information (HBDI).
**The Hessian Commissioner for Data Protection and Freedom of Information can be reached in different ways:**
<u>**The Hessian Commissioner for Data Protection and Freedom of Information**</u><br />
PO Box 3163<br />
65021 Wiesbaden
Telephone: +49 611 1408 -- 0
For general inquiries you can use a contact form:<br />
<https://datenschutz.hessen.de/kontakt><br />
<br />
A complaint form is also available for complaints:<br />
<https://datenschutz.hessen.de/service/beschwerde-uebermitteln>
@@ -0,0 +1,14 @@
import {markdown} from '../../default/tools/markdown.js';
/** @type {import('@openstapps/core').SCAboutPage} */
export const privacy = {
title: 'Datenschutz',
content: [await markdown('./privacy.md', import.meta.url)],
translations: {
en: {
title: 'Privacy Policy',
},
},
};
export default privacy;
+59
View File
@@ -0,0 +1,59 @@
import aboutPages from './about-pages/index.js';
import defaultApp from '../default/app/index.js';
import {backend as defaultBackend, internal as defaultInternal} from '../default/backend/index.js';
import versionHistory from './version-history/index.js';
/**
* This is the default configuration for the Goethe university of Frankfurt
*
* @type {import('@openstapps/core').SCConfigFile}
*/
const config = {
auth: {
default: {
client: {
clientId: '1cac3f99-33fa-4234-8438-979f07e0cdab',
scopes: 'openid profile email offline_access',
url: 'https://idp.ub.uni-frankfurt.de/idp/profile/oidc',
},
endpoints: {
authorization: 'https://idp.ub.uni-frankfurt.de/idp/profile/oidc/authorize',
endSession: 'https://idp.ub.uni-frankfurt.de/idp/profile/oidc/end-session',
mapping: {
id: '$.preferred_username',
email: '$.mailPrimaryAddress',
familyName: '$.family_name',
givenName: '$.given_name',
name: '$.name',
role: '$.eduPersonPrimaryAffiliation',
studentId: '$.employeeNumber',
},
token: 'https://idp.ub.uni-frankfurt.de/idp/profile/oidc/token',
userinfo: 'https://idp.ub.uni-frankfurt.de/idp/profile/oidc/userinfo',
revoke: 'https://idp.ub.uni-frankfurt.de/idp/profile/oauth2/revocation',
},
},
},
app: {
...defaultApp,
features: {
extern: {
hisometry: {
authProvider: 'default',
url: 'https://his-self-service.rz.uni-frankfurt.de/v2',
},
idCards: {
authProvider: 'default',
url: 'https://id-cards.rz.uni-frankfurt.de/v2/id-cards',
},
},
},
versionHistory,
aboutPages,
},
backend: defaultBackend,
internal: defaultInternal,
uid: 'f-u',
};
export default config;
@@ -0,0 +1,52 @@
# Goethe-Uni App 2.4
Wir freuen uns euch mehr in der Goethe-Uni App
bieten zu können.
## Navigation zu Gebäuden und Orten
Als eines der Ergebnisse des Ideenwettbewerbs wurde jetzt
ein Navigationsfeature in die App integriert.
Orte auf der Karte, Mensen, sowie sogar Termine (wenn hinterlegt)
bieten jetzt direkt die Option eine Verbindung zu finden, gestützt
durch die Karten App auf deinem Gerät.
## Integration der Jobbörse
Jobs findest du ab sofort auch in der Goethe-Uni App.
Auch das ist ein Ergebnis des Ideenwettbewerbs,
und wir freuen uns es euch hier präsentieren zu können!
## Der Umweltscore
Der Umweltscore für Gerichte wird nun auch in der App angezeigt.
> Nachhaltigkeit, Umweltschutz, Gesundheit und Klimawandel sind
> zentrale Begriffe im gesellschaftlichen Miteinander.
> Unsere Ernährung spielt hierbei eine wichtige Rolle.
> Das Studierendenwerk Frankfurt am Main zeichnet seine Speisenpläne
> ab sofort mit einem Umweltscore aus.
> Anhand dieser Bewertung können Sie direkt ersehen,
> welchen Einfluss Ihre Essenauswahl auf das Klima hat.
## Weitere Verbesserungen
### Performance
Die Performance der App beim Navigieren wurde stark verbessert und ist datensparender.
### Kalender
Die Kalenderabschnitte haben jetzt neue Namen bekommen:
- Der _Kalender_ zeigt Termine für spezifische Tage
- Die _Wochenübersicht_ ist ein Stundenplan mit allen Termine, die sich wiederholen (z. B. Vorlesungen)
- Die _Einzeltermine_ zeigen alle Termine, die sich nicht wiederholen
(z. B. Klausuren)
### Meine App
Der "Meine Kurse" Abschnitt wurde überarbeitet, und zeigt jetzt Termine
für die nächsten Tage und mit mehr Details an.
@@ -0,0 +1,49 @@
# Goethe-Uni App 2.4
The Goethe-Uni App got even better!
## Navigation to buildings and places
As part of the "Ideenwettbewerb," the idea competition,
we have now integrated a navigation feature into the app.
Orte auf der Karte, Mensen, sowie sogar Termine (wenn hinterlegt)
bieten jetzt direkt die Option eine Verbindung zu finden, gestützt
durch die Karten App auf deinem Gerät.
## Integration of the job market
Jobs are now also available in the Goethe-Uni App.
This feature is also a result of the idea competition,
and we're happy to be able to present it to you here!
## The environment score
The environment score for dishes is now displayed inside the app.
> Sustainability, environment protection, health, and climate change are
> central topics in how we live today in our society.
> Our eating habits play an important role in it.
> The "Studierendenwerk Frankfurt am Main" is marking up its menus
> from now on with the so-called "Umweltscore," the environment score.
> Based on this rating, you can see the impact your meal choice would have on our climate.
## Further improvements
### Performance
The performance while navigating around the app has been heavily improved and requires less data to work.
### Calendar
The calendar sections have new names:
- The _calendar_ shows appointments on specific days
- The _week overview_ is a schedule with all events that repeat (e.g. lectures)
- The _single events_ show all appointments that don't repeat (e.g. exams)
### My App
The "my courses" section has been revamped,
and now shows events for the next days and with more detail.
@@ -0,0 +1,15 @@
# Goethe-Uni App 2.5
Die Goethe-Uni App ist noch besser geworden!
## Komplett neue Kartenansicht
Wir haben die Karte überarbeitet, um eine klarere und schnellere Übersicht zu bieten.
## Deutschlandticket mit an Bord
Wenn du das Upgrade des Semesterticket zum Deutschlandticket gemacht hast und eingeloggt bist, findet es sich jetzt auch in der App.
## Bibliotheksdienste sind wieder voll funktionsfähig
Aufgrund einiger Adhoc-Änderungen im Bibliothekssystem haben wir die App so angepasst, dass sie damit umgehen kann.
@@ -0,0 +1,15 @@
# Goethe-Uni App 2.5
The Goethe-Uni App got even better!
## Completely new map view
We overhauled the map to offer you a clearer and faster and overview.
## Deutschlandticket included
If you upgraded your Semesterticket to a Deutschlandticket it will now reside in the App if you are logged in.
## Library services are fully functional again
Due to some adhoc changes in the library system we adjusted the app to handle them properly.
@@ -0,0 +1,6 @@
import {versions} from '../../default/tools/version.js';
/** @type {import('@openstapps/core').SCAppVersionInfo[]} */
const versionHistory = await versions(import.meta.url);
export default versionHistory;
+22
View File
@@ -0,0 +1,22 @@
ES_HOST="elasticsearch"
BACKEND_HOST="localhost"
if [ -z $GITLAB_CI ]; then
ES_HOST=localhost
fi
( STAPPS_LOG_LEVEL=31 STAPPS_EXIT_LEVEL=8 NODE_CONFIG_ENV=elasticsearch NODE_ENV=integration-test ALLOW_NO_TRANSPORT=true ES_ADDR=http://$ES_HOST:9200 node app.js ) & backend_pid=$!
( openstapps-api e2e http://$BACKEND_HOST:3000 --reportPath coverage/integration-report-junit.xml --waiton tcp:$BACKEND_HOST:3000 --samples node_modules/@openstapps/core/test/resources/indexable ) & api_cli_pid=$!
## Check output codes
# api-cli output defines passing the test
# backend should not exit early
wait $api_cli_pid
api_cli_exit=$?
wait $backend_pid
backend_exit=$?
if [ "$api_cli_exit" -eq "0" ]; then
echo "FINISHED";
exit;
fi
+125
View File
@@ -0,0 +1,125 @@
{
"name": "@openstapps/backend",
"description": "A reference implementation for a StApps backend",
"version": "4.0.7",
"private": true,
"type": "module",
"license": "AGPL-3.0-only",
"author": "André Bierlein <andre.mt.bierlein@gmail.com>",
"contributors": [
"Anselm Stordeur <anselmstordeur@gmail.com>",
"Benjamin Jöckel",
"Jovan Krunić <jovan.krunic@gmail.com>",
"Karl-Philipp Wulfert <krlwlfrt@gmail.com>",
"Michel Jonathan Schmitz",
"Rainer Killinger <mail-openstapps@killinger.co>",
"Sebastian Lange",
"Thea Schöbl <dev@theaninova.de>"
],
"main": "lib/app.js",
"bin": "app.js",
"files": [
"app.js",
"lib",
"config",
"Dockerfile",
"README.md",
"ROUTES.md",
"CHANGELOG.md"
],
"scripts": {
"build": "tsup-node",
"build:docker": "docker build -t openstapps:backend ../../.deploy/backend",
"deploy": "pnpm --prod --filter=@openstapps/backend deploy ../../.deploy/backend",
"dev": "tsup --watch --onSuccess \"pnpm run start\"",
"format": "prettier . -c --ignore-path ../../.gitignore",
"format:fix": "prettier --write . --ignore-path ../../.gitignore",
"lint": "tsc --noEmit && eslint --ext .ts src/",
"lint:fix": "eslint --fix --ext .ts src/",
"start": "cross-env NODE_CONFIG_ENV=elasticsearch ALLOW_NO_TRANSPORT=true node app.js",
"start:debug": "cross-env STAPPS_LOG_LEVEL=31 NODE_CONFIG_ENV=elasticsearch ALLOW_NO_TRANSPORT=true node app.js",
"test": "pnpm run test:unit",
"test:integration": "sh integration-test.sh",
"test:unit": "cross-env NODE_CONFIG_ENV=elasticsearch ALLOW_NO_TRANSPORT=true STAPPS_LOG_LEVEL=0 mocha --exit"
},
"dependencies": {
"@elastic/elasticsearch": "8.14.1",
"@openstapps/core": "workspace:*",
"@openstapps/core-tools": "workspace:*",
"@openstapps/logger": "workspace:*",
"@types/body-parser": "1.19.6",
"@types/cors": "2.8.13",
"@types/express": "4.17.17",
"@types/geojson": "1.0.6",
"@types/node": "22.15.31",
"@types/node-cron": "3.0.7",
"@types/promise-queue": "2.2.0",
"@types/uuid": "8.3.4",
"body-parser": "1.20.3",
"cors": "2.8.5",
"cosmiconfig": "8.1.3",
"deepmerge": "4.3.1",
"express": "4.21.2",
"express-prom-bundle": "6.6.0",
"express-promise-router": "4.1.1",
"got": "14.6.6",
"moment": "2.30.1",
"morgan": "1.10.1",
"nock": "13.3.1",
"node-cache": "5.1.2",
"node-cron": "3.0.2",
"nodemailer": "10.1.7",
"prom-client": "14.1.1",
"promise-queue": "2.2.5",
"uuid": "8.3.2"
},
"devDependencies": {
"@openstapps/api-cli": "workspace:*",
"@openstapps/eslint-config": "workspace:*",
"@openstapps/prettier-config": "workspace:*",
"@openstapps/tsconfig": "workspace:*",
"@testdeck/mocha": "0.3.3",
"@types/chai": "4.3.20",
"@types/chai-as-promised": "7.1.8",
"@types/mocha": "10.0.10",
"@types/morgan": "1.9.10",
"@types/sinon": "10.0.14",
"@types/sinon-express-mock": "1.3.9",
"@types/supertest": "2.0.12",
"c8": "10.1.3",
"chai": "4.5.0",
"chai-as-promised": "7.1.2",
"cross-env": "7.0.3",
"get-port": "5.1.1",
"mocha": "10.8.2",
"mocha-junit-reporter": "2.2.0",
"mocked-env": "1.3.5",
"sinon": "15.0.4",
"sinon-express-mock": "2.2.1",
"supertest": "6.3.3",
"ts-node": "10.9.2",
"tsup": "8.5.0",
"typescript": "5.9.3"
},
"tsup": {
"entry": [
"src/cli.ts"
],
"sourcemap": true,
"clean": true,
"target": "es2022",
"format": "esm",
"outDir": "lib"
},
"prettier": "@openstapps/prettier-config",
"eslintConfig": {
"extends": [
"@openstapps"
]
},
"openstapps-configuration": {
"overrides": [
"test"
]
}
}
+226
View File
@@ -0,0 +1,226 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCNotFoundErrorResponse,
SCRequestBodyTooLargeErrorResponse,
SCSyntaxErrorResponse,
SCUnsupportedMediaTypeErrorResponse,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import cors from 'cors';
import {Express} from 'express';
import morgan from 'morgan';
import path from 'path';
import {DEFAULT_TIMEOUT, isTestEnvironment, mailer, plugins, validator} from './common.js';
import {getPrometheusMiddleware} from './middleware/prometheus.js';
import {MailQueue} from './notification/mail-queue.js';
import {bulkAddRouter} from './routes/bulk-add-route.js';
import {bulkDoneRouter} from './routes/bulk-done-route.js';
import {bulkRouter} from './routes/bulk-route.js';
import {indexRouter} from './routes/index-route.js';
import {multiSearchRouter} from './routes/multi-search-route.js';
import {pluginRegisterRouter} from './routes/plugin-register-route.js';
import {searchRouter} from './routes/search-route.js';
import {thingUpdateRouter} from './routes/thing-update-route.js';
import {virtualPluginRoute} from './routes/virtual-plugin-route.js';
import {BulkStorage} from './storage/bulk-storage.js';
import {DatabaseConstructor} from './storage/database.js';
import {backendConfig} from './config.js';
import {fileURLToPath} from 'url';
/**
* Configure the backend
*/
export async function configureApp(app: Express, databases: {[name: string]: DatabaseConstructor}) {
let integrationTestTimeout: NodeJS.Timeout;
// request loggers have to be the first middleware to be set in express
app.use(
morgan('dev', {
skip: (_request, response) => {
if (process.env.NODE_ENV === 'integration-test') {
clearTimeout(integrationTestTimeout);
integrationTestTimeout = setTimeout(() => {
process.exit(1);
}, DEFAULT_TIMEOUT);
return false;
}
return response.statusCode < 400;
},
stream: process.stdout,
}),
);
/* istanbul ignore if */
if (process.env.PROMETHEUS_MIDDLEWARE === 'true') {
app.use(getPrometheusMiddleware());
}
const corsOptions = {
allowedHeaders: [
'DNT',
'Keep-Alive',
'User-Agent',
'X-Requested-With',
'If-Modified-Since',
'Cache-Control',
'Content-Type',
'X-StApps-Version',
],
credentials: true,
maxAge: 1_728_000,
methods: ['GET', 'POST', 'PUT', 'OPTIONS'],
optionsSuccessStatus: 204,
};
// allow all origins on all routes
app.use(cors(corsOptions));
// TODO: See if it can handle options request with no content-type
// allow cors preflight requests on every route
app.options('*', [cors(corsOptions)]);
// only accept json as content-type for all requests
app.use((request, response, next) => {
// Only accept json as content-type
if (request.is('application/json') !== 'application/json') {
// return an error in the response
const error = new SCUnsupportedMediaTypeErrorResponse(isTestEnvironment);
response.status(error.statusCode);
response.json(error);
return;
}
const bodyBuffer: Buffer[] = [];
// we don't know the full size, the only way we can get is by adding up all individual chunk sizes
let bodySize = 0;
const chunkGatherer = (chunk: Buffer) => {
bodySize += chunk.byteLength;
// when adding each chunk size to the total size, check how large it now is.
if (bodySize > backendConfig.backend.maxRequestBodySize) {
request.off('data', chunkGatherer);
request.off('end', endCallback);
// return an error in the response
const error = new SCRequestBodyTooLargeErrorResponse(isTestEnvironment);
response.status(error.statusCode);
response.json(error);
return;
}
// push the chunk in the buffer
bodyBuffer.push(chunk);
};
const endCallback = () => {
request.body = Buffer.concat(bodyBuffer).toString();
try {
request.body = JSON.parse(request.body);
next();
} catch (error) {
const error_ = new SCSyntaxErrorResponse(error.message, isTestEnvironment);
response.status(error_.statusCode);
response.json(error_);
return;
}
};
request.on('data', chunkGatherer).on('end', endCallback);
});
// validate config file
const directory = path.dirname(fileURLToPath(import.meta.url));
await validator.addSchemas(
path.join(directory, '..', 'node_modules', '@openstapps', 'core', 'lib', 'schema'),
);
// validate the config file
const configValidation = validator.validate(backendConfig, 'SCConfigFile');
// validation failed
if (configValidation.errors.length > 0) {
throw new Error(
`Validation of config file failed. Errors were: ${JSON.stringify(configValidation.errors)}`,
);
}
// check if a database name was given
if (!backendConfig.internal.database?.name) {
throw new Error('You have to configure a database');
}
const database = new databases[backendConfig.internal.database.name](
backendConfig,
// mailQueue
mailer !== undefined && backendConfig.internal.monitoring ? new MailQueue(mailer) : undefined,
);
await database.init();
if (database === undefined) {
throw new TypeError('No implementation for configured database found. Please check your configuration.');
}
Logger.ok('Validated config file successfully');
// treats /foo and /foo/ as two different routes
// see http://expressjs.com/en/api.html#app.set
app.enable('strict routing');
// make the bulk storage available to all http middlewares/routes
app.set('bulk', new BulkStorage(database));
app.set('env', process.env.NODE_ENV);
// load routes before plugins
// they now can be used or overwritten by any plugin
app.use(
bulkAddRouter,
bulkDoneRouter,
bulkRouter,
indexRouter,
multiSearchRouter,
pluginRegisterRouter,
searchRouter,
thingUpdateRouter,
);
// for plugins, as Express doesn't really want you to unregister routes (and doesn't offer any method to do so at all)
app.all('*', async (request, response, next) => {
// if the route exists, call virtual route on the plugin that registered that route
if (plugins.has(request.originalUrl)) {
try {
response.json(await virtualPluginRoute(request, plugins.get(request.originalUrl)!));
} catch (error) {
// in case of an error: send an error response
response.status(error.statusCode);
response.json(error);
}
} else {
// pass to the next matching route (which is 404)
next();
}
});
// add a route for a missing resource (404)
app.use((_request, response) => {
const errorResponse = new SCNotFoundErrorResponse(isTestEnvironment);
response.status(errorResponse.statusCode);
response.json(errorResponse);
});
}
+110
View File
@@ -0,0 +1,110 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Logger} from '@openstapps/logger';
import express from 'express';
import http from 'http';
import {configureApp} from './app.js';
import {Elasticsearch} from './storage/elasticsearch/elasticsearch.js';
const app = express();
/**
* Get port from environment and store in Express.
*/
const port = normalizePort(process.env.PORT || '3000');
/**
* Create HTTP server.
*/
const server = http.createServer(app);
/**
* Define server handling for specific events
*/
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(value: string) {
const portNumber = Number.parseInt(value, 10);
if (Number.isNaN(portNumber)) {
// named pipe
return value;
}
if (portNumber >= 0) {
// port number
return portNumber;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
async function onError(error: {code: string; syscall: string}) {
if (error.syscall !== 'listen') {
throw error;
}
const bind = typeof port === 'string' ? `Pipe ${port}` : `Port ${port}`;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES': {
await Logger.error(`${bind} requires elevated privileges`);
process.exit(1);
break;
}
case 'EADDRINUSE': {
await Logger.error(`${bind} is already in use`);
process.exit(1);
break;
}
default: {
throw error;
}
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
const addr = server.address();
if (addr === null) {
void Logger.error(`Failed to start binding`);
} else {
const bind = typeof addr === 'string' ? `pipe ${addr}` : `port ${addr.port}`;
Logger.ok(`Listening on ${bind}`);
}
}
configureApp(app, {elasticsearch: Elasticsearch})
.then(() => {
Logger.ok('Successfully configured express server');
// After app setup listen on provided port, on all network interfaces
server.listen(port);
})
// eslint-disable-next-line unicorn/prefer-top-level-await
.catch(error => {
throw error;
});
+43
View File
@@ -0,0 +1,43 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCPluginMetaData} from '@openstapps/core';
import {Validator} from '@openstapps/core-tools';
import {BackendTransport} from './notification/backend-transport.js';
/**
* Instance of the transport for sending mails
*/
export const mailer = BackendTransport.getTransportInstance();
/**
* A validator instance to check if something is a valid JSON object (e.g. a request or a thing)
*/
export const validator = new Validator();
/**
* Provides information if the backend is executed in the "test" (non-production) environment
*/
export const isTestEnvironment = process.env.NODE_ENV !== 'production';
/*
* Stores a ("key-value") list of plugins where key is route and value is plugin information
*/
export const plugins = new Map<string, SCPluginMetaData>();
/**
* The default timeout in milliseconds
*/
export const DEFAULT_TIMEOUT = 20_000;
+48
View File
@@ -0,0 +1,48 @@
import {cosmiconfig, PublicExplorer} from 'cosmiconfig';
import {SCConfigFile} from '@openstapps/core';
import path from 'path';
import deepmerge from 'deepmerge';
import {Logger} from '@openstapps/logger';
const fallbackNamespace = 'default';
const configPath = 'config';
/**
* Creates a config loader
* @param moduleName the name of the config file (module)
*/
function configLoader(moduleName: string): PublicExplorer {
return cosmiconfig(moduleName, {
searchPlaces: ['js', 'json', 'yml', 'yaml'].map(it => `${moduleName}rc.${it}`),
loaders: {
'.js': filepath => import(`file://${filepath}`).then(it => it.default),
},
});
}
/**
* Find and load a config file
*/
async function findConfig<T>(moduleName: string, namespace = fallbackNamespace): Promise<T> {
const config = await configLoader(moduleName).search(path.posix.join('.', configPath, namespace));
if (config) {
Logger.info(`Using ${namespace} config for ${moduleName}`);
return config.config;
} else {
Logger.info(`Using ${fallbackNamespace} config for ${moduleName}`);
return configLoader(moduleName)
.search(path.posix.join('.', configPath, fallbackNamespace))
.then(it => it!.config);
}
}
const namespace = process.env.NODE_APP_INSTANCE;
const database = process.env.NODE_CONFIG_ENV;
export const prometheusConfig = await findConfig<unknown>('prometheus', namespace);
const backendConfigWithoutDatabase = await findConfig<SCConfigFile>('backend', namespace);
export const backendConfig = database
? deepmerge(backendConfigWithoutDatabase, await findConfig<never>(database, namespace))
: backendConfigWithoutDatabase;
+17
View File
@@ -0,0 +1,17 @@
declare global {
namespace NodeJS {
// eslint-disable-next-line unicorn/prevent-abbreviations
interface ProcessEnv {
NODE_APP_INSTANCE: 'default' | 'b-tu' | 'f-u' | 'fb-fh' | 'ks-ug' | string | undefined;
NODE_CONFIG_ENV: 'elasticsearch' | string | undefined;
STAPPS_LOG_LEVEL: `${number}`;
ALLOW_NO_TRANSPORT: `${boolean}`;
PORT: `${number}`;
ES_DEBUG: `${boolean}`;
ES_ADDR: string;
PROMETHEUS_MIDDLEWARE: `${boolean}`;
}
}
}
export {};
@@ -0,0 +1,39 @@
/*
* Copyright (C) 2021 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Logger} from '@openstapps/logger';
import express_prom_bundle from 'express-prom-bundle';
import fs from 'fs';
import path from 'path';
/**
* Create and configure a new Express Prometheus Middleware instance
*
* This function tries to configure the new instance with JSON read from
* `./conf/prometheus.json`. When this fails an instance configured with
* default options is returned.
* @returns express.Express
*/
export function getPrometheusMiddleware(): express_prom_bundle.Middleware {
const configFileName = path.join('./config', 'prometheus.json');
let options: express_prom_bundle.Opts = {};
try {
options = JSON.parse(fs.readFileSync(configFileName, 'utf8'));
} catch (error) {
Logger.warn("Couldn't get options from config file for Prometheus Middleware.", error);
}
return express_prom_bundle(options);
}
@@ -0,0 +1,116 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Logger, SMTP, Transport, VerifiableTransport} from '@openstapps/logger';
/**
* Provides information if a transport is a verifiable transport
* @param instance A transport that needs to be checked
*/
export function isTransportWithVerification(instance: Transport): instance is VerifiableTransport {
return typeof (instance as VerifiableTransport).verify === 'function';
}
/**
* Singleton for getting only one transport service
*
* In the future this may support more than loading SMTP as a transport.
*/
export class BackendTransport {
/**
* One (and only one) instance of the backend transport
*/
private static _instance?: BackendTransport;
/**
* Stores information if transport is in state of waiting for the verification
*/
private waitingForVerification = false;
/**
* A (SMTP) transport which includes settings for sending mails
*/
protected transport: SMTP | undefined;
/**
* Destroys the singleton instance of the class (for unit test purposes)
*/
public static destroy() {
delete BackendTransport._instance;
}
/**
* Provides instance of a backend transport
*/
public static getInstance(): BackendTransport {
if (BackendTransport._instance !== undefined) {
return BackendTransport._instance;
}
BackendTransport._instance = new BackendTransport();
return BackendTransport._instance;
}
/**
* Provides an instance of a transport
*/
public static getTransportInstance(): SMTP | undefined {
return BackendTransport.getInstance().transport;
}
private constructor() {
// get SMTP instance for the time
// in the future we may implement some other transport services which can be selected
// via the configuration files
try {
this.transport = SMTP.getInstance();
} catch (error) {
if (process.env.ALLOW_NO_TRANSPORT === 'true') {
Logger.warn('SMTP error was ignored.');
} else {
throw error;
}
}
if (this.transport !== undefined && isTransportWithVerification(this.transport)) {
void this.verifyTransport(this.transport);
}
}
/**
* Verifies the transport using its verification method
*/
private async verifyTransport(transport: VerifiableTransport): Promise<void> {
this.waitingForVerification = true;
try {
const successful = await transport.verify();
if (successful) {
Logger.log('SMTP verification successful.');
}
} catch (error) {
throw error;
} finally {
this.waitingForVerification = false;
}
}
/**
* Provides information if transport is in state of waiting for the verification
*/
public isWaitingForVerification(): boolean {
return this.waitingForVerification;
}
}
@@ -0,0 +1,111 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.nse along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Logger, SMTP} from '@openstapps/logger';
import {SendMailOptions} from 'nodemailer';
import Queue from 'promise-queue';
/**
* A queue that can send mails in serial
*/
export class MailQueue {
/**
* Number of allowed verification attempts after which the initialization of transport fails
*/
static readonly MAX_VERIFICATION_ATTEMPTS = 5;
/**
* Number of milliseconds after which verification check should be repeated
*/
static readonly VERIFICATION_TIMEOUT = 5000;
/**
* A queue that saves mails, before the transport is ready. When
* the transport gets ready this mails are getting pushed in to
* the normal queue.
*/
dryQueue: SendMailOptions[];
/**
* A queue that saves mails, that are being sent in series
*/
queue: Queue;
/**
* A counter for the number of verifications that failed
*/
verificationCounter: number;
/**
* Creates a mail queue
* @param transport Transport which is used for sending mails
*/
constructor(private readonly transport: SMTP) {
this.queue = new Queue(1);
// this queue saves all request when the transport is not ready yet
this.dryQueue = [];
this.verificationCounter = 0;
// if the transport can be verified it should check if it was done...
this.checkForVerification();
}
/**
* Adds a mail into the queue so it gets send when the queue is ready
* @param mail Information required for sending a mail
*/
private async addToQueue(mail: SendMailOptions) {
return this.queue.add<string>(() => this.transport.sendMail(mail));
}
/**
* Verify the given transport
*/
private checkForVerification() {
if (this.verificationCounter >= MailQueue.MAX_VERIFICATION_ATTEMPTS) {
throw new Error('Failed to initialize the SMTP transport for the mail queue');
}
if (this.transport.isVerified()) {
Logger.ok('Transport for mail queue was verified. We can send mails now');
// if the transport finally was verified send all our mails from the dry queue
for (const mail of this.dryQueue) {
void this.addToQueue(mail);
}
} else {
this.verificationCounter++;
setTimeout(() => {
Logger.warn('Transport not verified yet. Trying to send mails here...');
this.checkForVerification();
}, MailQueue.VERIFICATION_TIMEOUT);
}
}
/**
* Push a mail into the queue so it gets send when the queue is ready
* @param mail Information required for sending a mail
*/
public async push(mail: SendMailOptions) {
if (this.transport.isVerified()) {
await this.addToQueue(mail);
} else {
// the transport has verification, but is not verified yet
// push to a dry queue which gets pushed to the real queue when the transport is verified
this.dryQueue.push(mail);
}
}
}
@@ -0,0 +1,45 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCBulkAddRequest, SCBulkAddResponse, SCBulkAddRoute, SCNotFoundErrorResponse} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import {isTestEnvironment} from '../common.js';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the route for adding bulks
*/
const bulkRouteModel = new SCBulkAddRoute();
/**
* Implementation of the bulk add route (SCBulkAddRoute)
*/
export const bulkAddRouter = createRoute<SCBulkAddRequest, SCBulkAddResponse>(
bulkRouteModel,
async (request, app, parameters) => {
const bulkMemory: BulkStorage = app.get('bulk');
const bulk = bulkMemory.read(parameters.UID);
if (bulk === undefined) {
Logger.warn(`Bulk with ${parameters.UID} not found.`);
throw new SCNotFoundErrorResponse(isTestEnvironment);
}
await bulkMemory.database.post(request, bulk);
return {};
},
);
@@ -0,0 +1,51 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCBulkDoneRequest,
SCBulkDoneResponse,
SCBulkDoneRoute,
SCNotFoundErrorResponse,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import {isTestEnvironment} from '../common.js';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the route for closing bulks
*/
const bulkDoneRouteModel = new SCBulkDoneRoute();
/**
* Implementation of the bulk done request route (SCBulkDoneRoute)
*/
export const bulkDoneRouter = createRoute<SCBulkDoneRequest, SCBulkDoneResponse>(
bulkDoneRouteModel,
async (_request, app, parameters) => {
const bulkMemory: BulkStorage = app.get('bulk');
const bulk = bulkMemory.read(parameters.UID);
if (bulk === undefined) {
Logger.warn(`Bulk with ${parameters.UID} not found.`);
throw new SCNotFoundErrorResponse(isTestEnvironment);
}
bulk.state = 'done';
await bulkMemory.markAsDone(bulk);
return {};
},
);
+32
View File
@@ -0,0 +1,32 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCBulkRequest, SCBulkResponse, SCBulkRoute} from '@openstapps/core';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the route for creating bulks
*/
const bulkRouteModel = new SCBulkRoute();
/**
* Implementation of the bulk request route (SCBulkRoute)
*/
export const bulkRouter = createRoute<SCBulkRequest, SCBulkResponse>(bulkRouteModel, async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
return bulkMemory.create(request);
});
+53
View File
@@ -0,0 +1,53 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
// the list provides option to easily implement "isHttpMethod" guard
const httpVerbs = [
'get',
'post',
'put',
'delete',
'patch',
'options',
'head',
'checkout',
'copy',
'lock',
'merge',
'mkactivity',
'mkcol',
'move',
'm-search',
'notify',
'purge',
'report',
'search',
'subscribe',
'trace',
'unlock',
'unsubscribe',
] as const;
/**
* Strings that can be used as HTTP verbs (e.g. in requests): 'get' | 'post' | 'put' | 'delete' etc.
*/
export type HTTPVerb = (typeof httpVerbs)[number];
/**
* Provides information if a text (representing a method) is an HTTP verb
* @param method A text (representing a method) to check
*/
export function isHttpMethod(method: string): method is HTTPVerb {
return (httpVerbs as unknown as string[]).includes(method);
}
+37
View File
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCIndexResponse, SCIndexRoute} from '@openstapps/core';
import {createRoute} from './route.js';
import {backendConfig} from '../config.js';
/**
* Contains information for using the index route
*/
const indexRouteModel = new SCIndexRoute();
/**
* Implementation of the index route (SCIndexRoute)
*/
export const indexRouter = createRoute<unknown, SCIndexResponse>(
indexRouteModel,
async (): Promise<SCIndexResponse> => {
return {
app: backendConfig.app,
auth: backendConfig.auth,
backend: backendConfig.backend,
};
},
);
@@ -0,0 +1,59 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCMultiSearchRequest,
SCMultiSearchResponse,
SCMultiSearchRoute,
SCSearchResponse,
SCTooManyRequestsErrorResponse,
} from '@openstapps/core';
import {isTestEnvironment} from '../common.js';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
import {backendConfig} from '../config.js';
/**
* Contains information for using the multi search route
*/
const multiSearchRouteModel = new SCMultiSearchRoute();
/**
* Implementation of the multi search route (SCMultiSearchRoute)
*/
export const multiSearchRouter = createRoute<
SCMultiSearchRequest,
SCMultiSearchResponse | SCTooManyRequestsErrorResponse
>(multiSearchRouteModel, async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
const queryNames = Object.keys(request);
if (queryNames.length > backendConfig.backend.maxMultiSearchRouteQueries) {
throw new SCTooManyRequestsErrorResponse(isTestEnvironment);
}
// get a map of promises for each query
const searchRequests = queryNames.map(async queryName => {
return bulkMemory.database.search(request[queryName]);
});
const listOfSearchResponses = await Promise.all(searchRequests);
const response: {[queryName: string]: SCSearchResponse} = {};
for (const [index, queryName] of queryNames.entries()) {
response[queryName] = listOfSearchResponses[index];
}
return response;
});
@@ -0,0 +1,110 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCNotFoundErrorResponse,
SCPluginAlreadyRegisteredErrorResponse,
SCPluginMetaData,
SCPluginRegisterRequest,
SCPluginRegisterResponse,
SCPluginRegisterRoute,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import {deepStrictEqual} from 'assert';
import {isTestEnvironment, plugins} from '../common.js';
import {createRoute} from './route.js';
import {backendConfig} from '../config.js';
/**
* Contains information for using the route for registering routes
*/
const pluginRegisterRouteModel = new SCPluginRegisterRoute();
/**
* Implementation of the plugin registration route (SCPluginRegisterRoute)
*/
export const pluginRegisterRouter = createRoute(pluginRegisterRouteModel, pluginRegisterHandler);
/**
* Handles requests on route for registering plugins
* @param request Request received for registering or unregistering a plugin
* @param _app Express application
*/
export async function pluginRegisterHandler(
request: SCPluginRegisterRequest,
_app: Express.Application,
): Promise<SCPluginRegisterResponse> {
switch (request.action) {
case 'add': {
return addPlugin(request.plugin);
}
case 'remove': {
return removePlugin(request.route);
}
}
}
/**
* Adds a plugin to the list (map) of registered plugins
* @param plugin Meta data of the plugin
*/
function addPlugin(plugin: SCPluginMetaData): SCPluginRegisterResponse {
// check if plugin (its route) has already been registered
if (plugins.has(plugin.route)) {
const previouslyRegistered = plugins.get(plugin.route);
try {
deepStrictEqual(previouslyRegistered, plugin);
return {success: true};
} catch {
throw new SCPluginAlreadyRegisteredErrorResponse(
'Plugin already registered',
plugins.get(plugin.route)!,
isTestEnvironment,
);
}
}
// it's a new plugin so it can be added to the map of plugins
plugins.set(plugin.route, plugin);
// add plugin info to app config
if (backendConfig.app.features.plugins === undefined) {
backendConfig.app.features.plugins = {};
}
backendConfig.app.features.plugins[plugin.name] = {urlPath: plugin.route};
Logger.log(
`Registered plugin (name: ${plugin.name}, address: ${plugin.address}) on the route "${plugin.route}".`,
);
return {success: true};
}
/**
* Removes a plugin from the list (map) of registered plugins using the provided route
* @param route Route of the plugin which needs to be unregistered
*/
function removePlugin(route: string): SCPluginRegisterResponse {
if (!plugins.has(route)) {
throw new SCNotFoundErrorResponse(isTestEnvironment);
}
if (plugins.has(route)) {
const plugin = plugins.get(route)!;
delete backendConfig.app.features.plugins?.[plugin.name];
}
// remove the plugin information using its route as a key
plugins.delete(route);
Logger.log(`Removed plugin that used the route "${route}".`);
return {success: true};
}
+128
View File
@@ -0,0 +1,128 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCInternalServerErrorResponse,
SCMethodNotAllowedErrorResponse,
SCRoute,
SCValidationErrorResponse,
} from '@openstapps/core';
import {ValidationError} from '@openstapps/core-tools/src/types/validator.js';
import {Logger} from '@openstapps/logger';
import {Application, Router} from 'express';
import PromiseRouter from 'express-promise-router';
import {isTestEnvironment, validator} from '../common.js';
import {isHttpMethod} from './http-types.js';
/**
* Creates a router from a route class and a handler function which implements the logic
*
* The given router performs a request and response validation, sets status codes and checks if the given handler
* only returns errors that are allowed for the client to see
* @param routeClass Model of a route
* @param handler Implements the logic of the route
*/
export function createRoute<REQUESTTYPE, RETURNTYPE>(
routeClass: SCRoute,
handler: (
validatedBody: REQUESTTYPE,
app: Application,
parameters: {[parameterName: string]: string},
) => Promise<RETURNTYPE>,
): Router {
// create router
const router = PromiseRouter({mergeParams: true});
// create route
// the given type has no index signature so we have to cast to get the IRouteHandler when a HTTP method is given
const route = router.route(routeClass.urlPath);
const verb = routeClass.method.toLowerCase();
// check if route has a valid http verb
if (isHttpMethod(verb)) {
// create a route handler for the given HTTP method
route[verb](async (request, response) => {
try {
// validate request
const requestValidation = validator.validate(request.body, routeClass.requestBodyName);
if (requestValidation.errors.length > 0) {
const error = new SCValidationErrorResponse(requestValidation.errors, isTestEnvironment);
response.status(error.statusCode);
response.json(error);
await Logger.error(error);
return;
}
// hand over request to handler with path parameters
const handlerResponse = await handler(request.body, request.app, request.params);
// validate response generated by handler
const responseErrors: ValidationError[] = validator.validate(
handlerResponse,
routeClass.responseBodyName,
).errors;
if (responseErrors.length > 0) {
const validationError = new SCValidationErrorResponse(responseErrors, isTestEnvironment);
// The validation error is not caused by faulty user input, but through an error that originates somewhere in
// the backend, therefore we use this "stacked" error.
const internalServerError = new SCInternalServerErrorResponse(validationError, isTestEnvironment);
response.status(internalServerError.statusCode);
response.json(internalServerError);
await Logger.error(internalServerError);
return;
}
// set status code
response.status(routeClass.statusCodeSuccess);
// respond
response.json(handlerResponse);
} catch (error) {
// if the error response is allowed on the route
if (routeClass.errorNames.some(constructorType => error instanceof constructorType)) {
// respond with the error from the handler
response.status(error.statusCode);
response.json(error);
await Logger.error(error);
} else {
// the error is not allowed so something went wrong
const internalServerError = new SCInternalServerErrorResponse(error, isTestEnvironment);
response.status(internalServerError.statusCode);
response.json(internalServerError);
await Logger.error(error);
}
}
});
} else {
throw new Error(
'Invalid HTTP verb in route definition. Please check route definitions in `@openstapps/core`',
);
}
// return a SCMethodNotAllowedErrorResponse on all other HTTP methods
route.all((_request, response) => {
const error = new SCMethodNotAllowedErrorResponse(isTestEnvironment);
response.status(error.statusCode);
response.json(error);
Logger.warn(error);
});
return router;
}
@@ -0,0 +1,35 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCSearchRequest, SCSearchResponse, SCSearchRoute} from '@openstapps/core';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the search route
*/
const searchRouteModel = new SCSearchRoute();
/**
* Implementation of the search route (SCSearchRoute)
*/
export const searchRouter = createRoute<SCSearchRequest, SCSearchResponse>(
searchRouteModel,
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
return bulkMemory.database.search(request);
},
);
@@ -0,0 +1,36 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCThingUpdateRequest, SCThingUpdateResponse, SCThingUpdateRoute} from '@openstapps/core';
import {BulkStorage} from '../storage/bulk-storage.js';
import {createRoute} from './route.js';
/**
* Contains information for using the route for updating single things
*/
const thingUpdateRouteModel = new SCThingUpdateRoute();
/**
* Implementation of the thing update route (SCThingUpdateRoute)
*/
export const thingUpdateRouter = createRoute<SCThingUpdateRequest, SCThingUpdateResponse>(
thingUpdateRouteModel,
async (request, app) => {
const bulkMemory: BulkStorage = app.get('bulk');
await bulkMemory.database.put(request);
return {};
},
);
@@ -0,0 +1,56 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCInternalServerErrorResponse, SCPluginMetaData, SCValidationErrorResponse} from '@openstapps/core';
import {Request} from 'express';
import got from 'got';
import {isTestEnvironment, validator} from '../common.js';
import {backendConfig} from '../config.js';
/**
* Generic route function used to proxy actual requests to plugins
* @param request The request for a plugin resource
* @param plugin Meta data of the plugin
* @throws {SCInternalServerErrorResponse} On request/response validation or response from the plugin errors
*/
export async function virtualPluginRoute(request: Request, plugin: SCPluginMetaData): Promise<object> {
try {
const requestValidation = validator.validate(request.body, plugin.requestSchema);
if (requestValidation.errors.length > 0) {
// noinspection ExceptionCaughtLocallyJS
throw new SCValidationErrorResponse(requestValidation.errors, isTestEnvironment);
}
// send the request to the plugin (forward the body) and save the response
const response = await got.post(plugin.route.replaceAll(/^\//gi, ''), {
prefixUrl: plugin.address,
json: request.body,
timeout: {
response: backendConfig.backend.externalRequestTimeout,
},
responseType: 'json',
});
const responseBody = response.body;
const responseValidation = validator.validate(responseBody, plugin.responseSchema);
if (responseValidation.errors.length > 0) {
// noinspection ExceptionCaughtLocallyJS
throw new SCValidationErrorResponse(responseValidation.errors, isTestEnvironment);
}
return responseBody as object;
} catch (error) {
// wrap exact error inside of the internal server error response
throw new SCInternalServerErrorResponse(error, isTestEnvironment);
}
}
+192
View File
@@ -0,0 +1,192 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCBulkRequest, SCThingType} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import moment from 'moment';
import NodeCache from 'node-cache';
import {v4} from 'uuid';
import {Database} from './database.js';
/**
* Possible operations with a bulk
*/
export type BulkOperation = 'create' | 'expired' | 'update';
/**
* Describes an indexing process
*/
export class Bulk implements SCBulkRequest {
/**
* Expiration of the bulk
*
* If the bulk is not finished before the expiration date is hit, the bulk
* and all data associated with it will be deleted
*/
expiration: string;
/**
* The data source of the bulk
*
* Bulks with same type and source will be replaced and the data will be
* updated when the bulk is marked as done
*/
source: string;
/**
* State of the bulk
*
* Data can be indexed for this bulk as long as the state is `in progress`
* and the bulk is not expired
*
* When the bulk is marked as `done` it replaces the previous bulk with
* the same source and type. The data will be availabe to the user when
* the bulk switches to done
*/
state: 'in progress' | 'done';
/**
* Type of data in the bulk
*/
type: SCThingType;
/**
* Unique identifier of the bulk
*/
uid: string;
/**
* Creates a new bulk process
* @param request Data needed for requesting a bulk
*/
constructor(request: SCBulkRequest) {
this.uid = v4();
this.state = 'in progress';
this.expiration =
typeof request.expiration === 'string' ? request.expiration : moment().add(1, 'hour').toISOString();
// when should this process be finished
// where does the process come from
this.source = request.source;
// which type of data is this process about to index
this.type = request.type;
}
}
/**
* Cache for bulk-processes
*/
export class BulkStorage {
/**
* Cache for temporary storage
*/
private readonly cache: NodeCache;
/**
* Creates a new BulkStorage
* @param database the database that is controlled by this bulk storage
*/
constructor(public database: Database) {
// a bulk lives 60 minutes if no expiration is given
// the cache is checked every 60 seconds
this.cache = new NodeCache({stdTTL: 3600, checkperiod: 60});
this.cache.on('expired', async (_key, bulk: Bulk) => {
// if the bulk is not done
if (bulk.state !== 'done') {
// the database can delete the data associated with this bulk
await this.database.bulkExpired(bulk);
}
});
}
/**
* Saves a bulk process and assigns to it a user-defined ttl (time-to-live)
* @param bulk the bulk process to save
* @returns the bulk process that was saved
*/
private save(bulk: Bulk): Bulk {
const expirationInSeconds = moment(bulk.expiration).diff(moment.now()) / 1000;
Logger.info('Bulk expires in ', expirationInSeconds, 'seconds');
// save the item in the cache with it's expected expiration
this.cache.set(bulk.uid, bulk, expirationInSeconds);
return bulk;
}
/**
* Create and save a new bulk process
* @param bulkRequest a request for a new bulk process
* @returns a promise that contains the new bulk process
*/
public async create(bulkRequest: SCBulkRequest): Promise<Bulk> {
const bulk = new Bulk(bulkRequest);
bulk.source = bulkRequest.source;
bulk.type = bulkRequest.type;
this.save(bulk);
// tell the database that the bulk was created
await this.database.bulkCreated(bulk);
return bulk;
}
/**
* Delete a bulk process
* @param uid uid of the bulk process
* @returns a promise that contains the deleted bulk process
*/
public async delete(uid: string): Promise<Bulk> {
const bulk = this.read(uid);
if (bulk === undefined) {
throw new TypeError(`Bulk that should be deleted was not found. UID was "${uid}"`);
}
// delete the bulk process from the cache
this.cache.del(uid);
// tell the database to handle the expiration of the bulk
await this.database.bulkExpired(bulk);
return bulk;
}
/**
* Update an old bulk process (replace it with the new one)
* @param bulk new bulk process
* @returns an empty promise
*/
public async markAsDone(bulk: Bulk): Promise<void> {
bulk.state = 'done';
this.save(bulk);
// tell the database that this is the new bulk
await this.database.bulkUpdated(bulk);
return;
}
/**
* Read an existing bulk process
* @param uid uid of the bulk process
* @returns a promise that contains a bulk
*/
public read(uid: string): Bulk | undefined {
return this.cache.get(uid);
}
}
+109
View File
@@ -0,0 +1,109 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
SCConfigFile,
SCPlace,
SCPlaceWithoutReferences,
SCSearchQuery,
SCSearchResponse,
SCThingWithCategoriesWithoutReferences,
SCThings,
SCUuid,
} from '@openstapps/core';
import {MailQueue} from '../notification/mail-queue.js';
import {Bulk} from './bulk-storage.js';
import {FeatureCollection, Point, Polygon} from 'geojson';
/**
* Creates an instance of a database
*/
export type DatabaseConstructor = new (config: SCConfigFile, mailQueue?: MailQueue) => Database;
export type SupplementaryGeoJSON = FeatureCollection<Point | Polygon, SupplementaryGeoJSONThing>;
export type SupplementaryGeoJSONThing = Pick<
Extract<SCThings, SCPlace>,
Exclude<
keyof SCPlaceWithoutReferences | keyof SCThingWithCategoriesWithoutReferences<never, never>,
'geo' | 'origin' | 'translations'
>
>;
/**
* Defines what one database class needs to have defined
*/
export interface Database {
/**
* Gets called if a bulk was created
*
* The database should
* @param bulk A bulk to be created
*/
bulkCreated(bulk: Bulk): Promise<void>;
/**
* Gets called if a bulk expires
*
* The database should delete all data that is associtated with this bulk
* @param bulk A bulk which data needs to be removed
*/
bulkExpired(bulk: Bulk): Promise<void>;
/**
* Gets called if a bulk was updated
*
* If the database holds a bulk with the same type and source as the given
* bulk it should be replaced by the given one
* @param bulk A new bulk whose data should be saved instead of the data of the old bulk
*/
bulkUpdated(bulk: Bulk): Promise<void>;
/**
* Get a single document
* @param uid Unique identifier of the document
*/
get(uid: SCUuid): Promise<SCThings>;
/**
* Initialize the database (call and wait for all needed methods)
*/
init(): Promise<void>;
/**
* Add a thing to an existing bulk
* @param thing A StAppsCore thing to be added
* @param bulk A bulk to which the thing should be added
*/
post(thing: SCThings, bulk: Bulk): Promise<void>;
/**
* Replace an existing thing in any Bulk
*
* Currently it is not possible to put an non-existing object
* @param thing A StAppsCore thing to be added to a bulk
*/
put(thing: SCThings): Promise<void>;
/**
* Search for things
* @param params Parameters which form a search query to search the backend data
*/
search(parameters: SCSearchQuery): Promise<SCSearchResponse>;
/**
* Get geo info for display on a map
*/
geo(): Promise<SupplementaryGeoJSON>;
}
@@ -0,0 +1,58 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {
AggregateName,
AggregationsAggregate,
AggregationsFiltersAggregate,
AggregationsMultiTermsBucket,
} from '@elastic/elasticsearch/lib/api/types.js';
import {SCFacet, SCThingType} from '@openstapps/core';
/**
* Parses elasticsearch aggregations (response from es) to facets for the app
* @param aggregationResponse - aggregations response from elasticsearch
*/
export function parseAggregations(
aggregationResponse: Record<AggregateName, AggregationsAggregate>,
): SCFacet[] {
const facets: SCFacet[] = [];
for (const aggregateName in aggregationResponse) {
const aggregation = aggregationResponse[aggregateName] as AggregationsMultiTermsBucket;
const type = aggregateName === '@all' ? {} : {onlyOnType: aggregateName as SCThingType};
for (const field in aggregation) {
const fieldAggregate = aggregation[field] as AggregationsFiltersAggregate;
if (typeof fieldAggregate !== 'object') continue;
const buckets = Object.values(fieldAggregate.buckets).map(bucket => {
return {
count: bucket.doc_count,
key: bucket.key as string,
};
});
if (buckets.length === 0) continue;
facets.push({
buckets,
field,
...type,
});
}
}
return facets;
}
@@ -0,0 +1,454 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Client, events} from '@elastic/elasticsearch';
import {
AggregateName,
AggregationsMultiTermsBucket,
IndicesGetAliasResponse,
SearchHit,
SearchResponse,
} from '@elastic/elasticsearch/lib/api/types.js';
import {SCConfigFile, SCSearchQuery, SCSearchResponse, SCThings, SCUuid} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import moment from 'moment';
import {MailQueue} from '../../notification/mail-queue.js';
import {Bulk} from '../bulk-storage.js';
import {Database, SupplementaryGeoJSON, SupplementaryGeoJSONThing} from '../database.js';
import {parseAggregations} from './aggregations.js';
import * as Monitoring from './monitoring.js';
import {buildQuery} from './query/query.js';
import {buildSort} from './query/sort.js';
import {aggregations, putTemplate} from './templating.js';
import {
ElasticsearchConfig,
ElasticsearchQueryDisMaxConfig,
ElasticsearchQueryQueryStringConfig,
} from './types/elasticsearch-config.js';
import {
ACTIVE_INDICES_ALIAS,
getThingIndexName,
INACTIVE_INDICES_ALIAS,
matchIndexByType,
VALID_INDEX_REGEX,
} from './util/index.js';
import {noUndefined} from './util/no-undefined.js';
import {retryCatch, RetryOptions} from './util/retry.js';
import {Feature, Point, Polygon} from 'geojson';
/**
* A database interface for elasticsearch
*/
export class Elasticsearch implements Database {
/**
* Elasticsearch client
*/
client: Client;
/**
* Queue of mails to be sent
*/
mailQueue: MailQueue | undefined;
/**
* Stores information if elasticsearch is ready (connection to it has been established)
*/
ready: boolean;
/**
* Get the url of elasticsearch
*/
static getElasticsearchUrl(): string {
// check if we have a docker link
if (process.env.ES_ADDR !== undefined) {
return process.env.ES_ADDR;
}
// default
return 'http://localhost:9200';
}
/**
* Create a new interface for elasticsearch
* @param config an assembled config file
* @param mailQueue a mail queue for monitoring
*/
constructor(
private readonly config: SCConfigFile,
mailQueue?: MailQueue,
) {
if (config.internal.database === undefined || typeof config.internal.database.version !== 'string') {
throw new TypeError('Database version is undefined. Check your config file');
}
this.client = new Client({
node: Elasticsearch.getElasticsearchUrl(),
});
this.client.diagnostic.on(events.REQUEST, async (error: Error | null, result: unknown) => {
if (error !== null) {
await Logger.error(error);
}
if (process.env.ES_DEBUG === 'true') {
Logger.log(result);
}
});
this.ready = false;
this.mailQueue = mailQueue;
}
/**
* Gets a map which contains each alias and all indices that are associated with each alias
*/
private async cleanupDeadIndices(retryOptions: Partial<RetryOptions<IndicesGetAliasResponse>> = {}) {
const aliasResponse = await retryCatch({
maxRetries: 10,
retryInterval: 2000,
doAction: () => this.client.indices.getAlias(),
onFailedAttempt: (attempt, error, {maxRetries, retryInterval}) => {
Logger.warn('Failed getting alias map:', error);
Logger.warn(`Retrying in ${retryInterval} milliseconds. (${attempt} of ${maxRetries})`);
},
onFail: ({maxRetries}) => {
throw new TypeError(`Failed to retrieve alias map after ${maxRetries} attempts!`);
},
...retryOptions,
});
this.ready = true;
const inactiveIndices = Object.entries(aliasResponse)
.filter(([_, aliases]) => Object.keys(aliases.aliases).includes(INACTIVE_INDICES_ALIAS))
.map(([indexName]) => indexName);
if (inactiveIndices.length > 0) {
await this.client.indices.delete({
index: inactiveIndices,
});
Logger.warn(`Deleted old indices: ${inactiveIndices}`);
}
}
/**
* Provides an elasticsearch object using containing thing's UID
* @param uid an UID to use for the search
* @returns an elasticsearch object containing the thing
*/
private async getObject(uid: SCUuid): Promise<SearchHit<SCThings> | undefined> {
const searchResponse = await this.client.search<SCThings>({
body: {
query: {
term: {
'uid.raw': {
value: uid,
},
},
},
},
from: 0,
allow_no_indices: true,
index: ACTIVE_INDICES_ALIAS,
size: 1,
});
// return data from response
return searchResponse.hits.hits[0];
}
async prepareBulkWrite(bulk: Bulk): Promise<string> {
if (!this.ready) {
throw new Error('No connection to elasticsearch established yet.');
}
const index = getThingIndexName(bulk.type, bulk.source, bulk);
if (!VALID_INDEX_REGEX.test(index)) {
throw new Error(
`Index names can only consist of lowercase letters from a-z, "-", "_" and integer numbers.
Make sure to set the bulk "source" and "type" to names consisting of the characters above.`,
);
}
return index;
}
/**
* Should be called when a new bulk was created. Creates a new index and applies the mapping to the index
* @param bulk the bulk process that was created
*/
public async bulkCreated(bulk: Bulk): Promise<void> {
const index = await this.prepareBulkWrite(bulk);
// re-apply the index template before each new bulk operation
await putTemplate(this.client, bulk.type);
await this.client.indices.create({
index,
aliases: {
[INACTIVE_INDICES_ALIAS]: {},
},
});
Logger.info('Created index', index);
}
/**
* Should be called when a bulk process is expired. The index that was created with this bulk gets deleted
* @param bulk the bulk process that is expired
*/
public async bulkExpired(bulk: Bulk): Promise<void> {
const index = await this.prepareBulkWrite(bulk);
Logger.info('Bulk expired. Deleting index', index);
// don't delete indices that are in use already
if (bulk.state !== 'done') {
Logger.info('deleting obsolete index', index);
await this.client.indices.delete({index});
}
}
/**
* Should be called when a bulk process is updated (replaced by a newer bulk). This will replace the old
* index and publish all data that was indexed in the new instead
* @param bulk the new bulk process that should replace the old one with the same type and source
*/
public async bulkUpdated(bulk: Bulk): Promise<void> {
const index = await this.prepareBulkWrite(bulk);
await this.client.indices.refresh({index, allow_no_indices: false});
const activeIndices = await this.client.indices
.getAlias({
index: matchIndexByType(bulk.type, bulk.source),
name: ACTIVE_INDICES_ALIAS,
})
.then(it => Object.entries(it).map(([name]) => name))
.catch(() => [] as string[]);
await this.client.indices.updateAliases({
actions: [
{
add: {index, alias: ACTIVE_INDICES_ALIAS},
},
{
remove: {index, alias: INACTIVE_INDICES_ALIAS},
},
...activeIndices.map(index => ({
remove_index: {index},
})),
],
});
Logger.info(`Index for ${bulk.type} is now ${index}`);
Logger.info(`Also removed obsolete indices ${activeIndices}`);
}
/**
* Gets an SCThing from all indexed data
* @param uid uid of an SCThing
*/
public async get(uid: SCUuid): Promise<SCThings> {
const object = await this.getObject(uid);
if (object?._source === undefined) {
throw new TypeError('Item not found.');
}
return object._source;
}
/**
* Initialize the elasticsearch database (call all needed methods)
*/
public async init(retryOptions: Partial<RetryOptions<IndicesGetAliasResponse>> = {}): Promise<void> {
const monitoringConfiguration = this.config.internal.monitoring;
if (monitoringConfiguration !== undefined) {
if (this.mailQueue === undefined) {
throw new TypeError(
'Monitoring is defined, but MailQueue is undefined. A MailQueue is obligatory for monitoring.',
);
}
// read all watches and schedule searches on the client
await Monitoring.setUp(monitoringConfiguration, this.client, this.mailQueue);
}
return this.cleanupDeadIndices(retryOptions);
}
/**
* Add an item to an index
* @param object the SCThing to add to the index
* @param bulk the bulk process which item belongs to
*/
public async post(object: SCThings, bulk: Bulk): Promise<void> {
const index = await this.prepareBulkWrite(bulk);
const thing: SCThings & {creation_date: string} = {
...object,
creation_date: moment().format(),
};
const conflictingThing = await this.client.search({
query: {
term: {
'uid.raw': {
value: thing.uid,
},
},
},
// matches all indices but excludes indices of the same type
// https://www.elastic.co/guide/en/elasticsearch/reference/7.14/multi-index.html#multi-index
index: ['stapps_*', `-${matchIndexByType(bulk.type, bulk.source)}`],
});
if (conflictingThing.hits.hits.length > 0) {
throw new Error(
`UID conflict: ${thing.uid}. ${index} tried to post an object that already exists but which it won't replace.`,
);
}
const searchResponse = await this.client.create<SCThings>({
document: thing,
id: thing.uid,
index,
timeout: '90s',
});
if (searchResponse.result !== 'created') {
throw new Error(
`Object creation Error (${searchResponse.result}: Instance was: ${JSON.stringify(thing)}`,
);
}
}
/**
* Put (update) an existing item
* @param object SCThing to put
*/
public async put(object: SCThings): Promise<void> {
const item = await this.getObject(object.uid);
if (item !== undefined) {
await this.client.update({
body: {
doc: object,
},
id: object.uid,
index: item._index,
});
return;
}
throw new Error('You tried to PUT an non-existing object. PUT is only supported on existing objects.');
}
/**
* Search all indexed data
* @param parameters search query
*/
public async search(parameters: SCSearchQuery): Promise<SCSearchResponse> {
if (this.config.internal.database === undefined) {
throw new TypeError('Database is undefined. You have to configure the query build');
}
const esConfig: ElasticsearchConfig = {
name: this.config.internal.database.name as 'elasticsearch',
version: this.config.internal.database.version as string,
query: this.config.internal.database.query as
| ElasticsearchQueryDisMaxConfig
| ElasticsearchQueryQueryStringConfig
| undefined,
};
const response: SearchResponse<SCThings> = await this.client.search({
aggs: aggregations,
query: buildQuery(parameters, this.config, esConfig),
from: parameters.from,
index: ACTIVE_INDICES_ALIAS,
allow_no_indices: true,
size: parameters.size,
sort: parameters.sort === undefined ? undefined : buildSort(parameters.sort),
});
return {
data: response.hits.hits
.map(hit => {
// we only directly return the _source documents
// elasticsearch provides much more information, the user shouldn't see
return hit._source;
})
.filter(noUndefined),
facets:
response.aggregations === undefined
? []
: parseAggregations(response.aggregations as Record<AggregateName, AggregationsMultiTermsBucket>),
pagination: {
count: response.hits.hits.length,
offset: typeof parameters.from === 'number' ? parameters.from : 0,
total:
typeof response.hits.total === 'number' ? response.hits.total : response.hits.total?.value ?? 0,
},
stats: {
time: response.took,
},
};
}
async geo(): Promise<SupplementaryGeoJSON> {
const searchResponse = await this.client.search<Extract<SCThings, {geo: unknown}>>({
body: {
query: {
exists: {
field: 'geo',
},
},
},
from: 0,
allow_no_indices: true,
index: ACTIVE_INDICES_ALIAS,
size: 1,
});
return {
type: 'FeatureCollection',
features: searchResponse.hits.hits
.map(thing => {
return thing._source?.geo
? ({
id: Number(thing._source.identifiers?.['OSM']) || undefined,
type: 'Feature',
geometry: thing._source.geo.polygon ?? thing._source.geo.point,
properties: {
name: thing._source.name,
sameAs: thing._source.sameAs,
image: thing._source.image,
alternateNames: thing._source.alternateNames,
description: thing._source.description,
identifiers: thing._source.identifiers,
categories: thing._source.categories,
categorySpecificValues: thing._source.categorySpecificValues,
openingHours: thing._source.openingHours,
address: thing._source.address,
uid: thing._source.uid,
type: thing._source.type,
},
} satisfies Feature<Polygon | Point, SupplementaryGeoJSONThing>)
: undefined;
})
.filter(noUndefined),
};
}
}
@@ -0,0 +1,147 @@
/*
* Copyright (C) 2019 StApps
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {Client} from '@elastic/elasticsearch';
import {SearchRequest} from '@elastic/elasticsearch/lib/api/types.js';
import {
SCMonitoringConfiguration,
SCMonitoringLogAction,
SCMonitoringMailAction,
SCMonitoringMaximumLengthCondition,
SCMonitoringMinimumLengthCondition,
SCThings,
} from '@openstapps/core';
import {Logger} from '@openstapps/logger';
import cron from 'node-cron';
import {MailQueue} from '../../notification/mail-queue.js';
/**
* Check if the given condition fails on the given number of results and the condition
* @param condition condition
* @param total number of results
*/
function conditionFails(
condition: SCMonitoringMaximumLengthCondition | SCMonitoringMinimumLengthCondition,
total: number,
) {
if (condition.type === 'MaximumLength') {
return maxConditionFails(condition.length, total);
}
return minConditionFails(condition.length, total);
}
/**
* Check if the min condition fails
* @param minimumLength Minimal length allowed
* @param total Number of results
*/
function minConditionFails(minimumLength: number, total: number) {
return minimumLength > total;
}
/**
* Check if the max condition fails
* @param maximumLength Maximal length allowed
* @param total Number of results
*/
function maxConditionFails(maximumLength: number, total: number) {
return maximumLength < total;
}
/**
* Run all the given actions
* @param actions actions to perform
* @param watcherName name of watcher that wants to perform them
* @param triggerName name of trigger that triggered the watcher
* @param total total number of results of the query
* @param mailQueue mailQueue to execute mail actions
*/
function runActions(
actions: Array<SCMonitoringLogAction | SCMonitoringMailAction>,
watcherName: string,
triggerName: string,
total: number,
mailQueue: MailQueue,
) {
for (const action of actions) {
void (action.type === 'log'
? Logger.error(
action.prefix,
`Watcher '${watcherName}' failed. Watcher was triggered by '${triggerName}'`,
`Found ${total} hits instead`,
action.message,
)
: mailQueue.push({
subject: action.subject,
text: `Watcher '${watcherName}' failed. Watcher was triggered by '${triggerName}'
${action.message} Found ${total} hits instead`,
to: action.recipients,
}));
}
}
/**
* Set up the triggers for the configured watchers
* @param monitoringConfig configuration of the monitoring
* @param esClient elasticsearch client
* @param mailQueue mailQueue for mail actions
*/
export async function setUp(
monitoringConfig: SCMonitoringConfiguration,
esClient: Client,
mailQueue: MailQueue,
) {
// set up Watches
for (const watcher of monitoringConfig.watchers) {
// make a schedule for each trigger
for (const trigger of watcher.triggers) {
switch (trigger.executionTime) {
case 'hourly': {
trigger.executionTime = '5 * * * *';
break;
}
case 'daily': {
trigger.executionTime = '5 0 * * *';
break;
}
case 'weekly': {
trigger.executionTime = '5 0 * * 0';
break;
}
case 'monthly': {
trigger.executionTime = '5 0 1 * *';
}
}
cron.schedule(trigger.executionTime, async () => {
// execute watch (search->condition->action)
const result = await esClient.search<SCThings>(watcher.query as SearchRequest);
// check conditions
const total =
typeof result.hits.total === 'number' ? result.hits.total : result.hits.total?.value ?? -1;
for (const condition of watcher.conditions) {
if (conditionFails(condition, total)) {
runActions(watcher.actions, watcher.name, trigger.name, total, mailQueue);
}
}
});
}
}
Logger.log(`Scheduled ${monitoringConfig.watchers.length} watches`);
}
@@ -0,0 +1,74 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslFunctionScoreContainer} from '@elastic/elasticsearch/lib/api/types.js';
import {SCBackendConfigurationSearchBoostingType} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
/**
* Creates boost functions for all type boost configurations
* @param boostingTypes Array of type boosting configurations
*/
export function buildFunctionsForBoostingTypes(
boostingTypes: SCBackendConfigurationSearchBoostingType[],
): QueryDslFunctionScoreContainer[] {
const functions: QueryDslFunctionScoreContainer[] = [];
for (const boostingForOneSCType of boostingTypes) {
const typeFilter: QueryDslSpecificQueryContainer<'term'> = {
term: {
type: boostingForOneSCType.type,
},
};
functions.push({
filter: typeFilter,
weight: boostingForOneSCType.factor,
});
if (boostingForOneSCType.fields !== undefined) {
const fields = boostingForOneSCType.fields;
for (const fieldName in boostingForOneSCType.fields) {
if (boostingForOneSCType.fields.hasOwnProperty(fieldName)) {
const boostingForOneField = fields[fieldName];
for (const value in boostingForOneField) {
if (boostingForOneField.hasOwnProperty(value)) {
const factor = boostingForOneField[value];
// build term filter
const termFilter: QueryDslSpecificQueryContainer<'term'> = {
term: {},
};
termFilter.term[`${fieldName}.raw`] = value;
functions.push({
filter: {
bool: {
must: [typeFilter, termFilter],
should: [],
},
},
weight: factor,
});
}
}
}
}
}
}
return functions;
}
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslFunctionScoreContainer} from '@elastic/elasticsearch/lib/api/types.js';
import {SCBackendConfigurationSearchBoostingContext, SCSearchContext} from '@openstapps/core';
import {buildFunctionsForBoostingTypes} from './boost-functions.js';
/**
* Builds scoring functions from boosting config
* @param boostings Backend boosting configuration for contexts and types
* @param context The context of the app from where the search was initiated
*/
export function buildScoringFunctions(
boostings: SCBackendConfigurationSearchBoostingContext,
context: SCSearchContext | undefined,
): QueryDslFunctionScoreContainer[] {
// default context
let functions = buildFunctionsForBoostingTypes(boostings['default' as SCSearchContext]);
if (context !== undefined && context !== 'default') {
// specific context provided, extend default context with additional boosts
functions = [...functions, ...buildFunctionsForBoostingTypes(boostings[context])];
}
return functions;
}
@@ -0,0 +1,53 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslQueryContainer} from '@elastic/elasticsearch/lib/api/types.js';
import {SCSearchFilter} from '@openstapps/core';
import {buildBooleanFilter} from './filters/boolean.js';
import {buildAvailabilityFilter} from './filters/availability.js';
import {buildDateRangeFilter} from './filters/date-range.js';
import {buildDistanceFilter} from './filters/distance.js';
import {buildGeoFilter} from './filters/geo.js';
import {buildNumericRangeFilter} from './filters/numeric-range.js';
import {buildValueFilter} from './filters/value.js';
/**
* Converts Array of Filters to elasticsearch query-syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildFilter(filter: SCSearchFilter): QueryDslQueryContainer {
switch (filter.type) {
case 'value': {
return buildValueFilter(filter);
}
case 'availability': {
return buildAvailabilityFilter(filter);
}
case 'distance': {
return buildDistanceFilter(filter);
}
case 'boolean': {
return buildBooleanFilter(filter);
}
case 'numeric range': {
return buildNumericRangeFilter(filter);
}
case 'date range': {
return buildDateRangeFilter(filter);
}
case 'geo': {
return buildGeoFilter(filter);
}
}
}
@@ -0,0 +1,37 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {SCSearchAvailabilityFilter} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
/**
* Converts an availability filter to elasticsearch syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildAvailabilityFilter(
filter: SCSearchAvailabilityFilter,
): QueryDslSpecificQueryContainer<'range'> {
const scope = filter.arguments.scope?.charAt(0) ?? 's';
const time = filter.arguments.time === undefined ? 'now' : `${filter.arguments.time}||`;
return {
range: {
[filter.arguments.field]: {
gte: `${time}/${scope}`,
lt: `${time}+1${scope}/${scope}`,
relation: 'intersects',
},
},
};
}
@@ -0,0 +1,48 @@
/*
* Copyright (C) 2022 StApps
* This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation, version 3.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <https://www.gnu.org/licenses/>.
*/
import {QueryDslBoolQuery} from '@elastic/elasticsearch/lib/api/types.js';
import {SCSearchBooleanFilter} from '@openstapps/core';
import {QueryDslSpecificQueryContainer} from '../../types/util.js';
import {buildFilter} from '../filter.js';
/**
* Converts a boolean filter to elasticsearch syntax
* @param filter A search filter for the retrieval of the data
*/
export function buildBooleanFilter(filter: SCSearchBooleanFilter): QueryDslSpecificQueryContainer<'bool'> {
const result: QueryDslBoolQuery = {
minimum_should_match: 0,
must: [],
must_not: [],
should: [],
};
if (filter.arguments.operation === 'and') {
result.must = filter.arguments.filters.map(it => buildFilter(it));
}
if (filter.arguments.operation === 'or') {
result.should = filter.arguments.filters.map(it => buildFilter(it));
result.minimum_should_match = 1;
}
if (filter.arguments.operation === 'not') {
result.must_not = filter.arguments.filters.map(it => buildFilter(it));
}
return {
bool: result,
};
}
Loaded 100 of 1491 files, more files were not shown because too many files have changed in this diff. Show more