IFS — Integration File Service
A corporate document repository on top of S3, with a web UI for employees and an HTTP API for ERP systems.
IFS is a single place for primary documents — contracts, acts, invoices — of several group companies. It is built for a closed corporate network with no internet access.
The challenge
- Documents have to arrive automatically from the ERP system.
- Employees work with them in the browser, and everyone sees only their own.
- Security needs to see who did what and when.
- Everything runs inside the corporate network.
The solution
A web application and an HTTP API on top of one service. File contents live in the corporate S3; structure, permissions, attributes and the audit log live in PostgreSQL. Users sign in with their domain account (Kerberos on nginx), and the system stores no passwords.
All screenshots show demo data. The customer, real documents and internal addresses are not shown.
Key features
Folder tree and roles
Eight actions on folders and files. Roles are assigned to a branch, inherited downward and added together. Search and export respect rights, so closed documents never show up in results.
API for ERP and other systems
Documents arrive by a readable path, Organization/Section/Year/Month/file. Missing folders are created on the fly with the parent's rights. Any ERP (SAP, Microsoft Dynamics, Oracle) or script can call it, and sample clients are included.
Custom document attributes
Document type, signatory, contract date, amount. Admin-managed dictionary; values can be set in the file card, on upload, in bulk from search results and via the API.
Advanced search and export
Folder tree with exclusions, date, size, author, name and folder masks, attributes. Streamed ZIP64 archives and Excel registers with hundreds of thousands of rows.
Admin panel and audit log
Structure, roles, users, attributes and settings without a restart. A filterable audit log with Excel export and a DB-versus-S3 integrity check.
Built-in self-test
85 automated tests, including concurrent users. An admin runs them from the UI against a separate test database with an S3 simulator.
Engineering decisions
- The S3 key is the file's UUID, not its path. Renaming a folder with hundreds of thousands of files is a single UPDATE in the database. No objects are copied.
- Permissions are materialized, not computed on the fly. Each folder stores its effective role set, recalculated by triggers over the subtree (WITH RECURSIVE). An access check is one indexed query.
- Business rules live in the database. PL/pgSQL triggers and constraints behave the same for the web UI, the API and any future integration. The app is SQL-first, Django without the ORM, with numbered SQL migrations and its own runner.
- Streaming, no copies on disk. Multipart upload straight to S3. A storage error is detected before the first byte reaches the client, so users get a clear message instead of a broken file.
- Safe under concurrency. PostgreSQL advisory locks per file serialize overwrites and deletes. Deletion goes S3 first, then the database, so the two never drift apart after a failure.
- Secure by default. Authentication happens only at nginx (Kerberos), no presigned URLs leave the perimeter, CSRF is handled behind the TLS proxy. Selected files are re-checked against rights on the server, and deleting more than 100 files requires typing the number.
Screens
Let's work together
Need a web application?
Internal tools, integrations, document and data systems — tell us what you need.