Otwarta Platforma Wyborcza (OPW) to oprogramowanie klasy enterprise, którego podstawowym zadaniem jest niezależna i obiektywna weryfikacja wyników wyborów prezydenckich 2015. Celem projektu OPW nie jest kompletna implementacja wymagań sprecyzowanych przez PKW w ramach projektu PW2 (Platforma Wyborcza 2).
Sortowanie alfabetyczne po imieniu.
Członek | Rola |
---|---|
AdamK | Architektura, Java |
PawełP | Architektura, Java |
PrzemekJ | Analiza |
RafałR | Analiza i Organizacja |
RobertP | Analiza |
Jak do nas dołączyć?
Aby do nas dołączyć otwórz proszę nowy issue w repozytorium. Komunikacja odbywa się poprzez E-Mail i Skype.
Aktualnie poszukujemy
- Doświadczonego architekta REST, który pomoże nam ulepszyć aktualny serwis (security, best practices ipt.).
- Doświadczonego administratora Jenkins. Mamy aktualnie skonfigurowany CI pipeline dla 3 projektów (OPW, OPW AngularJS jak i OpenPKW POC_Kalkulator) ale na pewno da się to zrobić o wiele lepiej.
- Doświadczonego administratora kontenera Java EE GlassFish 4.1 bądź WildFly 8.2.0. Celem jest konfiguracja produkcyjnego clustera.
- Grafika do opracowania ikonografiki (przyciski) programu, tła, liternictwa, oraz głównego symbolu znaku graficznego / logo programu.
Element | Link |
---|---|
Tablica Trello | https://trello.com/b/hKes4OCP/otwarta-platforma-wyborcza |
Backend daily (Java EE) | http://91.250.114.134:8080/opw/ |
Frontend komisja daily (AngularJS) | http://91.250.114.134/ |
Frontend wyniki daily (jQuery) | http://91.250.114.134/dashboard/ |
- MySQL skonfiguruj serwer do pracy w trybie UTF-8, jako engine InnoDB
default-storage-engine = InnoDB
collation-server = utf8_general_ci
character-set-server = utf8
- MySQL dodaj użytkownika opw zgodnie z definicją w
glassfish-resources.xml
- MySQL Workbench wykonaj import bazy (opcja Forward Engineer)
- GlassFish wykonaj import
glassfish-resources.xml
- mvn clean install i deploy na serwer
##Wymagane oprogramowania
- JDK7 (migracja na JDK8 ASAP)
- IDE z obsługą Maven 3
- Kontener JEE w profilu full (zależność JavaMail) (preferuje i polecam GlassFish 4)
- Wymagane JNDI resources
- GlassFish pozwala na import definicji z pliku XML
setup/glassfish-resources.xml
jdbc/opw
dla bazy danych (plik XML - pełna definicja)mail/opw
dla JavaMail (plik XML - brakuje loginów, haseł jak i adresów)
- GlassFish pozwala na import definicji z pliku XML
- MySQL 5 na localhost (w pliku .mwb jest ustawiona min. kompatybilność na 5.5)
- url, port, login i hasło są w pliku
persistance.xml
- url, port, login i hasło są w pliku
- MySQL Workbench
- baza danych jest definiowana jako diagram ERM
- synchronizacja z serwerem poprzez opcje Forward Engineer (CTRL+G)
Przygotowanie wyborów
- Administrator definiuje / importuje oficjalną listę Komisji Okręgowych (51)
- Administrator definiuje / importuje oficjalną listę Kandydatów (11)
- Administrator definiuje / importuje oficjalną listę Komisji Obwodowych (około 27 000)
- Administrator zakłada / importuje konta użytkowników (wolentariusze, mężowie zaufania, około 25 000)
- System automatycznie rozsyła hasła użytkowikom, wraz z linkiem do aktywacji konta, na podany adres E-Mail.
- Administrator systemu ma możliwość edycji i weryfikacji kont użytkownków wraz ich danymi (możliwa fluktuacja użytkowników tuż przed wyborami)
Dzień wyborczy - perspektywa użytkownika
- Użytkownik loguje się na stronie OPW i wybiera z listy jedną z przypisanych mu Komisji Obwodowych.
- Użytkownik widzi na okrenie dokładne informacje dotyczące wybranej Komisji Obwodowej.
- Użytkownik wpisuje dane / liczby wyborcze z protokołu do aplikacji OPW.
- Walidacja protokołu po stronie klienta (JavaScript/HTML5) dla błędów twardych.
- Użytkownik wysyła dane/liczby wyborcze na serwer OPW.
Dzień wyborczy - perspektywa serwera
- Liczby wyborcze spływają na serwer.
- Każdy protokół jest walidowany, w przypadku identyfikacji błędu miękkiego protokół protokół zostanie otagowany.
- Protokoły są zapisywane w bazie danych.
- Aktualny wynik wyborów jest publikowany co 5 minut.
Dzień wyborczy / perspektywa gościa
- Gość wchodzi na stronę główną aplikacji OPW-dashboard
- OPW/dashboard zapewnia dostęp do aktualnych wyników w skali kraju jak i gminy.
- Administrator (admin)
- Użytkownik (user)
- Gość (guest)
- Administrator (admin)
- Koordynator Gminy (odpowiedzialny za operatorów)
- Operator Informatyczny (najczęściej informatyk, może być odpowiedzialny za kilka komisji)
- Przewodniczący Komisji
- Gość (guest) - obywatel który odwiedza strone aby sprawdzić wynik wyborów
- Java EE 7 (GlassFish 4, JPA2, CDI, EJB, JSF 2.2 (PrimeFaces 5.1), JAX-RS, JAAS, JavaMail)
- MySQL 5.5 (UTF8, InnoDB, MySQL Workbench)
- REST
- HTML5
- CSS3
- Maven 3
- HTML5
- JavaScript (AngularJS)
- CSS3
- Bootstrap
Proces wgrywania protokołu z perspektywy.
- GET Zalogowanie
- GET Lista komisji obwodowych za które użytkownik jest odpowiedzialny
- GET Detale wybranej komisji obwodowej (dane podstawowe, lista kandydatów, lista protokołów)
- POST Upload liczb wyborczych
- GET Wylogowanie
Jako prefix X-OPW
X-OPW-login
X-OPW-password
X-OPW-token
Plan implementacji
- [DONE] Definicja bazy danych
- [DONE] Funkcjonalność CRUD(Create Remove Update Delete) w przeglądarce dla obiektów
- user (+ generowanie hasła )
- kandydat
- komisja okręgowa
- komisja obwodowa
- [DONE] Wysyłanie E-Maili z loginem i hasłem
- [DONE] Użytkownik może zarejestrować numer telefonu dla funkcji protokół SMS
- [DONE] Konfiguracja Jenkins i działający CI
- [DONE] Definicja i implementacja interfejsu REST
- [DONE] Kolejne funkcje dla administratora
- reset hasła użytkownika
- aktywowanie i deaktywowanie konta użytkownika
- [DONE] Definicja szablonu E-Mail
- [DONE] OPW-T-4 : Generowanie E-Mail poprzez szablony FreeMarker
- [DONE] Integracja TestNG i Mockito
- [DONE] Integracja mvn release
- [DONE] OPW-T-5 : Rozbicie kolumny
name
w bazie danych nafirstname
ilastname
- [DONE] OPW-A-8 Możliwość zamknięcia listy kandydatów.
- [DONE] OPW-A-3 Import CSV dla encji: komisja okręgowa
- [DONE] OPW-T-5 : Definicja struktury plików CSV Komisji Obwodowych
- [DONE] Migracja repozytoriów do organizacji
- [DONE] Wykonanie mockup serwisów REST dla klientów
- OPW-T-6 Autoryzacja i autentyfikacja na bazie JAAS
- OPW-A-2 Import CSV dla Komisji Obwodowych
- OPW-A-6 Import kont użytkowników z pliku CSV
- [WiP] REST API dla klienta AngularJS
- [WiP] REST API dla klienta jQuery
- [WiP] OPW-U-6 aktywacja konta
- [DONE] OPW-T-2 Integracja SFL4J
- Pełna integracja z aplikacją OPW-client
- Pełna integracja z aplikacją OPW-dashboard
- [WiP] Definicja infrastruktury na nadchodzące wybory
- [WiP] Definicja szablonu SMS
- Podbieranie protokołów przesłanych na skrzynke pocztową
- Automatyczne parsowanie protokołów ze skrzynki pocztowej
- import poprawnych protokołów
- tagowanie błędnych protokołów
- Backend w Java EE
- Maski administratora w JSF
- Maski użytkowników w HTML - AngularJS + REST
- Wyniki wyborów w HTML - jQuery + REST