VulCode

Flaem

Natywny klient platformy hostingowej Flaem na Windows i Linux, napisany w C# na Avalonii, bez wbudowanej przeglądarki. Logowanie z kodem dwuetapowym, pulpit, wszystkie usługi konta, szczegóły serwera z akcjami zasilania zgodnymi z jego typem, powiadomienia, rozliczenia, sklep, zgłoszenia i bezpieczeństwo konta. Adres instalacji Flaem podaje się w aplikacji, więc ten sam program łączy się z każdym operatorem.

TypAplikacja desktopowa
StackC# / .NET, Avalonia
PlatformyWindows, Linux
DystrybucjaSamodzielne binarium
APITo samo co panel w przeglądarce
Flaem

Wprowadzenie

Flaem to nasza platforma hostingowa: rdzeń w Ruście, który prowadzi konta, rozliczenia i węzły, panel w przeglądarce, strona produktu oraz aplikacje na telefon i komputer. Klient desktopowy to natywne okno na tę platformę dla Windows i Linuksa, napisane w C# na Avalonii.

Nie jest opakowaną stroną. Rozmawia bezpośrednio z API Flaem, z tym samym, z którego korzysta panel w przeglądarce, i rysuje własne, natywne ekrany.

Panel, w którym siedzi się cały dzień

Administrator serwerów gier nie zagląda do panelu raz na tydzień. Ma go otwartego przez cały dzień obok konsoli, klienta gry i komunikatora. W takim trybie kolejna karta w przeglądarce to nie wygoda, tylko piąte koło u wozu: ginie w tłoku zakładek, nie ma własnej ikony na pasku i nie reaguje na skróty systemowe.

Chcieliśmy dać ten sam zakres co panel w przeglądarce, ale jako aplikację, która zachowuje się jak reszta programów na pulpicie. Jeden twardy warunek: bez opakowanego Chromium. Skoro administrator ma tu spędzać większość dnia, aplikacja musi być lekka, natychmiastowa i swoja na jego systemie, a nie kolejnym oknem przeglądarki udającym program.

Jeden kontrakt z API Flaem

Klient desktopowy nie ma własnego zaplecza ani uproszczonej wersji API. Każde wywołanie przechodzi przez jedną klasę klienta HTTP, która dokleja adres instalacji i token sesji oraz obsługuje błędy, które Flaem zwraca jako zwykły tekst, i odpowiedzi bez treści. Restart serwera z okna na pulpicie idzie tym samym kontraktem co restart z przeglądarki.

Najważniejsze wywołania

AkcjaPunkt API
LogowaniePOST /auth/login
Lista usługGET /resources
Szczegóły usługiGET /resources/{id}
Stan zasilania VPSGET /resources/{id}/power
Akcja zasilaniaPOST /resources/{id}/power
PakietyGET /plans

Adres instalacji zamiast zaszytego serwera

Flaem stawia u siebie każdy operator, więc aplikacja nie ma wpisanego żadnego serwera. Adres instalacji ustala od najbardziej szczegółowego: najpierw ten zapisany na tym komputerze, w pliku konfiguracji w katalogu danych użytkownika, potem zmienna środowiskowa, a na końcu adres lokalny. Ten sam program łączy się więc z instalacją każdego operatora, a w repozytorium nie leży żaden sekret.

Token sesji z logowania zostaje zapisany lokalnie, więc aplikacja wraca zalogowana po ponownym uruchomieniu.

Ekrany

Logowanie

adres instalacji, nazwa albo e-mail, hasło i opcjonalny kod dwuetapowy.

Pulpit i lista usług

każda usługa z ikoną typu, nazwą pakietu, krótkim identyfikatorem, adresem i kolorowym statusem, a usługi zakończone są przygaszone, ale nigdy ukryte.

Szczegóły serwera

dla VPS stan zasilania na żywo, limity pakietu pokazywane tylko wtedy, gdy naprawdę przyszły z API, wykresy, konsola i parametry startowe.

Konto i reszta panelu

powiadomienia z preferencjami, rozliczenia, sklep, zgłoszenia z odpowiedziami, profil, hasło, kody zapasowe i aktywne sesje.

Akcje zasilania zgodne z typem usługi

Przyciski zasilania wynikają wprost z kontraktu backendu. Serwer gry ma start, stop, restart i wymuszone zatrzymanie, VPS start, wyłączenie i restart, a hosting WWW i domena nie mają żadnych. Akcja, której nie ma, nie jest rysowana jako wyszarzony przycisk, a akcje niszczące wymagają potwierdzenia.

Natywnie, bez Chromium

Warstwę widoku rysuje Avalonia przez Skia, tą samą ścieżką na Windows i na Linuksie, z ciemnym motywem Fluent i skompilowanymi widokami, w których każde powiązanie danych jest sprawdzane już przy kompilacji. Czysta logika, czyli decyzje o akcjach zasilania, formatowanie i statusy, ma własne testy w osobnym projekcie, a aplikacja wychodzi jako samodzielne binarium, bez instalowania środowiska .NET u użytkownika.

bash
dotnet publish -c Release -r win-x64 --self-contained true
dotnet publish -c Release -r linux-x64 --self-contained true

Jaki jest finalny efekt?

Administrator dostaje program, który trzyma się paska zadań jak każda inna aplikacja, łączy się z instalacją Flaem swojego operatora i pokazuje te same usługi co panel w przeglądarce, bo czyta je z tego samego API. Okno nie ginie wśród kart, nie pokazuje przycisków, które nic nie robią, i nie wymaga niczego poza jednym plikiem.

Po stronie Flaem desktop nie jest osobnym produktem z własną logiką do utrzymania, tylko kolejnym klientem tego samego API. Nowa możliwość w backendzie trafia na pulpit tym samym kontraktem, z którego korzystają przeglądarka i telefon.

Pytania o Flaem

Więcej projektów

Inne realizacje z tej samej kategorii - zobacz, jak podchodzimy do podobnych wyzwań.

Masz podobny projekt?

Napisz do nas - wycena jest bezpłatna i wraca w godzinę.