{"id":20631204,"url":"https://github.com/solidlabresearch/vienna-prototype","last_synced_at":"2026-02-25T13:02:53.272Z","repository":{"id":209619112,"uuid":"724517990","full_name":"SolidLabResearch/Vienna-prototype","owner":"SolidLabResearch","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-04T17:00:20.000Z","size":694,"stargazers_count":3,"open_issues_count":4,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-30T10:25:57.343Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SolidLabResearch.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-11-28T08:41:13.000Z","updated_at":"2023-12-13T14:15:22.000Z","dependencies_parsed_at":"2023-12-19T20:23:40.088Z","dependency_job_id":"ea227243-dabc-4e47-9d5b-08d68dd2f83a","html_url":"https://github.com/SolidLabResearch/Vienna-prototype","commit_stats":null,"previous_names":["jeswr/vienna-dialogue-hacking","solidlabresearch/vienna-prototype"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SolidLabResearch/Vienna-prototype","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FVienna-prototype","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FVienna-prototype/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FVienna-prototype/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FVienna-prototype/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SolidLabResearch","download_url":"https://codeload.github.com/SolidLabResearch/Vienna-prototype/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SolidLabResearch%2FVienna-prototype/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267552095,"owners_count":24105998,"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","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":"2024-11-16T14:11:32.777Z","updated_at":"2025-10-08T14:02:10.029Z","avatar_url":"https://github.com/SolidLabResearch.png","language":"TypeScript","readme":"# Vienna hackathon\n\n## Requirements for running\n\n* Installing the library\n* Creating a `.env` file\n* Using node version 20 (or higher)\n\n\n## UML sequence diagrams\n\nCan be online visualised via [sequencediagram.org](https://sequencediagram.org/) or with the vscode extension [PlantUML](https://plantuml.com/).\n\n### Owner set up a policy\n\n![](../img/owner-set-up-policy.svg)\n\n### Shop gets data (data not signed)\n\n![](../img/shop-get-data-version-not-signing-data.svg)\n\n## Repository organization\n* The `ExternalServices` directory contains third party services that deliver signed data.\n* The `SolidLib` directory contains the library with all functions that a client needs to be Solid-Aware (both admin and non-admin)\n* The `SolidPod` directory contains the Solid server Interfaces and backend components\n* \n## Installing\n```sh\nnpm i\n\n```\n### Environment file\n\nCreate a .env resource with WebID, user email and password with a CSS (supporting client credentials):\n\n```env\nWEB_ID=\"\"\nUSER_NAME=\"\"\nPASSWORD=\"\"\n```\n### Node version\n\n```sh\nnode -v\n# v20.10.0\n```\nIf node is not 20 and you are using nvm you can use following command to fix it\n```\nnvm install 20\nnvm use 20\n```\n\n## Flows \n\nWe have four different flows: \n* [getData](https://raw.githubusercontent.com/SolidLabResearch/Vienna-prototype/main/img/shop-get-data-version-not-signing-data.svg): We can retrieve the birthdate using the app flow.\n* getDataWithTrust: We can retrieve all trusted data using the trusted data app flow.\n* [addPolicy](https://raw.githubusercontent.com/SolidLabResearch/Vienna-prototype/main/img/owner-set-up-policy.svg): Adding a policy to the pod\n* end-to-end: Adding a policy to the pod and then getting the birthdate using the app flow.\n\nTo run the end to end flow, you can use the following command \n\n```sh\nnpm start\n```\n\nIf you want to just run the interfaces stand alone, you can use\n\n```\nnpm run serve\n```\n## Running the app flow\n\n\nWe can retrieve the birthdate using the app flow.\n```\nts-node runAppGetDataFlow.ts\n```\n\nWe can retrieve all trusted data using the trusted data app flow.\n```\nts-node runAppGetDataTrustFlow.ts\n```\n\n## Running the AddPolicy flow\n```\nts-node runAddPolicyFlow.ts\n```\n\n## TODO's\n\n- [ ] Create a lot of different flows (with deliberate ones throwing errors)\n- [ ] Create a list of assumptions at points in the code (e.g. policy matching is string matching because of ...).\nThis could all be starting points of proper research\n- [X] verify agreement\n\n\n## Assumptions made\n\n* Policy subject is not verified, it currently matches on a passed string value\n  * Time constraints, and we have a working IDP eventually when porting to CSS\n* Policy matching on the query string is done with string matching\n  * We are unsure how exactly we should tackle this, so we use a for-now approach\n* Signed data is stored as trusted packages of single triples\n  * This is a limitation of the query approach we use, which requires a single triple request to be made.\n  * On matching, this will retrieve the full package containing said triple, which will give problems if multiple triples are present in that package.\n\n\n### Attendees\n\n* Ruben D\n* Wout Slabbinck\n* Sabrina\n\n### TODO list\n\n- [X] remove README at SolidPod\n- [ ] Describe what is the pod (solidPod directory) and Interface (SolidLib directory)\n- [ ] Refactor job\n  - [ ] Maybe split the calls for the SolidAware Lib (one lib with Add Policy and log entries; another with getData and getDatawithTrust)\n    - [ ] We have a SolidAwareLib to plug in for stores\n    - [ ] We have an admin\n- [ ] Identity interface:\n  - [ ] would be nice for it to be worked out\n    - [ ] add endpoint urls and webid\n- [ ] Agreement should be modelled as RDF (log + authz Interface and solidlib authz modelling)\n- [ ] Logs should be queryable\n  - [ ] But maybe use DataInterface for that -\u003e there is a need for addData\n- [ ] PolicyInterface\n  - [ ] We only have adding a policy naively\n    - [ ] no integrety constraints\n- [ ] no way to store meta policies\n- [ ] There is a need for proper triple stores for both DATA and Policies and Logs (or maybe just one? -\u003e research question)\n- [ ] AuthZInterface\n  - [ ] Authorization token must be a proper flow; not the string hardcoded one\n    - [ ] after creating the token | remove all the string tokens in data interfaces as well as they will use a check\n  - [ ] checktype: differntiation between admin and normal shop (not between data type)\n  - [ ] Proper policy matching is required (Ines would like to do this)\n  - [ ] Important split into multiple files\n  - [ ] add proper signature when signing instantiated policy (L160)\n  - [ ] Verify agreement must check signatures\n  - [ ] Companies need to be able to pass a public key (otherwise we can not check the signature of the agreement)\n- [ ] Proper modelling of how to sign (alg+key in webid)\n- [ ] DataInterface\n  - [ ] Is the triple a good way to ask the request?\n  - [ ] Add Data functionality\n  - [ ] Maybe add documentation about why getting data is a POST or change it to a get (with urlencode)\n  - [ ] Packaging: `packagedBy` must be the pod (not the webid, its not the person doing it. Its the pod on behalf of ...)\n  - [ ] package needs a more specific name\n  - [ ] put triple in package and sign make sense\n    - [ ] but might be able to optimise\n  - [ ] getData Component:\n    - [ ] after RDF agremeent, add to the package (as it is part of the data -\u003e it is a sticky policy if it were signed by the pod)\n      - [ ] maybe add a pointer to where the source is for optimisation\n- [ ] note: key management is horrible -\u003e maybe use solid in a good wey there\n- [ ] Add some extra documentation\n\n- [ ] Sabrina: send ESWC functional encryption paper Ruben D\n- [ ] Sabrina: Would be nice to have a policy and data generator to have a benchmark","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolidlabresearch%2Fvienna-prototype","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolidlabresearch%2Fvienna-prototype","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolidlabresearch%2Fvienna-prototype/lists"}