This blog post summaries what I’ve completed in Phase 1 in my Outreachy internship with Fedora Happiness Packets, things I learned and the challenges I faced 🙂
What progress did I make?
- WYSIWYG Editor Integration: Prior to this change, Happiness Packets could not be formatted or embed pictures. CKEditor integration enabled users to send messages with rich text embedded. It also supports embedding images via links.
- Message confirmation link is now only accessible to the sender: When a sender composes a Happiness Packet and sends it, they first receive a confirmation email to send the message. Previously, this link was accessible to anyone, even a user that is not logged in. As this shouldn’t be the case, this bug resolving now only allows the sender of the message to access this link to confirm sending their Happiness Packet.
- Auto Reload code changes: This was one I was personally most excited about. Prior to this change, for any modifications made to the code base, we have to rebuild the container for them take effect. In a continuous development workflow, one can imagine how tiresome the waiting process for containers to be build would be. Now any changes made to the back-end or front-end are reflected without rebuilding the containers which speeds up the development workflow by a great measure!
- Customize Admin Interface for Message Model: For Admin users, Django Admin Site is a handy tool to access the database. One of the most important functionalities for admins in Fedora Happiness Packets is to approve messages to be displayed in the happiness archive. Prior to this change, due to the lack of filters, admins had to manually find messages that have not be approved. In this change, I introduced better listing of the messages so it’s easier to see at a single glance which message need permission approval. I added filters so that messages that have been approved by sender and receiver can be easily filtered for the admins to grant permission to. I also formatted the message detail page to better categorize each section of the various message model field.
- RPM package builds in COPR: This was the most challenging tasks of all but was totally worth it for the awesome badge I got for it! The PyPI package for message schema is also needs to be packaged as a RPM package to deploy the application in production. I created the RPM package and finally got it building successfully in a COPR repository.
- Custom Logout function: Fedora Happiness Packets uses Mozilla Django OIDC. When logging out, OpenID logs out of the host application but the OpenID Provider keeps them logged in. This is often referred to as the Single Sign-Out. This is essential to prompt the user for credentials after they log out of the application. This is a WIP.
What did I learn?
Here comes the best part. This initial phase had a lot of new learnings in store for me. I learned about the workings of CKEditor in detail to integrate it. I learned a great deal about Docker and how Volumes work. I learned how are RPM packages build and how to debug failing builds in COPR. I also learned about OpenID and how it workflow in which it provides authentication and why OP logout is not considered an issue.
Apart from all that I learned while solving these issues, I also learned how to deploy a Django application and did the same in Vagrant.
Challenges? Heck yes!
I had my fair share of moments when nothing seemed to work. The second week of the internship was that challenging time for me. I was working on RPM builds which were failing and I had no clue why or how to debug. The next issue I was tackling at the same time was auto-reload changes and was trying to figure out how to integrate this for back-end while not overwriting the container build process due to volumes. And lastly, custom logout function for logging out of OP was proving to be a difficult finding documentation about. While this struggle is hard and sometimes makes you question yourself, it is only these times, when you learn in abundance. While trying to find solution for my problems I gained a deeper understanding of all these three topics.
My mentors jflory7, skamath, cverna, bt0dotninja, AnXh3L0 and jonatoni were great help. They helped during every step of the way and provided me with the essential resources. They also directed me to the right place to ask my doubts.
That summaries phase 1 of my Outreachy internship! Hopefully the next phase will turn out to be just as fun and challenging! 🙂