Giter Club home page Giter Club logo

schulcloud-server's Introduction

Schul-Cloud Server

Quality Gate Status Coverage Maintainability Rating

NestJS application

Find the NestJS applications documentation of this repository at GitHub pages. It contains information about

  • setup & preconditions
  • starting the application
  • testing
  • tools setup (VSCode, Git)
  • architecture

Based on NestJS

Feathers application

This is legacy part of the application!

Based on Node.js and Feathers

Application seperation

In order to seperate NestJS and Feathers each application runs in its own express instance. These express instances are then mounted on seperate paths under a common root express instance.

Root-Express-App 
├─ api/v1/       --> Feathers-App
├─ api/v3/       --> NestJS-App

This ensures that each application can run its own middleware stack for authentication, error handling, logging etc.

The mount paths don't have any impact on the routes inside of the applications, e.g. the path /api/v3/news will translate to the inner path /news. That means that in terms of route matching each child application doesn't have to take any measures regarding the path prefix. It simply works as it was mounted to /.

However note that when URLs are generated inside a child application the path prefix has to be prepended. Only then the generated URLs match the appropriate child application, e.g. the path /news has to be provided as the external path /api/v3/news.

It is possible (not very likely) that the server api is called with URLs that use the old schema without a path prefix. As a safety net for that we additionally mount the Feathers application as before under the paths:

  • / - for internal calls
  • /api - for external calls

When these paths are accessed an error with context [DEPRECATED-PATH] is logged.

Setup

The whole application setup with all dependencies can be found in System Architecture. It contains information about how different application components are connected to each other.

Debugger Configuration in Visual Studio Code

For more details how to set up Visual Studio Code, read this document.

How to name your branch and create a pull request (PR)

  1. Take the Ticket Number from JIRA (ticketsystem.dbildungscloud.de), e.g. SC-999
  2. Name the feature branch beginning with Ticket Number, all words separated by dash "-", e.g. feature/SC-999-fantasy-problem
  3. Create a PR on branch develop containing the Ticket Number in PR title
  4. Keep the WIP label as long as this PR is in development, complete PR checklist (is automatically added), keep or increase code test coverage, and pass all tests before you remove the WIP label. Reviewers will be added automatically.

Committing

Default branch: main

  1. Go into project folder
  2. Checkout to develop branch (or clone for the first time)
  3. Run git pull
  4. Create a branch for your new feature named feature/BC-Ticket-ID-Description
  5. Run the tests (see above)
  6. Commit with a meaningful commit message(!) even at 4 a.m. and not stuff like "dfsdfsf"
  7. Start a pull request (see above) to branch develop to merge your changes

schulcloud-server's People

Contributors

adrianjost avatar alriese avatar blackghosthd avatar ceev avatar cordlesswool avatar danielrieckhof avatar dependabot-preview[bot] avatar dependabot[bot] avatar dominikglandorf avatar j-jmnz avatar janrenz avatar janusztaterka avatar langleu avatar malcm avatar martinschuhmacher avatar marvinoehlerkingcap avatar mastercarl avatar maxklenk avatar mergify[bot] avatar metauriel avatar mwolowyk-cap avatar nicoknoll avatar ojself avatar parnswir avatar pkleybolte avatar schurigh avatar sevenwaysdp avatar tofixx avatar uidp avatar virgilchiriac avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

schulcloud-server's Issues

An in-range update of aws-sdk is breaking the build 🚨

The dependency aws-sdk was updated from 2.521.0 to 2.522.0.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

aws-sdk is a direct dependency of this project, and it is very likely causing it to break. If other packages depend on yours, this update is probably also breaking those in turn.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Release Notes for Release v2.522.0

See changelog for more information.

Commits

The new version differs by 1 commits.

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Improvements on files and fileStorage API design

Hi schulcloud-server team!

There are some inconsistencies in the files and file storage API that makes difficult and tedious to fetch shared files for a user.

To fetch user and course file, the endpoint is /fileStorage followed by the parameters users/{user_id} for specific user and courses/{course_id} for fetching courses, which is all fine.
As for the shared files, we need to request all files from the /files endpoint, then filter them with context = "geteilte Datei".
This process is totally inconsistent for a seemingly similar operation, we need to query different endpoint, and also fragile as we need to filter with a specific value of context, which could change over time.

A solution would be to query the /fileStorage endpoint 3 simple parameter:

  • user or me to get the specific user directory (you know which user it is based on the token). This currently done via `users/{user_id}'
  • courses to get a directory list of all the user's courses. This is currently done via 'course/{course_id}' and return only the given course's directory.
  • shared to get all the shared file.

Additionally, simply querying /fileStorage without any parameter would the each of the 3 proposed directory.

Any modification (POST, DELETE, UPDATE) to the Shared directory could then return an 4XX(403?) error, preventing any modification if necessary.

Thank you!

An in-range update of codecov is breaking the build 🚨

The devDependency codecov was updated from 3.5.0 to 3.6.0.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

codecov is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Commits

The new version differs by 11 commits.

  • 2ed978c v3.6.0
  • 024cced Merge pull request #135 from iansu/codebuild
  • 24a0a76 Merge branch 'master' into codebuild
  • f628c33 Merge pull request #145 from fabiendem/semaphore-compat
  • 0c57093 Rename semaphore v2 clearly in tests
  • 5a5c489 Add retro-compatibility for Semaphore 1.x and maintain support for 2.x
  • a45a9b5 Revert "Updates Semaphore CI Service for 2.0 (#132)"
  • e2f6b81 Test improvements
  • 3faacd4 Add support for AWS CodeBuild
  • 8371836 Create CODE_OF_CONDUCT.md (#133)
  • 6167aa8 Updates Semaphore CI Service for 2.0 (#132)

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Make source code version available

After #117 is merged, there should be a way to make the source code available.
This could be a redirect from /source to a location/archive/commit with the current source code.

Map from usertoken to related user UUID

As the notification service, we need to get the user's UUID from a user token. The response could be similar to one of the objects shown in #36.

Request: Usertoken

Response: Verification and UUID of related user

Action required: Greenkeeper could not be activated 🚨

🚨 You need to enable Continuous Integration on Greenkeeper branches of this repository. 🚨

To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.

Since we didn’t receive a CI status on the greenkeeper/initial branch, it’s possible that you don’t have CI set up yet. We recommend using Travis CI, but Greenkeeper will work with every other CI service as well.

If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/.

Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please click the 'fix repo' button on account.greenkeeper.io.

Broken/Bad documentation

Creating a local test setup is pretty hard. I'm trying to be able to test under real conditions, however the totally broken swagger documentation makes things way harder than they should be.
For example, trying to use the schools/{id} route with DELETE results in 405: Provider 'rest' can not call 'remove'. (disallow). Moreover, the swagger documentation itself also throws errors like:

 
Resolver error at paths./schools.post.responses.201.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools does not exist in document
Resolver error at paths./schools.post.requestBody.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools does not exist in document
Resolver error at paths./schools/{_id}.put.responses.200.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools does not exist in document
Resolver error at paths./schools/{_id}.put.requestBody.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools does not exist in document
Resolver error at paths./schools.get.parameters.3.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools does not exist in document
Resolver error at paths./schools.get.responses.200.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools_list does not exist in document
Resolver error at paths./registrationSchool/{id}.get.responses.200.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/registrationSchool does not exist in document
Resolver error at paths./schools/{schoolId}/maintenance.get.parameters.4.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/:schoolId does not exist in document
Resolver error at paths./schools/{schoolId}/maintenance.get.responses.200.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/:schoolId_list does not exist in document
Resolver error at paths./schools/{_id}.patch.responses.200.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools does not exist in document
Resolver error at paths./schools/{_id}.patch.requestBody.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools does not exist in document
Resolver error at paths./schools/{_id}.delete.responses.200.content.application/json.schema.$ref
Could not resolve reference: Could not resolve pointer: /components/schemas/schools does not exist in document

This all in all makes it hard to get an instance running.
Also, how does one get started when the database is completly empty since then there is no way to actually create a school since you can't access the jwt token.

Travis CI "deploy" job fails for PRs from forks

It looks a bit like the "deploy" job on Travis CI fails for PRs made from forks of this project.

The error seems to always be the same:

$ openssl aes-256-cbc -K $encrypted_2709882c490b_key -iv $encrypted_2709882c490b_iv -in travis_rsa.enc -out travis_rsa -d

iv undefined

The command "openssl aes-256-cbc -K $encrypted_2709882c490b_key -iv $encrypted_2709882c490b_iv -in travis_rsa.enc -out travis_rsa -d" failed and exited with 1 during .

https://travis-ci.com/github/schul-cloud/schulcloud-server/jobs/321310691#L208-L210

It appears the variables referenced in the .travis.yml and deploy.sh are not defined. These sections in the Travis CI documentation might be relevant?

Defining encrypted variables in .travis.yml

Encrypted environment variables are not available to pull requests from forks due to the security risk of exposing such information to unknown code.

https://docs.travis-ci.com/user/environment-variables#defining-encrypted-variables-in-travisyml

Defining Variables in Repository Settings

By default, the value of these new environment variables is hidden from the export line in the logs. This corresponds to the behavior of encrypted variables in your .travis.yml. The variables are stored encrypted in our systems, and get decrypted when the build script is generated.

https://docs.travis-ci.com/user/environment-variables#defining-variables-in-repository-settings

I am not sure how to best tackle this issue and what the "mode of working" is with regard to contributions from forks, but let me know if I can help troubleshoot. ✌️

An in-range update of csv-parse is breaking the build 🚨

The dependency csv-parse was updated from 4.5.0 to 4.6.0.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

csv-parse is a direct dependency of this project, and it is very likely causing it to break. If other packages depend on yours, this update is probably also breaking those in turn.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Commits

The new version differs by 11 commits.

  • 007adfb Bump to version 4.6.0
  • 5f77c58 skip_lines_with_empty_values: handle non string value
  • 886d45b skip_lines_with_empty_values: handle non string value
  • 06afdb1 assert_error: default to deep equal assertion
  • 2dd8938 assert_error: test boolean
  • 0b21b68 assert_error: non exhaustive by default
  • 3dfe906 Update index.js
  • f39c484 field.toString().trim()
  • e887eef errors: expose INVALID_OPENING_QUOTE
  • 3c8e1f3 tests: new error assertion framework
  • 94429af buffer: serialize to json as string

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Map from usertoken to related UUIDs

As the calendar service we need to get all scopes belonging to a user (represented by UUIDs) to find all his appointments.

Request: Usertoken

Response: UUIDs with tags (after basic verification). The format of the JSON-response could be:

[
  {
    id: '550e8400-e29b-11d4-a716-446655440000',
    name: 'Max Mustermann',
    scope: 5,
    canRead: true,
    canWrite: true,
    ...
  }, {
    id: '550e8400-e29b-11d4-a716-446655440001',
    name: 'HPI',
    scope: 1,
    canRead: true,
    canWrite: false,
    ...
  },
  ...
]

The format of scope (Integer, String, ...) is not important for us but should be fix and documented.

An in-range update of @feathersjs/authentication is breaking the build 🚨

The dependency @feathersjs/authentication was updated from 4.3.5 to 4.3.7.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

@feathersjs/authentication is a direct dependency of this project, and it is very likely causing it to break. If other packages depend on yours, this update is probably also breaking those in turn.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Commits

The new version differs by 10 commits.

  • be129c7 v4.3.7
  • 1a624ef chore: Update all dependencies (#1618)
  • 38cf8c9 fix: Typings for express request and response properties (#1609)
  • baad6a2 fix: improve Service and AdapterService types (#1567)
  • d7f5107 fix: Improve authentication client default storage initialization (#1613)
  • 1c6c374 fix: make __hooks writable and configurable (#1520)
  • 6a56056 chore: Update version and changelog
  • f67294b v4.3.6
  • f1a781f fix: Check query for NaN (#1607)
  • 4bbc0d7 chore: Update version and changelog

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Db seed fails

Log from docker-compose up:
schulcloud-server-mongodb_1 | about to fork child process, waiting until server is ready for connections. schulcloud-server-mongodb_1 | forked process: 21 schulcloud-server-mongodb-feed_1 | /usr/local/bin/docker-entrypoint.sh: /app/backup.sh: /bin/bash^M: bad interpreter: No such file or directory schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.261+0000 I CONTROL [main] ***** SERVER RESTARTED ***** schulcloud-server-mongodb-feed_1 | /usr/local/bin/docker-entrypoint.sh: line 226: /app/backup.sh: Success schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] MongoDB starting : pid=21 port=27017 dbpath=/data/db 64-bit host=69cb6d78e659 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] db version v3.4.3 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] git version: f07437fb5a6cca07c10bafa78365456eb1d6d5e1 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t 3 May 2016 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] allocator: tcmalloc schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] modules: none schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] build environment: schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] distmod: debian81 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] distarch: x86_64 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] target_arch: x86_64 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.268+0000 I CONTROL [initandlisten] options: { net: { bindIp: "127.0.0.1", port: 27017, ssl: { mode: "disabled" } }, processManagement: { fork: true, pidFilePath: "/tmp/tmp.5zSv726yLZ" }, systemLog: { destination: "file", logAppend: true, path: "/proc/1/fd/1" } } schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.272+0000 I STORAGE [initandlisten] schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.272+0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.272+0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.272+0000 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=478M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.470+0000 I CONTROL [initandlisten] schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.470+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.470+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.470+0000 I CONTROL [initandlisten] schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.565+0000 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data' schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.630+0000 I INDEX [initandlisten] build index on: admin.system.version properties: { v: 2, key: { version: 1 }, name: "incompatible_with_version_32", ns: "admin.system.version" } schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.630+0000 I INDEX [initandlisten] building index using bulk method; build may temporarily use up to 500 megabytes of RAM schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.636+0000 I INDEX [initandlisten] build index done. scanned 0 total records. 0 secs schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.637+0000 I COMMAND [initandlisten] setting featureCompatibilityVersion to 3.4 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.638+0000 I NETWORK [thread1] waiting for connections on port 27017 schulcloud-server-mongodb_1 | child process started successfully, parent exiting schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.940+0000 I NETWORK [thread1] connection accepted from 127.0.0.1:44070 #1 (1 connection now open) schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.941+0000 I NETWORK [conn1] received client metadata from 127.0.0.1:44070 conn1: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "3.4.3" }, os: { type: "Linux", name: "PRETTY_NAME="Debian GNU/Linux 8 (jessie)"", architecture: "x86_64", version: "Kernel 4.9.49-moby" } } schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.952+0000 I - [conn1] end connection 127.0.0.1:44070 (1 connection now open) schulcloud-server-mongodb_1 | schulcloud-server-mongodb_1 | /usr/local/bin/docker-entrypoint.sh: ignoring /docker-entrypoint-initdb.d/* schulcloud-server-mongodb_1 | schulcloud-server-mongodb_1 | killing process with pid: 21 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.971+0000 I CONTROL [signalProcessingThread] got signal 15 (Terminated), will terminate after current cmd ends schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.971+0000 I NETWORK [signalProcessingThread] shutdown: going to close listening sockets... schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.971+0000 I NETWORK [signalProcessingThread] closing listening socket: 7 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.971+0000 I NETWORK [signalProcessingThread] closing listening socket: 8 schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.971+0000 I NETWORK [signalProcessingThread] removing socket file: /tmp/mongodb-27017.sock schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.971+0000 I NETWORK [signalProcessingThread] shutdown: going to flush diaglog... schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.971+0000 I FTDC [signalProcessingThread] Shutting down full-time diagnostic data capture schulcloud-server-mongodb_1 | 2017-11-21T13:42:11.971+0000 I STORAGE [signalProcessingThread] WiredTigerKVEngine shutting down schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.130+0000 I STORAGE [signalProcessingThread] shutdown: removing fs lock... schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.131+0000 I CONTROL [signalProcessingThread] now exiting schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.131+0000 I CONTROL [initandlisten] shutting down with code:0 schulcloudserver_schulcloud-server-mongodb-feed_1 exited with code 1 schulcloud-server-mongodb_1 | schulcloud-server-mongodb_1 | MongoDB init process complete; ready for start up. schulcloud-server-mongodb_1 | schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=69cb6d78e659 schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] db version v3.4.3 schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] git version: f07437fb5a6cca07c10bafa78365456eb1d6d5e1 schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.1t 3 May 2016 schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] allocator: tcmalloc schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] modules: none schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] build environment: schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] distmod: debian81 schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] distarch: x86_64 schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] target_arch: x86_64 schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.991+0000 I CONTROL [initandlisten] options: {} schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.996+0000 I - [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'. schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.996+0000 I STORAGE [initandlisten] schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.997+0000 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.997+0000 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem schulcloud-server-mongodb_1 | 2017-11-21T13:42:12.997+0000 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=478M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0), schulcloud-server_1 | npm info it worked if it ends with ok schulcloud-server_1 | npm info using [email protected] schulcloud-server_1 | npm info using [email protected] schulcloud-server_1 | npm info lifecycle [email protected]~prestart: [email protected] schulcloud-server_1 | npm info lifecycle [email protected]~start: [email protected] schulcloud-server_1 | schulcloud-server_1 | > [email protected] start /app schulcloud-server_1 | > node src/ schulcloud-server_1 | schulcloud-server-mongodb_1 | 2017-11-21T13:42:13.681+0000 I CONTROL [initandlisten] schulcloud-server-mongodb_1 | 2017-11-21T13:42:13.681+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database. schulcloud-server-mongodb_1 | 2017-11-21T13:42:13.681+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. schulcloud-server-mongodb_1 | 2017-11-21T13:42:13.681+0000 I CONTROL [initandlisten] schulcloud-server-mongodb_1 | 2017-11-21T13:42:13.683+0000 I FTDC [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data' schulcloud-server-mongodb_1 | 2017-11-21T13:42:13.684+0000 I NETWORK [thread1] waiting for connections on port 27017 schulcloud-server_1 | warn: The AWS config couldn't be read schulcloud-server_1 | [Tue Nov 21 2017 13:42:20] [LOG] Mongoose option.lean is false. Use hook.results.toObject() to convert the results to JS objects schulcloud-server_1 | [Tue Nov 21 2017 13:42:20] [LOG] Mongoose option.lean is false. Use hook.results.toObject() to convert the results to JS objects schulcloud-server_1 | [Tue Nov 21 2017 13:42:20] [LOG] Mongoose option.lean is false. Use hook.results.toObject() to convert the results to JS objects schulcloud-server_1 | [Tue Nov 21 2017 13:42:20] [LOG] Mongoose option.lean is false. Use hook.results.toObject() to convert the results to JS objects schulcloud-server_1 | [Tue Nov 21 2017 13:42:20] [LOG] Mongoose option.lean is false. Use hook.results.toObject() to convert the results to JS objects schulcloud-server_1 | [Tue Nov 21 2017 13:42:20] [ERROR] (node:15) DeprecationWarning: open()is deprecated in mongoose >= 4.11.0, useopenUri()instead, or set theuseMongoClientoption if usingconnect()orcreateConnection(). See http://mongoosejs.com/docs/connections.html#use-mongo-client schulcloud-server_1 | [Tue Nov 21 2017 13:42:20] [LOG] info: Schul-Cloud application started on http://localhost:3030 schulcloud-server-mongodb_1 | 2017-11-21T13:42:20.859+0000 I NETWORK [thread1] connection accepted from 172.18.0.4:36046 #1 (1 connection now open) schulcloud-server-mongodb_1 | 2017-11-21T13:42:20.875+0000 I NETWORK [conn1] received client metadata from 172.18.0.4:36046 conn1: { driver: { name: "nodejs", version: "2.2.33" }, os: { type: "Linux", name: "linux", architecture: "x64", version: "4.9.49-moby" }, platform: "Node.js v6.10.2, LE, mongodb-core: 2.1.17" } schulcloud-server-mongodb_1 | 2017-11-21T13:42:20.916+0000 I NETWORK [thread1] connection accepted from 172.18.0.4:36048 #2 (2 connections now open) schulcloud-server-mongodb_1 | 2017-11-21T13:42:20.925+0000 I NETWORK [thread1] connection accepted from 172.18.0.4:36050 #3 (3 connections now open) schulcloud-server-mongodb_1 | 2017-11-21T13:42:20.965+0000 I INDEX [conn1] build index on: schulcloud.files properties: { v: 2, unique: true, key: { key: 1 }, name: "key_1", ns: "schulcloud.files", background: true } schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.009+0000 I INDEX [conn2] build index on: schulcloud.lessons properties: { v: 2, unique: true, key: { shareToken: 1 }, name: "shareToken_1", ns: "schulcloud.lessons", background: true } schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.037+0000 I INDEX [conn3] build index on: schulcloud.directories properties: { v: 2, unique: true, key: { key: 1 }, name: "key_1", ns: "schulcloud.directories", background: true } schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.037+0000 I INDEX [conn3] build index done. scanned 0 total records. 0 secs schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.037+0000 I INDEX [conn2] build index done. scanned 0 total records. 0 secs schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.037+0000 I INDEX [conn1] build index done. scanned 0 total records. 0 secs schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.037+0000 I COMMAND [conn3] command schulcloud.$cmd command: createIndexes { createIndexes: "directories", indexes: [ { name: "key_1", key: { key: 1 }, unique: true, background: true } ], writeConcern: { w: 1 } } numYields:0 reslen:113 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { w: 1, W: 2 }, acquireWaitCount: { W: 2 }, timeAcquiringMicros: { W: 82599 } }, Collection: { acquireCount: { w: 1 } } } protocol:op_query 110ms schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.037+0000 I COMMAND [conn2] command schulcloud.$cmd command: createIndexes { createIndexes: "lessons", indexes: [ { name: "shareToken_1", key: { shareToken: 1 }, unique: true, background: true } ], writeConcern: { w: 1 } } numYields:0 reslen:113 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { w: 1, W: 2 }, acquireWaitCount: { w: 1, W: 2 }, timeAcquiringMicros: { w: 27918, W: 38834 } }, Collection: { acquireCount: { w: 1 } } } protocol:op_query 110ms schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.037+0000 I COMMAND [conn1] command schulcloud.$cmd command: createIndexes { createIndexes: "files", indexes: [ { name: "key_1", key: { key: 1 }, unique: true, background: true } ], writeConcern: { w: 1 } } numYields:0 reslen:113 locks:{ Global: { acquireCount: { r: 1, w: 1 } }, Database: { acquireCount: { w: 1, W: 2 }, acquireWaitCount: { w: 1, W: 1 }, timeAcquiringMicros: { w: 70987, W: 257 } }, Collection: { acquireCount: { w: 1 } } } protocol:op_query 111ms schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.061+0000 I INDEX [conn2] build index on: schulcloud.files properties: { v: 2, key: { _fts: "text", _ftsx: 1 }, name: "name_text", ns: "schulcloud.files", background: true, weights: { name: 1 }, default_language: "english", language_override: "language", textIndexVersion: 3 } schulcloud-server-mongodb_1 | 2017-11-21T13:42:21.061+0000 I INDEX [conn2] build index done. scanned 0 total records. 0 secs

Blessed MongoDB version?

In the setup instructions, a user is asked to install MongoDB. Unfortunately, the latest stable version does not work with the project (at least on a Mac, the 4.2-server kept shutting down during the tests, and on the default legacy client load).

In the instructions, there is an oblique reference to using 3.6 in one of the paths mentions. But the CI used 4.0.

After a downgrade to MongoDB 4.0, the legacy client (and nuxt) could be started. Maybe mention that in the setup.

An in-range update of aws-sdk is breaking the build 🚨

The dependency aws-sdk was updated from 2.529.0 to 2.530.0.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

aws-sdk is a direct dependency of this project, and it is very likely causing it to break. If other packages depend on yours, this update is probably also breaking those in turn.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Release Notes for Release v2.530.0

See changelog for more information.

Commits

The new version differs by 2 commits.

  • c9ac802 Updates SDK to v2.530.0
  • 22e5db2 fix: declare config var to avoid unintended global (#2843)

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Capitalize name with dashes fails

https://github.com/schul-cloud/schulcloud-server/blob/bb07a8656e28bbdbe9a7e3cd0d6bce3c38879ca5/src/services/account/helper.js#L19

For a given name like "hans-joachim" only the first part is capitalized to 'Hans-joachim'.
Using a regex can solve this issue

const capitalizeFirstLetter = (string) => {
	return string.charAt(0).toUpperCase() + string.slice(1);
};
// bad
'hans-friedrich'.toLowerCase().split(' ').map(capitalizeFirstLetter).join(' ')
"Hans-friedrich"

// good 
'hans friedrich'.toLowerCase().split(/([-\s])/).map(capitalizeFirstLetter).join('')
"Hans Friedrich"
'hans-friedrich'.toLowerCase().split(/([-\s])/).map(capitalizeFirstLetter).join('')
"Hans-Friedrich"

Allow login with OpenID

OpenID is a standardized login protocol. Implementing this in the service allows people using OpenHPI to log into Schul-Cloud and authenticate. The password does not need to be stored in the server but is stored in the OpenID-provider.

Trello

Map from UUID to related user UUID(s)

As the calendar service we need to get all users belonging to a UUID in order to bulk create events (e.g. when accessed through our REST API by a submission system) individually for each user. In addition, the notification service requires this endpoint to notify all users belonging to an event. The response should be similar to the JSON shown in #36.

Request: UUID

Response: If the UUID is a user UUID only the UUID itself, else all user UUIDs belonging to the regarding scope.

Implement NextCloud strategy

Just as the Dropbox API is built on top of Amazon S3, we might use a nextcloud server to handle file management, sharing etc., which in turn might talk to S3

Related: #135
Trello

WebSockets for new releases are too heavy

Currently for every request a webSocket is opened to ask whether there is a new release or not.
Already discussed in the dev-channel.

I would like to leverage the notification with only server-rendering-technologies.
But first, I want to ask for reasons not to do so.

The websocket - webworker can be build as soon it is needed.

An in-range update of email-templates is breaking the build 🚨

The dependency email-templates was updated from 6.0.1 to 6.0.2.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

email-templates is a direct dependency of this project, and it is very likely causing it to break. If other packages depend on yours, this update is probably also breaking those in turn.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Release Notes for v6.0.2
  • feat: added support for lastLocaleField b003237

v6.0.1...v6.0.2

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Action required: Greenkeeper could not be activated 🚨

🚨 You need to enable Continuous Integration on Greenkeeper branches of this repository. 🚨

To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.

Since we didn’t receive a CI status on the greenkeeper/initial branch, it’s possible that you don’t have CI set up yet.
We recommend using:

If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/.

Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please click the 'fix repo' button on account.greenkeeper.io.

FileStorage API: valid response with empty data for malformed parameters

Hi schulcloud-server team!

We found some potential bug in the /fileStorage parameter management.
While requesting for either users or courses, if there are typos in the parameter added additional / would result in a successful request with empty data.

For example with the users parameter:

  • /fileStorage?users={user_id}/ is valid and return the expected data. Note the / at the end of the parameter.
  • /fileStorage?/users={user_id}/ is a valid request, but returns no data. Note the / before users. I would expect this to return an error for malformed parameter.
  • /fileStorage?/users={user_id} is a valid request, but returns no data. Note the absence of / at the end of the parameter. I would expect this request to return the same content as the 1st example, or return an error for malformed parameter.

As a solution, I think the endpoint should do some input validation and return an error for whatever syntax is deemed wrong (I personally prefer the /fileStorage?users={user_id} format ) instead of returning a valid response with empty data.

Thank you!

An in-range update of simple-oauth2 is breaking the build 🚨

The devDependency simple-oauth2 was updated from 2.2.1 to 2.3.0.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

simple-oauth2 is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Commits

The new version differs by 11 commits ahead by 11, behind by 2.

  • 498cb41 Merge branch 'release/2.3.0'
  • 58ed0af [2.3.0] Release simple-oauth2 v2.3.0
  • 358fd30 Merge pull request #243 from lelylan/feature/update-contributing-guidelines
  • 049c945 [update-contributing-guidelines] Update contributing guidelines to work with the project existing tooling
  • 3e1894b Merge pull request #242 from lelylan/feature/update-library-debug
  • eb9e58c [update-library-debug] Upgrade debug dependency to v4
  • 39bcfcc Merge pull request #241 from lelylan/feature/update-ci-node-versions
  • 7f79261 [update-ci-node-versions] Add Node 10 LTS and Node 12 major versions to CI test matrix
  • 0dae0f2 Merge pull request #240 from lelylan/feature/url-integration-tests
  • cf7a82d [url-integration-tests] Add integration tests for url resolution process of token/authorization host and path
  • c7f7e57 [2.2.1] Release library version 2.2.1

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Fehler: Fehler beim Erstellen des Accounts

Hallo,
ich versuche seit einiger zeit immer mal wieder einen Account zu erstellen. Allerdings scheint das nicht wirklich zu funktionieren. Wenn ich es versuche, zeigt es mir oben den Fehler Fehler: Fehler beim Erstellen des Accounts an.
Der Fehler in der Konsole sieht folgendermaßen aus:
/registration/submit:1 Failed to load resource: the server responded with a status of 500 (Internal Server Error)

An in-range update of cross-env is breaking the build 🚨

The dependency cross-env was updated from 6.0.2 to 6.0.3.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

cross-env is a direct dependency of this project, and it is very likely causing it to break. If other packages depend on yours, this update is probably also breaking those in turn.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Release Notes for v6.0.3

6.0.3 (2019-10-02)

Bug Fixes

  • do not compile anything (67f21c3)
Commits

The new version differs by 1 commits.

  • 67f21c3 fix: do not compile anything

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Create OwnCloud-Strategy

According to the Strategy-Pattern in our FileStorage-Service, we need an additional strategy that handles owncloud-file-servers.

Every OwnCloud-Server provides a webdav-interface. We can use this npm-module to connect to this interface.

Tasks:

  • create(), creates a bucket for a school
  • getFiles(), gets a list of files/ directories for a given context
  • deleteFile(), deletes a file
  • generateSignedUrl(), generates a url for uploading/ downloading files
  • createDirectory(), creates a directory
  • deleteDirectory(), deletes a directory

Links:

Payment required


🚨 Reminder! Less than one month left to migrate your repositories over to Snyk before Greenkeeper says goodbye on June 3rd! 💜 🚚💨 💚

Find out how to migrate to Snyk at greenkeeper.io


🚨 You privatised your repo. 🚨

Hello!
You have set your repository to private. From now on Greenkeeper is no longer free. We have disabled your repo for now.
Please enter your payment information at account.greenkeeper.io.
For pricing information, please visit https://greenkeeper.io/#pricing.

Action required: Greenkeeper could not be activated 🚨

🚨 You need to enable Continuous Integration on Greenkeeper branches of this repository. 🚨

To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.

Since we didn’t receive a CI status on the greenkeeper/initial branch, it’s possible that you don’t have CI set up yet. We recommend using Travis CI, but Greenkeeper will work with every other CI service as well.

If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/.

Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please click the 'fix repo' button on account.greenkeeper.io.

An in-range update of aws-sdk is breaking the build 🚨

The dependency aws-sdk was updated from 2.522.0 to 2.523.0.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

aws-sdk is a direct dependency of this project, and it is very likely causing it to break. If other packages depend on yours, this update is probably also breaking those in turn.

Status Details
  • codecov/project: No report found to compare against (Details).
  • Travis CI - Branch: The build failed.

Release Notes for Release v2.523.0

See changelog for more information.

Commits

The new version differs by 1 commits.

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

An in-range update of mocha is breaking the build 🚨

The devDependency mocha was updated from 6.2.0 to 6.2.1.

🚨 View failing branch.

This version is covered by your current version range and after updating it in your project the build failed.

mocha is a devDependency of this project. It might not break your production code or affect downstream projects, but probably breaks your build or test tools, which may prevent deploying or publishing.

Status Details

Commits

The new version differs by 11 commits.

  • ef6c820 Release v6.2.1
  • 9524978 updated CHANGELOG for v6.2.1 [ci skip]
  • dfdb8b3 Update yargs to v13.3.0 (#3986)
  • 18ad1c1 treat '--require esm' as Node option (#3983)
  • fcffd5a Update yargs-unparser to v1.6.0 (#3984)
  • ad4860e Remove extraGlobals() (#3970)
  • b269ad0 Clarify effect of .skip() (#3947)
  • 1e6cf3b Add Matomo to website (#3765)
  • 91b3a54 fix style on mochajs.org (#3886)
  • 0e9d8ad tty.getWindowSize is not a function inside a "worker_threads" worker (#3955)
  • 48da42e Remove jsdoc index.html placeholder from eleventy file structure and fix broken link in jsdoc tutorial (#3966)

See the full diff

FAQ and help

There is a collection of frequently asked questions. If those don’t help, you can always ask the humans behind Greenkeeper.


Your Greenkeeper Bot 🌴

Action required: Greenkeeper could not be activated 🚨

🚨 You need to enable Continuous Integration on Greenkeeper branches of this repository. 🚨

To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.

Since we didn’t receive a CI status on the greenkeeper/initial branch, it’s possible that you don’t have CI set up yet.
We recommend using:

If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/.

Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please click the 'fix repo' button on account.greenkeeper.io.

Better Swagger documentation, and working example request.

Hi schulcloud-server team!

It would be nice if you could improve the API documentation. This would greatly improve the front-end developers productivity, while also reduce the amount of questions targeted at you, allowing you to focus on directly on your next task.
Currently the Swagger documentation is incomplete, lacking all response data structure format, and it is impossible to run any test queries.

Thank you!

Action required: Greenkeeper could not be activated 🚨

🚨 You need to enable Continuous Integration on Greenkeeper branches of this repository. 🚨

To enable Greenkeeper, you need to make sure that a commit status is reported on all branches. This is required by Greenkeeper because it uses your CI build statuses to figure out when to notify you about breaking changes.

Since we didn’t receive a CI status on the greenkeeper/initial branch, it’s possible that you don’t have CI set up yet. We recommend using Travis CI, but Greenkeeper will work with every other CI service as well.

If you have already set up a CI for this repository, you might need to check how it’s configured. Make sure it is set to run on all new branches. If you don’t want it to run on absolutely every branch, you can whitelist branches starting with greenkeeper/.

Once you have installed and configured CI on this repository correctly, you’ll need to re-trigger Greenkeeper’s initial pull request. To do this, please click the 'fix repo' button on account.greenkeeper.io.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.