OOskar Karpiński
Wróć do projektów
Zarchiwizowany projekt open source

LibrePass

Samodzielnie hostowany menedżer haseł stworzony jako pełne studium produktu obejmujące natywną aplikację mobilną na Androida, backend Spring Boot, szyfrowaną synchronizację i wczesnego klienta webowego.

Opis projektu

LibrePass był samodzielnie rozwijanym projektem open source obejmującym natywną aplikację mobilną na Androida, backend API, szyfrowane przechowywanie danych, synchronizację, dokumentację oraz wdrożenie kontenerowe.

Najważniejszą decyzją architektoniczną było rozdzielenie odpowiedzialności klienta i serwera. Operacje na wrażliwych danych sejfu miały odbywać się po stronie klienta. Backend obsługiwał uwierzytelnianie, komunikację API, synchronizację i przechowywanie zaszyfrowanych danych.

Główne obszary projektu

  • Natywna aplikacja mobilna na Androida napisana w Kotlinie i Jetpack Compose.
  • Dostęp biometryczny i automatyczne blokowanie sejfu.
  • Lokalne przechowywanie danych i praca offline.
  • Synchronizacja lokalnego sejfu z backendem.
  • API Spring Boot z walidacją i ograniczaniem liczby zapytań.
  • Obsługa PostgreSQL i MySQL.
  • Wdrożenie z wykorzystaniem Dockera.
  • Wczesna wersja klienta webowego w Svelte.
  • Dokumentacja techniczna i wdrożeniowa.

Czego nauczył mnie projekt

Najważniejsze wnioski z LibrePass

LibrePass wymagał jednoczesnego myślenia o interfejsie, szyfrowaniu, synchronizacji, backendzie, wdrożeniu i realnym zakresie projektu.

Bezpieczeństwo jest procesem

Bezpieczeństwo menedżera haseł wynika z połączenia szyfrowania, hashowania haseł, obsługi tokenów, walidacji, blokowania sejfu i jasno określonych granic zaufania.

Szyfrowanie E2EUwierzytelnianieWalidacja

Synchronizacja jest częścią produktu

Tryb offline i synchronizacja wielu urządzeń muszą zachowywać się przewidywalnie przy braku internetu, oczekujących zmianach lokalnych i równoczesnej edycji danych.

Offline-firstSynchronizacjaObsługa konfliktów

Aplikacja mobilna potrzebuje architektury

Klient Android nauczył mnie oddzielania interfejsu Compose, stanu lokalnego, biometrii, bazy danych i synchronizacji od warstwy prezentacji.

Jetpack ComposeMaterial 3Biometria

Backend potrzebuje jasnych granic

Serwer odpowiadał za uwierzytelnianie, API, limity zapytań i przechowywanie zaszyfrowanych danych, natomiast operacje na sejfie pozostawały po stronie klienta.

Spring BootREST APIModel danych

Dokumentacja pomaga utrzymać projekt

Instrukcje konfiguracji i opisy architektury ułatwiły odtworzenie decyzji technicznych także po zakończeniu aktywnego rozwoju poszczególnych części.

DokumentacjaDockerWdrożenie

Zakres projektu trzeba kiedyś zamknąć

Niedokończony klient webowy pokazał mi, kiedy lepiej pozostawić projekt jako udokumentowany materiał referencyjny zamiast rozwijać go bez realnego planu ukończenia.

ZakresDecyzje produktoweKompromisy

Aplikacja mobilna

Natywny mobilny menedżer haseł

Aplikacja mobilna na Androida była głównym i najbardziej dopracowanym klientem LibrePass. Łączyła Kotlin, Jetpack Compose, Material 3, biometrię, lokalną bazę danych i synchronizację offline.

Ekran powitalny aplikacji LibrePass na Androida z logowaniem i tworzeniem konta
Ekran powitalny
Formularz tworzenia konta w aplikacji LibrePass na Androida
Tworzenie konta
Formularz dodawania nowego hasła w aplikacji LibrePass
Dodawanie wpisu do sejfu
Szczegóły wpisu z hasłem w aplikacji LibrePass
Szczegóły wpisu
Generator haseł LibrePass z konfigurowalnymi ustawieniami
Generator haseł

Aplikacja webowa

Prototyp klienta przeglądarkowego

Klient w Svelte pokazywał kierunek rozwoju LibrePass na większych ekranach. Pozostał niedokończonym prototypem i nie został wydany jako produkcyjna aplikacja.

Prototyp aplikacji webowej LibrePass z widokiem sejfu haseł
Interfejs sejfu na większych ekranach