Prototype workaround for private issues #657

Closed
opened 2026-07-13 01:36:06 +00:00 by ryanlerch · 5 comments
Owner

Summary

Prototype workaround for private issues

Details

Create a prototype Flask web application that allows Fedora users to file issues in private Forgejo repositories they don't have direct access to. Designed for sensitive reports like Code of Conduct violations, GDPR requests, and security issues.

Key Features Implemented

  • OIDC Authentication: Integration with Fedora Accounts via authlib for user authentication
  • Stateless Architecture: No database - Forgejo is the single source of truth
  • Issue Filing: Users can file issues with title, description/questions, and file attachments (up to 5 files, 10MB each)
  • Two-way Communication: Webhook-based system for maintainers to request additional information via @ForgeFiler request-info comments
  • Response Links: HMAC-signed tokens that allow reporters to add comments to their issues via email links
  • Configurable Forms: Support for both freeform description and structured question-based forms per repository
  • File Attachments: Upload support for images, PDFs, and text files on both initial filing and responses
  • Email Notifications: SMTP-based notifications for issue confirmation and info requests
  • Security: CSRF protection, HMAC webhook verification, OIDC authorization checks, automatic logout after submission

Technical Stack

  • Flask web framework with application factory pattern
  • Authlib for OIDC integration
  • Forgejo API integration via requests library
  • Flask-WTF for forms and CSRF protection
  • itsdangerous for signed response tokens
  • TOML configuration with environment variable overrides
  • Development mode with fake auth bypass for local testing
### Summary Prototype workaround for private issues ### Details Create a prototype Flask web application that allows Fedora users to file issues in private Forgejo repositories they don't have direct access to. Designed for sensitive reports like Code of Conduct violations, GDPR requests, and security issues. Key Features Implemented - OIDC Authentication: Integration with Fedora Accounts via authlib for user authentication - Stateless Architecture: No database - Forgejo is the single source of truth - Issue Filing: Users can file issues with title, description/questions, and file attachments (up to 5 files, 10MB each) - Two-way Communication: Webhook-based system for maintainers to request additional information via @ForgeFiler request-info comments - Response Links: HMAC-signed tokens that allow reporters to add comments to their issues via email links - Configurable Forms: Support for both freeform description and structured question-based forms per repository - File Attachments: Upload support for images, PDFs, and text files on both initial filing and responses - Email Notifications: SMTP-based notifications for issue confirmation and info requests - Security: CSRF protection, HMAC webhook verification, OIDC authorization checks, automatic logout after submission Technical Stack - Flask web framework with application factory pattern - Authlib for OIDC integration - Forgejo API integration via requests library - Flask-WTF for forms and CSRF protection - itsdangerous for signed response tokens - TOML configuration with environment variable overrides - Development mode with fake auth bypass for local testing
ryanlerch added this to the Sprint 24 project 2026-07-13 01:36:06 +00:00
Author
Owner

ForgeFiler Status Update — 2026-07-20

The ForgeFiler prototype is built and deployed to staging. Here's a walkthrough of the current workflow:

How it works

  1. A user visits a direct link for a specific report type (e.g. Code of Conduct or Personal Data Request)
  2. They authenticate via Fedora Accounts (OIDC)
  3. They fill out a form with a title and a set of custom questions configured per repository
  4. ForgeFiler creates the issue in the corresponding private Forgejo repository via a bot account — the reporter never gets access to the repo itself
  5. The reporter receives an email confirmation with their submission details
  6. If a maintainer needs more info, they comment on the issue with /respond followed by their question
  7. A webhook fires, and ForgeFiler emails the reporter a secure link to respond
  8. The reporter authenticates, submits their reply, and it's added as a comment on the issue

Issue numbers are never exposed to reporters — all links use cryptographically signed tokens. The app is fully stateless (no database); Forgejo issues are the single source of truth.

Staging Instance

The staging deployment is live at:
https://forgefiler-forgefiler.apps.ocp.stg.fedoraproject.org

It is connected to forge.stg.fedoraproject.org with two dummy private repositories under the forgefiler org:

  • forgefiler/code-of-conduct — Code of Conduct reports (10 custom questions)
  • forgefiler/fedora-pdr — Personal Data Requests (2 custom questions)

Next Steps

  • Code review (forge/ForgeFiler#1)
  • Production deployment and Forgejo webhook configuration
## ForgeFiler Status Update — 2026-07-20 The ForgeFiler prototype is built and deployed to staging. Here's a walkthrough of the current workflow: ### How it works 1. A user visits a direct link for a specific report type (e.g. [Code of Conduct](https://forgefiler-forgefiler.apps.ocp.stg.fedoraproject.org/code-of-conduct/file-issue) or [Personal Data Request](https://forgefiler-forgefiler.apps.ocp.stg.fedoraproject.org/personal-data-request/file-issue)) 2. They authenticate via Fedora Accounts (OIDC) 3. They fill out a form with a title and a set of custom questions configured per repository 4. ForgeFiler creates the issue in the corresponding **private** Forgejo repository via a bot account — the reporter never gets access to the repo itself 5. The reporter receives an email confirmation with their submission details 6. If a maintainer needs more info, they comment on the issue with `/respond` followed by their question 7. A webhook fires, and ForgeFiler emails the reporter a secure link to respond 8. The reporter authenticates, submits their reply, and it's added as a comment on the issue Issue numbers are never exposed to reporters — all links use cryptographically signed tokens. The app is fully stateless (no database); Forgejo issues are the single source of truth. ### Staging Instance The staging deployment is live at: https://forgefiler-forgefiler.apps.ocp.stg.fedoraproject.org It is connected to [forge.stg.fedoraproject.org](https://forge.stg.fedoraproject.org) with two dummy private repositories under the `forgefiler` org: - **forgefiler/code-of-conduct** — Code of Conduct reports (10 custom questions) - **forgefiler/fedora-pdr** — Personal Data Requests (2 custom questions) ### Next Steps - Code review (forge/ForgeFiler#1) - Production deployment and Forgejo webhook configuration

I think this will probibly be workable... I'd like to get any input from @zlopez also, he's been processing the pdr requests lately a lot.

I think this will probibly be workable... I'd like to get any input from @zlopez also, he's been processing the pdr requests lately a lot.

It's not that convenient as private issues, but it seems to be workable. It fills the security requirements we have, but I'm not sure how the reporter will add anything. For example we process the request and then we get another comment from reporter that they want something above the standard way we are doing it.

Also how the reporter will be notified that the request was processed?

It's not that convenient as private issues, but it seems to be workable. It fills the security requirements we have, but I'm not sure how the reporter will add anything. For example we process the request and then we get another comment from reporter that they want something above the standard way we are doing it. Also how the reporter will be notified that the request was processed?
Author
Owner

For follow-up information from the reporter: when the team processing the request needs more details, they post a comment on the private issue starting with /respond. For example:

/respond
Can you provide more details about the timeline of events?

This triggers ForgeFiler to send the reporter an email containing a secure link. Every response from ForgeFiler to the reporter includes this link, and it is how the reporter interacts with that specific issue — clicking it takes them to a form where they can add additional comments and file attachments, without ever needing access to the private repository. The team can request more info as many times as needed.

For notifications: the reporter receives an email confirmation when they first file the issue, and then again each time the team uses /respond. When the request has been fully processed, the team simply uses /respond to let the reporter know it has been closed.

For follow-up information from the reporter: when the team processing the request needs more details, they post a comment on the private issue starting with `/respond`. For example: ``` /respond Can you provide more details about the timeline of events? ``` This triggers ForgeFiler to send the reporter an email containing a secure link. Every response from ForgeFiler to the reporter includes this link, and it is how the reporter interacts with that specific issue — clicking it takes them to a form where they can add additional comments and file attachments, without ever needing access to the private repository. The team can request more info as many times as needed. For notifications: the reporter receives an email confirmation when they first file the issue, and then again each time the team uses `/respond`. When the request has been fully processed, the team simply uses `/respond` to let the reporter know it has been closed.
Author
Owner

The prototype for ForgeFiler has been built and is deployed to staging for testing:

ForgeFiler is a Flask web app that provides a public-facing form for filing issues into private Forgejo repositories, with OIDC authentication via Fedora Accounts, file attachments, and a webhook-based /respond command for maintainer-reporter communication.

Any further issues, bugs, or feature requests should be filed in the forge/ForgeFiler issue tracker.

The prototype for ForgeFiler has been built and is deployed to staging for testing: - **Staging instance:** https://forgefiler-forgefiler.apps.ocp.stg.fedoraproject.org/ - **Sample report form:** https://forgefiler-forgefiler.apps.ocp.stg.fedoraproject.org/personal-data-request/file-issue - **Source code:** https://forge.fedoraproject.org/forge/ForgeFiler ForgeFiler is a Flask web app that provides a public-facing form for filing issues into private Forgejo repositories, with OIDC authentication via Fedora Accounts, file attachments, and a webhook-based `/respond` command for maintainer-reporter communication. Any further issues, bugs, or feature requests should be filed in the [forge/ForgeFiler issue tracker](https://forge.fedoraproject.org/forge/ForgeFiler/issues).
Sign in to join this conversation.
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
forge/forge#657
No description provided.