Primary Mentor | |
Backup Mentor | Harsha Kumara |
Assigned to | Sai Sandeep Mutyala |
Background
The OpenMRS Atlas provides a voluntary registry of OpenMRS implementations all over the world. The server code was written using PHP and has been adapted a few times over the past decade. During GSoC 2016, a new version of the Atlas server code was written in node as the Atlas 3.0 Project, but this new, node-based server code was never fully deployed. During 2017, the OpenMRS infrastructure was migrated and updated so all services are deployed using Docker and our single-signon was switched to use LDAP. As a result, some of the functionality of the PHP-based Atlas has been lost. Given users can no longer authenticate to update their markers and, by default, markers fade over time, the existing markers are beginning to disappear from the Atlas!
Purpose
The goal of this project is to address the remaining tasks to bring the node-based OpenMRS Atlas into production. This will include some code changes, some additional features (most importantly, adding LDAP support), and ensuring the application can be deployed and configured by our infrastructure (i.e., using Docker).
Required Skills
- Nodejs
- Ability to write and refactor a REST API
- Familiarity with Docker
- Basic Javascript and HTML
- Basic SQL commands (i.e., MySQL)
- Basic Java programming (if Atlas module needs to be refactored)
Objectives
Add LDAP support for OpenMRS ID (LDAP functionality should be isolated – i.e., avoid LDAP references spread throughout the code)
- All features, including basic administrative functions should be performed through REST API calls
Support downloadable images (help users create an image for a slide deck without creating a burden on the server)
Refactor marker images to be uploaded (confirm type, limit size) so they can be served securely
Prevent javascript injections (including when displaying user-uploaded images)
Minimal Viable Product (MVP)
- Users can authenticate via LDAP
- Users can add and update markers
- Atlas module works on supported versions of the Reference Application
- Product is deployed to replace Atlas 2.1
Extra Credit
All external/user URLs should have “rel=nofollow” (https://www.w3schools.com/tags/att_a_rel.asp)
Allow admins to access to disable/delete anything suspicious
Notify admins when new site is added (including image)
- Atlas module works with new Atlas server on both new and legacy versions of OpenMRS
Progress TODO List
Primary Goals
- Implement Login through LDAP (Done!)
- Support addition, updating, and deletion of markers (Done!)
- Check and store whether user is an admin (Done!)
- Create an admin page (Done!)
- Get the Atlas Module working (Done!)
- Examine and Document the API (Done, but updates are expected)
- Add some styling to the login page (Done!)
- Make it easier for a user to spot his own markers (By displaying a list/coloring markers/etc.) (Done!)
Additional Goals
- Create an RSS feed (Done!)
- Support upload of marker images
- Support download of map images (Done!)
- Implement downloading of marker data for admins (Done!)
- Allow more than own owner for a marker (Done!)
- Notify users when their marker is fading (Done!)
- Add search for markers (Done!)
- Add basic reporting resource (Done!)
- Add report screen for Atlas (Done!)
Features Implemented / Fixed
- Implemented Login through LDAP
- Fixed addition, updating and deletion of markers
- Added admin functionality and created an admin page
- Fixed the Atlas module
- Created an RSS feed
- Implemented upload of markers
- Implemented download of map screenshots
- Allowed admins to download marker data
- Allowed markers to have co-owners
- Added Email notifications to notify owners of their fading markers
- Implemented search for markers
- Created a data page
Resources
- Atlas 3.0 Project (also, this thread in OpenMRS Talk)
- Atlas 3.1 Talk Thread
- Blog - Weekly progress on the project is documented here
- openmrs-contrib-atlas - node
- openmrs-contrib-atlas (2.1) - php - current production
- openmrs-contrib-ansible-docker-compose - used to create a local staging LDAP server
- Docker files
- CI build
- JIRA board
Infrastructure provided
- Staging LDAP with users in both atlas-user and atlas-admin groups
- Staging server (docker host)
- Bamboo pipeline deploying image to docker hub AND docker image to staging server
- LDAP credentials
- SMTP credentials
- S3 bucket to store - and serve - images (if desired)
- Backup with current data (atlas 2.1)