Konta użytkowników i nie tylko…

Zakończyłem kolejny milestone jakim była obsługa kont użytkowników na hostach podłączonych do spine’a. Funkcjonalność pozwala na kompleksowe zarządzanie kontami użytkowników na systemach klienckich. Mechanizm edycji umożliwia zmianę w zasadzie każdego parametru – włącznie z loginem. Oparłem się tutaj o UID’dzie konta, który jest unikalny w obrębie danego systemu. Spine zarządza UID’ami kont – nie ma możliwości ich edycji. UID jest ustalany na podstawie istniejących kont w bazie. Oznacza to, że jeśli skasujemy jakieś konto, to jego UID jest automatycznie uwalniany i zostanie wykorzystany przez kolejne dodane konto. Dałem również możliwość wygenerowania (i wysłania pod wskazany we właściwościach konta adres e-mail) hasła użytkownika.

Przy okazji tworzenia tej funkcjonalności udało mi się stworzyć kilka fajnych rzeczy, które zasługują na to aby wspomnieć o tym w kilku zdaniach.

Ustawienia

Zdecydowałem się umieścić w bocznym menu na stronie pozycję „Settings”, która obecnie zawiera konfigurację SMTP. Myślę, że w przyszłości może się tutaj pojawić więcej pozycji. Chciałbym aby wszystko poza danymi do bazy danych dało się wyklikać na stronie.

SMTP

Uniwersalna konfiguracja SMTP. Jest tutaj wszystko co potrzeba. Możliwość skonfigurowania adresu From, włączenie, bądź też wyłączenie mechanizmu uwierzytelniania, obsługa SSL.

Komunikacja client / server

Pisząc mechanizm edycji kont doszedłem do wniosku, że fajnie by było aktualizować jedynie te rekordy, które zostały zmienione. Do realizacji tego pomysłu musiałem wprowadzić kilka zmian w już istniejącym kodzie. Np: dorzucić do pakietu z danymi ID rekordu z bazy danych, który wykorzystuję później w wiadomości zwrotnej do serwera. Koncepcję opisałem już z grubsza w Zmianach w protokole komunikacji. Ponieważ jest to dość istotna zmiana, która dość znacząco wpływa na flow danych i logikę systemu będę musiał zająć się teraz wdrożeniem tej koncepcji w pozostałych obszarach systemu.

Flagi

Istotną część tej logiki stanowią flagi statusowe. Każda tabelka w bazie przechowująca znaczącą konfigurację obszarów (apache, konta systemowe) posiada kolumnę status. Można ona przyjmować jedną z kilku wartości:

  • N – nowy rekord
  • U – rekord do aktualizacji
  • D – rekord do usunięcia
  • A – aktywny rekord

Nuda? No nie bardzo 😉 Każdy nowo dodany rekord posiada flagę N – jest to sygnał dla agenta aby wykonać funkcje tworzące nową konfigurację zgodnie z informacjami w pakiecie. Po wykonaniu zadania agent tworzy wiadomość zwrotną w której dla danego ID rekordu  z flagą N – ustawia flagę zwrotną: A. Dzięki tej informacji agent po stronie serwera wie jaką flagę ustawić w bazie dla rekordu o danym ID (oraz scope’ie: nazwie tabelki) . Analogicznie dzieje się w przypadku flagi U. W przypadku flagi D agent wysyła ją w wiadomości zwrotnej, na podstawie której serwer w momencie jej odebrania kasuje z bazy odpowiedni rekord.