As part of my final apprenticeship project at Icinga GmbH, I designed and implemented an extensible password policy architecture for Icinga Web. The goal was not only to provide a predefined password policy, but to create a reusable architecture that allows additional and company-specific password policies to be integrated without modifying the existing form logic.
The implementation included:
- Definition of a common interface for password policies
- Hook-based extension point for registering custom policies
- Server-side password validation
- Integration into user creation, password changes and the initial setup
- Centralized handling of configured password policies
- Error handling for invalid configurations
- User-friendly validation messages
- Manual functional testing and automated unit tests with PHPUnit
- Extension of the public Icinga Web documentation
Two policies were implemented as part of the project: a backwards-compatible default policy and a configurable base policy with password requirements based on security recommendations. The project was developed within the existing Icinga Web codebase and reviewed with my project supervisor. The resulting functionality was later integrated into the official Icinga Web repository.
View the Password Policy implementation
View Pull Request #5419 – Implement password policy with hook
View Password Policies in the Icinga Web changelog
Since my last update, I’ve completed my intermediate exam with excellent results. At vocational school, we’re now in the third year, focusing on topics like frontend development (HTML, CSS), PHP, and UI/UX design.
At the beginning of this third year, I started a practice project to deepen my understanding of Icinga Web development. Using a fictional shop module, I learned about the fundamental elements, structure, and interactions within the software. I created a database and implemented CRUD functionality, sessions and tags. Furthermore, I've been diving deeper into real-world development, setting up a stale bot using GitHub Actions and implementing a password policy hook in Icinga Web. My next project will be to develop a visual representation of Time Periods for Icinga Web. Because Icinga Web uses its own library, IPL, even the web components are written in object-oriented PHP, which allows for clean and modular code design.
I really enjoy working across different areas of IT — from using Linux as my main operating system and working in the terminal, to developing in Docker containers and coding with the IDE PhpStorm. These diverse tools and environments make everyday work both challenging and exciting.
Because I like to work in a structured and consistent way, I’ve already begun preparing for my final examination, taking small daily steps toward the successful completion of my apprenticeship.
I am currently in my second year of vocational training to become an IT specialist for application development. I have a great apprenticeship at Icinga GmbH, where I’ve already learned a lot in my first year. I’ve had the chance to explore various fields such as Linux, Command line, SQL, API, networking basics, Git, GitLab, Docker, PHP, Raspberry Pi and (a little bit of) PowerShell.
In vocational school, I practiced programming with C# in the first year, and now I'm working with Python in my second year. I'm still excited to discover the vast world of IT, though I now have a clearer sense of just how much there is left to learn!
Hello my name is Jolien and I want to become a Software Developer. I want to show some of my first tries and experiences with coding. I was working as an art therapist when I discovered my interest in programming. I started to learn HTML and CSS and from the first moment I was very fascinated about the structure but also what I do with it. I felt excitement about how I could use it to create something.




