{"id":23859200,"url":"https://github.com/openconext/openconext-teams-ng","last_synced_at":"2026-06-17T18:04:51.424Z","repository":{"id":18651452,"uuid":"84843119","full_name":"OpenConext/OpenConext-Teams-NG","owner":"OpenConext","description":"OpenConext-Teams-NG","archived":false,"fork":false,"pushed_at":"2024-12-10T19:14:50.000Z","size":5456,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-01-03T03:34:59.306Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenConext.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-03-13T15:31:27.000Z","updated_at":"2024-12-10T19:14:54.000Z","dependencies_parsed_at":"2024-05-02T02:06:52.474Z","dependency_job_id":"2286174e-e02d-412a-a2f8-3eb9b33296e5","html_url":"https://github.com/OpenConext/OpenConext-Teams-NG","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenConext%2FOpenConext-Teams-NG","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenConext%2FOpenConext-Teams-NG/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenConext%2FOpenConext-Teams-NG/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenConext%2FOpenConext-Teams-NG/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenConext","download_url":"https://codeload.github.com/OpenConext/OpenConext-Teams-NG/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240163548,"owners_count":19758028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-03T03:32:45.363Z","updated_at":"2026-06-17T18:04:51.417Z","avatar_url":"https://github.com/OpenConext.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\n# OpenConext-Teams-NG\n\n## Project is deprecated\n\nThe functionality of OpenConext-Teams has been superseded by OpenConext-Invite. New installations should start there. To migrate to OpenConext Invite, see the section at the bottom of this README.\n\n[![Build Status](https://github.com/OpenConext/OpenConext-Teams-NG/actions/workflows/maven.yml/badge.svg)](https://github.com/OpenConext/OpenConext-Teams-NG/actions/workflows/maven.yml/badge.svg)\n[![codecov.io](https://codecov.io/github/OpenConext/OpenConext-Teams-NG/coverage.svg)](https://codecov.io/github/OpenConext/OpenConext-Teams-NG)\n\n## License\n\nSee the LICENSE file\n\n## Disclaimer\n\nSee the NOTICE file\n\n## System Requirements\n\n- Java 21\n- Maven 3\n- MySQL 8\n- node v14.17.3 (use for example `nvm use` to manage it - latest version of node does not work) \n- yarn (note that later versions break the sass compiler)\n\nIf you use nvm ensure you have the correct npm installed locally in that version\n\n```\ncd ~/.nvm/versions/node/v6.2.2/lib/\nnpm install npm@5.2.0\n```\n\nSee https://stackoverflow.com/questions/9755841/how-can-i-change-the-version-of-npm-using-nvm\n\n## Building and running\n\n[Maven 3](http://maven.apache.org) is needed to build and run this project.\n\nTo build, first setup your local db:\n\nConnect to your local mysql database: `mysql -uroot`\n\nExecute the following:\n\n```sql\nDROP DATABASE IF EXISTS teams_ng;\nCREATE DATABASE teams_ng CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;\n```\n\n### The teams-server\n\nTo run locally:\n\n`mvn spring-boot:run -Dspring-boot.run.jvmArguments=\"-Dspring.profiles.active=dev,test\"`\n\nOr run / debug the [TeamsApplication](teams-server/src/main/java/teams/TeamsApplication.java) and don't forget to set \nthe active profile to dev otherwise the application uses the real VOOT client on the test environment.\n\n\n\n### The teams-gui\n\n    cd teams-gui\n\nInitial setup if you do:\n\n    yarn install\n\nAdd new dependencies to `devDependencies`:\n\n    yarn add ${dep} --dev\n\nTo build:\n\n    ./build.sh\n\nTo run locally:\n\n    yarn local\n\nBrowse to the [application homepage](http://localhost:8001/).\n\n## Testing\n\nTo run the tests, just install both server and client:\n\n    mvn clean install\n    \nTo run only the JS tests:\n    \n    cd teams-gui\n    yarn test\n    \n## Miscellaneous\n\nIf you add dependencies to the teams-gui with yarn you can see the impact on the production bundle:\n\n    cd teams-gui\n    rm -fr dist \u0026\u0026 yarn webpack-analyze | sed '1,6d' | sed '$d' | webpack-bundle-size-analyzer\n    \n## API\n    \nThe teams application has three API's:\n    \n1. Internal Teams API on `api/teams` for the teams GUI\n2. VOOT API on `api/voot` for the VOOT server app\n3. LifeCycle user management  \n  \nThe first one is secured with shibboleth and CSRF and the second and third one are secured with basic auth. For an example call:\n  \n    curl  -u voot:secret https://teams.demo.openconext.org/api/voot/user/urn:collab:person:example.com:admin/groups  \n    \n## LifeCycle Deprovisioning\n\nTeams has a LifeCycle API to deprovision users. The preview endpoint:\n```\ncurl -u life:secret http://localhost:8080/deprovision/urn:collab:person:surfnet.nl:jdoe | jq \n```\nAnd the actual `Deprovisioning` of the user:\n```\ncurl -X DELETE -u life:secret http://localhost:8080/deprovision/urn:collab:person:surfnet.nl:jdoe | jq\n```\n## Migration to Invite\n\nMigration from Teams to Invite can be done on a per-team basis. A migrated team will keep all its members and will keep the same URN.\nThe `voot` API supports both Teams and Invite, so whether or not a team lives in Teams or Invite, the same URN will be returned for a user so the migration can be done one by one. Because PDP uses this API, PDP rules also do not need to change for a migration to succeeed and consuming SP's that receive the URN will also not see a difference. The only thing that is impacted by migration is the interface in which the members can be managed.\n\nThe only thing that is not carried over in the invite is pending / not yet accepted invitations to become a member of a Team (since the already sent emails will have an obsolete link). You need to re-invite the users from Invite that did not yet accept their invitation from Teams.\n\nIf you are planning migration to Invite, at any point in time you can enable the Teams feature flag to disable the creation of new teams in Teams by users.\n\n### Migration steps\n\nThe migration is in some parts a bit bare-bones. It consists of the folling steps. They are described in more detail below.\n\n1. Enrichment of the data in the Teams database. Teams do not contain much metadata while Invite needs more, most notably application(s) associated with the Invite role.\n1. Migrate the actual team to Invite. After successful transfer is then immediately deleted from Teams as not to create duplications.\n1. Enrichment of the data on the Invite side.\n\n### Enrich Teams database\n\nThe Teams database requires modifications to prepare a team before it can be transferred.\n\n1. Set the correct schacHomeOrganization for each user in the database. This can be done at once (and idempotently repeated) with this query:\n```sql\nUPDATE persons SET schac_home_organization = SUBSTRING_INDEX(SUBSTRING_INDEX(urn,':',4),':',-1) WHERE schac_home_organization IS NULL;\n```\n2. Add (the/one) (Manage) application / service provider that this team is used for, as Invite requires such an association. This also needs to be done in the database and may be customized depending on where you get the knowledge from what a team is for. E.g. is it used in the PDP to limit access, you can look up the application this team limits access to. If it's used as information released via AA / ARP for an SP, etc. Optionally you can also define a landing page.\n\nAn example commandline script that can set this information for a specific SP is: [teams_set_app](teams_set_app).\nBut you may choose to automate this differently.\n\n### Migrate an actual team\n\nThe Teams GUI has functionality to migrate a team to the invite-database. You need to be super-user for this. Search a team and in the menu, press Migrate. The screen will show if the required metadata is present and list which members will be transferred. If you confirm, the team is then present in Invite and dropped from Teams.\n\nThere is also an API endpoint to migrate teams to do this in bulk:\n```\ncurl -u teams:secret -X PUT -H 'Content-Type: application/json' -d '{\"id\":\"35415\"}'  \"http://localhost:8080/api/v1/external/invite-app/migrate\"\n```\n\n### Post-migration steps\n\nAfter migration, the team will show in the Invite application, now called a role.\n\nYou do need to set the organization GUID for a role by editing it or doing this in the database.\n\nFor PDP, nothing needs to change since the voot API will still return the same URL. If you transfer the team URN in an attribute to SP's, you can (at any point after migration) in Manage upgrade the used source from `voot` to `invite` and remove any value filter. The `invite` AA source has knowledge of the SP that is authenticated to and will return only roles that are associated with this SP. Therefore the `invite` AA is a simpler variant to `voot` AA, but otherwise functionally identical.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenconext%2Fopenconext-teams-ng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenconext%2Fopenconext-teams-ng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenconext%2Fopenconext-teams-ng/lists"}