Skip to content

Secure versioned file distribution desktop application for Windows. Built with Python 3.10 and PyQt5, featuring encryption, access levels, documentation attachments and MVC architecture.

Notifications You must be signed in to change notification settings

pntech-dev/File-Archive

Repository files navigation

File Archive

Russian version available: README_RU.md

Python Platform Framework Security Access Modes Status License UI

Desktop application for encrypted versioned storage, distribution, and controlled access to engineering files within an organization.


πŸ–Ό Screenshots

Authorization window:

Secure login screen with password authentication.
Allows switching between Full Access mode and Standard mode, and provides an option to change the password.

auth_tab

Download Tab:

Displays all products and their latest available versions.
Users can search, select a product, choose a version, and download files (automatically to Desktop or to a custom location).

download_tab

Add Tab:

Available in Full Access mode.
Allows you to add new versions or attach instructions to existing or new product groups.

add_tab

Delete Tab:

Available in Full Access mode.
Allows deleting specific versions or entire product groups, with confirmation protection to prevent accidental removal.

delete_tab


What's New (v4.2.0)

✨ New Features

  • Added support for PDF instructions
    Now you can attach files with instructions in PDF format to groups of versions.

  • Added β€œOpen Instruction” button
    Instruction files can now be opened directly from the application, without navigating to their folder manually.

🐞 Bug Fixes

  • Fixed a table refresh issue
    In some cases, the table did not update correctly after certain user actions. This behavior has now been resolved.

  • Fixed incorrect display of instruction file extensions
    The file extension for instruction documents was sometimes shown incorrectly. This display logic has been corrected.

  • Fixed an issue where the interface remained disabled after uploading a file
    A UI state-lock bug caused the interface to stay unresponsive after uploading a version or instruction. This is now fixed.

  • Fixed incorrect notification behavior after deleting a group
    Notifications were sometimes displayed incorrectly following the deletion of a version group. This issue has been corrected.


πŸ“₯ Download workflow

  1. Select a product by clicking once in the table
    (the latest available version is selected automatically)

  2. Optional: double-click a product to open version listing
    and select any previous version if it was uploaded earlier

  3. Choose a save location:

    • by default, the file will be downloaded to the Desktop
    • or a custom folder can be selected
  4. Click Download
    The selected version is decrypted and saved to the chosen destination

This workflow allows engineers to retrieve current releases
and operators to safely download only approved versions.


πŸ“Œ Overview

File Archive provides a secure and structured way to store, update, distribute, and retrieve versioned project files and technical documentation.

The application ensures data confidentiality using user-generated cryptographic keys and supports different access modes for engineers and production personnel.

Designed for environments where controlled access, integrity, and up-to-date versions, secure distribution is critical.


🎯 Key Features

βœ… Versioned file storage

  • Organized by groups (products) and versions
  • Automatic latest version detection
  • Encrypted at rest

βœ… Two access modes

πŸ” Full Access Mode (after password authentication)

  • Add new versions
  • Add .doc, .docx and .pdf instruction files
  • Delete versions or entire groups
  • Manage archive structure
  • Engineers / supervisors

βœ… Standard Mode

  • Tabs Add/Delete are visible but disabled
  • Users can only download
  • Operators / factory workers

βœ… Support for files with instructions

You can attach instructions to each product in the following formats: DOC, DOCX and PDF.

βœ… Opening files with instructions

Open the files with instructions directly from the application.

βœ… Encryption model

  • Fernet symmetric encryption
  • User-generated keyfile and password file
  • No shared keys in repository
  • Encrypted files stored with .enc extension

βœ… UI/UX highlights

  • PyQt5 interface
  • Layered navigation
  • Search across all versions
  • Progress indicators
  • Action notifications

🧩 Who is this for?

βœ… Engineering departments
βœ… Manufacturing and production environments
βœ… Teams distributing controlled documentation
βœ… Organizations requiring secure versioned file access
βœ… Workplaces with separated access levels (engineers vs operators)


🧠 What this project demonstrates about me

βœ… Python OOP
βœ… PyQt GUI engineering
βœ… MVC architecture
βœ… Multithreading for blocking operations
βœ… Secure file handling
βœ… UX logic and state management
βœ… Clean code and documentation discipline
βœ… Configuration & deployment awareness
βœ… Real-world application thinking


πŸ— Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”
β”‚ View β”‚ <-- β”‚ Controller β”‚ --> β”‚ Model β”‚
β””β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β””β”€β”€β”€β”€β”€β”€β”€β”˜

UI Layer Signal/Slot Encryption Widgets coordination File ops State visuals Flow logic Versioning


πŸ›  Tech Stack

  • Python 3.10
  • PyQt5
  • cryptography (Fernet)
  • PyYAML
  • threading
  • pathlib

πŸ”§ Installation

git clone https://github.com/pntech-dev/File-Archive.git
cd File-Archive
pip install -r requirements.txt

πŸ”‘ Key generation & initialization

  1. Run the key generation script: python generate_keyfiles.py
  2. A config.yaml file is created based on config_template.yaml
  3. Keys are stored locally and never committed
  4. Application can now operate securely

πŸ— Building (optional)

The application can be packaged using PyInstaller with the provided spec:

pyinstaller "File Archive.spec"

πŸ“‚ Project Structure

FILE-ARCHIVE/
β”‚ app.py
β”‚ config_template.yaml
β”‚ generate_keyfiles.py
β”‚ File Archive.spec
β”‚ requirements.txt
β”‚ README.md
β”‚
β”œβ”€ mvc/
β”‚ β”œβ”€ controller.py
β”‚ β”œβ”€ model.py
β”‚ β”œβ”€ view.py
β”‚ └─ __init__.py
β”‚
β”œβ”€ classes/
β”‚ β”œβ”€ notifications.py
β”‚ β”œβ”€ password_dialog.py
β”‚ └─ __init__.py
β”‚
β”œβ”€ resources/
β”‚ β”œβ”€ resources.qrc
β”‚ β”œβ”€ resources_rc.py
β”‚ β”œβ”€ icon.ico
β”‚ β”œβ”€ checkbox_check.svg
β”‚ β”œβ”€ combobox_arrow.svg
β”‚ β”œβ”€ auth/
β”‚ β”œβ”€ notifications/
β”‚ β”œβ”€ radio_buttons/
β”‚ β”œβ”€ search/
β”‚ └─ tabs/
β”‚
β”œβ”€ ui/
β”‚ └─ (Qt Designer UI files)
β”‚
└─ screenshots/
└─ (application images)

πŸ”’ Security Model

βœ… Encrypted storage
βœ… No plaintext password saving
βœ… No cryptographic keys in repository
βœ… User-specific initialization
βœ… Safe for internal distribution


🚦 Project Status

βœ… Stable
βœ… Maintained when needed
βœ… Bug fixes and improvements possible
❌ No active feature expansion planned


πŸ“œ License

MIT License

Copyright (c) 2025 Pavel (PN Tech)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files...


πŸ‘€ Author

Pavel (PN Tech)
Python desktop and web developer, UI/UX designer, electronics engineer

About

Secure versioned file distribution desktop application for Windows. Built with Python 3.10 and PyQt5, featuring encryption, access levels, documentation attachments and MVC architecture.

Topics

Resources

Stars

Watchers

Forks

Languages