We often encounter unique scenarios that require thinking outside the box. Today, I want to share an interesting project where I developed a custom plugin for handling user consent during a data migration – a case where the standard Jira Cloud Migration Assistant (JCMA) wasn’t sufficient for our needs.
The Challenge
When dealing with data migration for a world-renowned gaming company with more than 700.000 Jira users, the stakes are particularly high. A significant portion of their user base consists of minors, which adds several layers of complexity to the data handling and consent management process. This unique situation demanded extra care and compliance measures that go beyond what standard migration tools can offer.
While Atlassian provides excellent tools like JCMA for cloud migrations, working with a gaming industry leader required a more nuanced approach to handling user data and consent. Every step of the migration process needed to be carefully documented and justified to ensure compliance with various international regulations protecting minors’ data. In our case, we needed to:
- Collect explicit user consent for data migration
- Provide different levels of data transfer options
- Handle cases where users might decline to have their personal information transferred
- Maintain compliance with data protection regulations
The Custom Solution: The Consent Management Plugin
To address these requirements, I developed a custom Jira plugin that manages the entire consent collection process, while working with our team on the broader migration strategy. Let me show you how this plugin works:
User Interface and Consent Options
The plugin presents users with a clean, straightforward interface offering three distinct options:

- Full Consent: Transfer both account and bugs with preserved identity
- Partial Consent: Transfer only bugs and associated data, without account migration
- No Consent: Transfer bugs with personal information removed

Automated Group Management and Issue Tracking
One of the aspects of the solution is the automatic user categorization and tracking system. When a user submits their consent choice, two automated actions occur:
The user is automatically assigned to the appropriate group:
migration-full-consentmigration-bugs-onlymigration-no-consent
A new issue is automatically created in a dedicated “Consent” project to track each user’s decision. This issue includes:
- User details (username, email)
- Selected consent option
- Timestamp of the decision
- Detailed consent status

Custom Export and Import Process
Rather than using JCMA, the plugin works in conjunction with our team’s custom export script that:
- Reads the user group assignments to determine consent levels
- Exports all issues while respecting user privacy preferences
- Masks or anonymizes data for users who haven’t provided full consent
- Prepares the data in a format suitable for importing into the new system
The Implementation
I built the plugin using the Atlassian Plugin SDK, implementing these key components:
MigrationConsentServlet
- Handles all HTTP requests for the consent form
- Uses Velocity templates for rendering the UI (
migration-consent.vm,consent-success.vm,error.vm) - Implements error handling and logging
ConsentService
- Processes user consent submissions
- Creates tracking issues in the Consent project
- Handles group membership management
EmailService
- Sends confirmation emails based on consent choice
- Uses Jira’s mail queue for reliable email delivery
- Implements HTML email templates
Plugin Configuration
The atlassian-plugin.xml defines the plugin’s structure and dependencies:
<servlet name="Migration Consent Servlet"
key="migration-consent-servlet"
class="com.valiantys.servlet.MigrationConsentServlet">
<url-pattern>/migration-consent</url-pattern>
</servlet>
<component key="consentService" class="com.valiantys.service.ConsentService">
<interface>com.valiantys.service.ConsentServiceInterface</interface>
</component>
<component key="emailService" class="com.valiantys.service.EmailService">
<interface>com.valiantys.service.EmailServiceInterface</interface>
</component>
Key Takeaways
This project highlights several important lessons:
- Standard Tools Have Limits: While JCMA is excellent for straightforward migrations, some projects require custom solutions to meet specific requirements.
- Privacy First: When dealing with a gaming community that includes minors, handling user data with respect and giving users control over their information isn’t just good practice – it’s essential.
- Gaming Industry Compliance: The gaming industry, especially when dealing with a global user base, requires extra attention to data protection and consent management. Each step must be justified and documented to meet various international standards.
Conclusion
What makes this project particularly interesting is how it demonstrates the ever-evolving nature of Jira administration, especially when working with industry leaders. The presence of underage users in the user base and the need to comply with various international regulations for data protection created a unique challenge that required thinking beyond standard migration tools.
The combination of user consent management, automated group assignments, and custom export scripts shows how we can create comprehensive solutions that respect user privacy while meeting complex migration requirements.
Creating this consent plugin brought back memories from my early days of Jira development, when we didn’t have the abundance of ready-made solutions and flexible plugins that we have today. It had been a while since I last developed a Data Center plugin from scratch, and I must say, it was quite enjoyable to dive back into plugin development. While the ecosystem has evolved tremendously over the years, there’s still something special about crafting a custom solution that perfectly fits unique requirements.