-
Notifications
You must be signed in to change notification settings - Fork 26
Architecture
Background: Applying for social care requires a significant amount of personal documentation. For those experiencing housing insecurity it is impractical to maintain these documents and facilitate a means of transferring them to case workers. The design of PASS aims lower this barrier to aide. PASS is built as a decentralized platform using SOLID to offer full user control, data portability, and interoperability.
Solid is composed of the following key components:
- Pod: A Pod is a personal data store that is owned and controlled by the user. It can be hosted by the user themselves, or by a Pod provider of choice.
- Pod Provider: A Pod Provider is an entity that provides the infrastructure and services needed to host Pods.
- Resource Server: The Resource Server is the component that stores and manages the data in a Pod. It is responsible for providing access to the data to authorized users and applications.
- Identity Provider: The Identity Provider is the component that authenticates users and provides them with access to their Pods.
- Linked Data: Solid Pods use linked data to represent and store data. Linked data is a way of representing data on the web such that it can be easily linked to other data.
Interacting with a solid pod includes the following steps:
- The user authenticates with an Identity Provider and receives a WebID, which is a unique identifier for the user.
- The user selects a Pod Provider and creates a Pod.
- The user's WebID is associated with the Pod, and the user is granted access to the Pod.
- The user can then store and manage data in the Pod.
- Applications can request access to the data in the Pod with the user's consent.
- The Identity Provider authorizes or denies the access request.
- If the access request is authorized, the application is granted access to the data in the Pod.
-
React.js 18
- Used for JavaScript front-end library/framework
-
React Paginate
- Used for pagination
-
React Router
- Used for routing to pages not built within React
-
React Testing Library
- Used for unit testing
-
Material UI
- Used for CSS framework
-
Community Solid Server
- Used for the server
-
SOLID
- Used for the decentralized database
- Getting started as a Solid Developer
-
Inrupt
- Used for APIs to interact with SOLID data
-
DayJS
- Used for JavaScript date library
-
JSDoc
- Used for documenting codebase
-
Prettier
- Used for code formatting
-
ESLint
- Used for code analysis
-
Vite
- Used for project scaffolding
-
Vitest
- Used for unit testing
-
JSDom
- Used for unit testing
-
JavaScript | MDN
- Used as the primary coding language
-
Node.js
- Used for the server
-
NPM
- Used for package management
-
crypto-js
- Used for cryptographic algorithms
-
zxing-js/browser
- Used for barcode image processing
-
GitHub
- Used for development and version control
- PASS GitHub repository
-
Google Meet
- Used for meetings
-
Discord
- Used for text and voice communication
- Join our Discord link
-
Figma
- Used for design collaboration
- PASS Figma board
Instructions as of October 13th, 2023
- A. With pass running: Get pass running locally.
- Connect to localhost:5173 in the browser.
- option to scroll down go to request a demo(feature not live).
- B. To login:
- On header in pod server url section (should be populated with default url http://localhost:3000), this can be changed to url of pod provider of choice (example: https://opencommons.net).
- Find the “Login” button on the right side of nav bar and click log in, if the pod url section was activated you can hit enter instead.
- Login to Solid Pod (via pod login interface) by typing the user’s Username and Password on Solid’s Login form.
- If user does not have a Solid account, an account can be created by clicking on the “Sign up” link below the login form.
- You must allow permissions in check boxes for PASS to have permission to communicate with your pod. Then Click “Log In” on the login form.
- If a user had logged in previously on the same browser in an existing session, Solid will remember if you’ve previously logged in, so logging in from the same browser after logging out will immediately send user to PASS instead of Solid’s Login form.
- C. To logout (of PASS):
- Find the profile icon on the right side of nav bar and click, drop down menu will populate.
- Logout of PASS by clicking on the “Logout” button at the bottom of drop down.
- Important notice: Steps 2 and 3 only logs users out of PASS. However, this does NOT log out of the user’s Pod from Solid apparently. To fully log out from PASS, users must also log out from their Solid Identify Provider (or IDP).
- For developers, the IDP is opencommons.net. Logging out from the IDP can be achieved by using the link next to “WebID” (additional details will be provided in the next section, but ideally, you log out of the IDP first before logging out from the App). This seems to be a major UX issue for Inrupt, an issue that doesn’t seem to be resolved yet from Inrupt’s client libraries, see the following links for more details: Log out from IDP when logging out of App, If app is offline, shouldn't user be logged out of Pod? However, it might be due to the fact that it is a server side issue since it’s opencommons.net (the IDP) that’s providing PASS with its JWT tokens and authenticating them and can only be resolved there.
- D. To logout (of Solid IDP, i.e. opencommons.net):
- Click on the "User WebID" link in the profile section (icon on far right of nav bar).
- Enter the new window or tab provided by the link.
- Click on the profile icon in nav bar of the Solid pod browser application and a drop down will appear.
- Click on the logout button.
- E. To view your pod in Solid pod browser:
- Click on the "User WebID" link in the profile section (icon on far right of nav bar).
- Enter the new window or tab provided by the link.”
- This link should look similar to https://yourNameHere.solidcommunity.net/ replacing yourNameHere with your account name and solidcommunity.net with your pod provider.
- From here select the folder icon and view dropdowns to see content.
- F. To view profile page:
- Click profile icon on right of navbar.
- Click profile button on dropdown.
- You will land on profile page with several options including "your sign up link"" where you can sign up another user for a pod. This sign up is normally sent in a link but the hyperlink exists in case they are unable to set up a pod themselves.
- There is also a link for User webID: that will open your profile ACL card if clicked.
- A profile image can be chosen via chose image button that supports .gif, .png, .jpeg, .jpg, .webp formats with no size limit.
- once an image is added the button changes to "remove img", modal will pop up with cancel or ok.
- Users can change name, nickname, and date of birth by clicking "edit" button in fields next to profile image. Cancel or update options are available once in editing view.
- Share documents folder button under profile image populates modal where you can share or unshare to an entered pod url (http://localhost:3000/testpod). the button becomes share or unshare based on selection or can be canceled by cancel button.
- Add document button populates modal where you can select document type (bank statement, passport, drivers license or other), enter an expiration date, and a description of the file.
- now chose file and upload.
- option for cancel will close the modal.
- If not date is set, the date by default will be set to “Not available” to indicate no date has been set.
- To see file uploaded click preview file icon in files row.
- To share a specific file click the share icon in the files row.
- To delete a file click trash can icon in file row, modal will pop up with options for cancel and delete document.
- G. To add users to contacts:
- Click on "contacts" in nav bar.
- Select "add contact" button.
- Fill out the contact form as well as Pod URL of the user you wish to add in the form of username.opencommons.net (where username can be replaced with the other user’s Pod username, for example user123.opencommons.net).
- Click on “Add Contact”.
- If no users are added page will "show no contacts found" message.
- If the user exists they will be added and a small message will populate on the bottom left of screen to show they were added.
- If the user does not exists a small message will populate on the bottom left of the screen saying that the user does not exist.
- H. To remove users from contacts:
- Click garbage can icon under delete colum within the row of contact to be deleted.
- Modal will pop up with options for "cancel" or "delete contact".
- I. To select a user for cross pod interactions:
- Navigate to "contacts" page.
- Select the user from list of added contacts, this will open their profile view with option to add document.
- process is otherwise the same as a self document upload.
- J. To use the messages feature(similar to email):
- Select the mail icon on right of nav bar.
- Click new message button.
- Fill out to section with recipients full pod url (http://localhost:3000/testpod) and other form fields.
- Option to cancel or submit.
- After sending a message the outbox tab can be selected to show the sent message.
- To see the message contents in detail (for inbox or outbox) click on the line containing it. (it will gray out after being read).
- K. To reply to a message:
- Click reply button in inbox line of message.
- Form will pre populate with user and subject info with previous message contents, enter new msg contents and submit reply.
- messages field has page navigation above the footer left arrow to go to earlier pages with a page count in the middle and an arrow to the right for later pages.
PASS is being developed by volunteers through CODE PDX, a Portland, OR civic coding organization with the support of Technology Association of Oregon, OpenCommons, and Oregon Digital Safety Net.