Skip to content
This repository has been archived by the owner on Oct 25, 2021. It is now read-only.

Documentation

Baranyai Gergely edited this page Nov 29, 2020 · 18 revisions

A rendszer felépítése és felhasznált technológiák

A rendszer kliens-szerver architektúrát követ. A kliens biztonságos HTTPS kapcsolaton keresztül kommunikál a szerverrel, amely a kérésekre json formátumú üzenetekkel válaszol. A szerver oldal a felhasználók adatait és a CAFF fájlokhoz tartozó meta információkat (pl.: a feltöltő azonosítója, a kommentek listája, stb.) relációs adatbázisban tárolja. Az Entity Framework ORM keretrendszernek köszönhetően az alkalmazás több adatbázismotorral is kompatibilis, a konkrét technológia konfiguráció segítségével adható meg. A tényleges CAFF fájlok fájlrendszerben tárolódnak. A szerver egy REST API-t nyújt a funkcióinak elérésére, melynek megvalósításához az ASP.Net Core technológiát választottuk. Ezen keresztül van lehetőség a felhasználók kezelésére, a bejelentkezésre és a CAFF fájlok kezelésére valamint kommentek létrehozására is. A kliens oldal megvalósításához egy Android alkalmazást választottunk.

Az Androidos kliens

Az Androidos kliens felépítése

Az Android alkalmazás elkészítéséhez a Google által fejlesztett és támogatott Kotlin nyelvet választottuk, mivel lényegesen nagyobb kifejezőerővel bír és gyorsabb fejlesztést tesz lehetővé, mint a korábbi alternatíva, a Java. Az alkalmazás alapvető felépítése az MVVM mintát követi. A View mappában található a nézetek létrehozásáért felelős kód. Az alkalmazás egy activity-t tartalmaz, a különböző funkciók különböző fregmenseken érhetők el. A felhasználói interakciókat a ViewModel osztályok látják el, valamint a szerverről érkező adatok tárolása is itt történik meg. A VM osztályok** Service**-eket használnak fel a hálózati adatok küldéséhez. A REST alapú kommunikációt a Retrofit könyvtár felhasználásával oldottuk meg. A Model osztályok tartalmazzák az hálózaton átküldött és json-be sorosított adatok Kotlin reprezentációját. Ezeket data class formájában implementáltuk.

Az Androidos kliens biztonsága

Az alkalmazás funkciói csak regisztráció és bejelentkezés után érhetőek el. A regisztráció során a rendszer ellenőrzi, hogy a felhasználónév nem foglalt-e, illetve a jelszó megfelel-e a policy.-nak. Utóbbinak az ellenőrzése kliens és szerver oldalon egyaránt megtörténik. Sikeres bejelentkezés során a kliens válaszként egy JWT tokent kap, melyet eltárol és későbbi kérések során header paraméterként mindig felküld a szerverre. A szerver ennek segítségével hitelesíti a felhasználót, illetve a token a felhasználó jogusultsági szintjét is tartalmazza. Mobilon külön felület tartozik a normál (user) és az adminisztrátori (admin) felhasználókhoz. Bizonyos funkciók, mint a kommentek vagy a Caff fájlok törlése csak adminisztrátorok számára látható. (A műveletek során természetesen szerver oldalon is történik ellenőrzés, hiszen a REST API-n keresztül nem csak mobilos kliensről kommunikálhatunk.) Az Android beépített biztonsági funkciói közül felhasználjuk az engedélyek (permission) rendszerét, hiszen a hálózati kommunikációhoz és a fájlrendszer művelethez engedély szükséges.

Fontosabb funkciók

Bejelentkezés

Az alkalmazás ezen oldalon indul el. Itt van lehetőségünk megadni a felhasználónevünket és a jelszavunkat, hogy bejelentkezzünk az alkalmazás keresési és vásárlási felületére. Annak kiválasztására, hogy milyen módon (admin, user) szeretnénk bejelentkezni nincs mód, azt minden esetben a felhasználónév és jelszó páros határozza meg. Sikeres adatmegadást követően belép a rendszer, vagy amennyiben hibás valamelyik mező, azt jelzi egy hibaüzenetben. Innen tudunk átváltani az alsó gomb segítségével a regisztrációra.

Login

Regisztráció

A regisztráció során a felhasználónév és jelszó pároson kívül szükséges a jelszó megerősítése (azonos a két jelszó), valamint egy email cím megadás is. Bármely mező nem megfelelő kitöltése esetén, vagy már létező felhasználó esetén a rendszer jelzi. A képernyőről vissza lehet váltani a bejelentkezés képernyőre manuális, vagy automatikusan, amennyiben a regisztráció sikeres.

Registration

Listázás

A bejelentkezést követően az egyes CAFF-ok láthatóak felsorolva egymás alatt, kijelezve azok neveit, készítőit és a készítés dátumát. Az alkalmazás felső sorában látható az összes találat száma, itt van lehetőség továbbá új fájl feltöltésére, a kijelentkezésre, valamint a találatok szűrésére.

List

Szűrés és rendezés

Ennek megvalósítása egy felugró ablak segítségével történik, ahol tudunk szűrni a CAFF fájl címeré, készítőjére, tudjuk állítani a sorbarendezés típusát és irányát. Ezen felül bepipálható, hogy csak a megvásárolt, vagy pedig csak az ingyenes termékek kerülnek megjelenítésre. Az OK gombra kattintva menthetőek a módosítások. Ezt követően a CAFF-ok automatikusan lefrissülnek.

Search

Részletes nézet

Az egyes CAFF-okra való rányomással lehet megnyitni a részletesebb leírást. Itt is fel vannak sorolva az alapadatok, de kiegészülnek a CAFF egy nagyobb képével, valamint annak hosszával. A lenti képen látható, hogy meg lehet ezt vásárolni 3.14 €-ért, amit egy felugró ablakban meg is kell erősíteni. Ezt követően lesz majd csak lehetőségünk a letöltésre. Ezen felül itt találhatóak a kommentek is egymás alatt felsorolva. Itt lehetséges új komment hozzáadása is. Ez is egy felugró ablakban történik, ahol egy maximum 255 karakteres kommentet. Az ábrán láthatóak még törlés gombok is. Ezek piros színt kaptak, hogy a fontosságukat jelöljük, viszont csak adminisztrátori módban elérhetőek. Átlag felhasználó a CAFF-ot és a kommenteken nem képes törölni. Törlés esetén a sikeres törlést egy Snackbar jelzi az admin felé.

Details

Vásárlás és letöltés

Itt már egy megvásárolt CAFF látható. A letöltés gombra kattintva a fájl automatikusan letöltésre kerül a „download”-s mappába, a CAFF nevével. Amennyiben a fájl már egyszer letöltésre került, úgy a név mögé kerül egy „_” és egy szám. Sikeres letöltést követően egy Snackbar jelzi a sikerességet.

Purchase

Feltöltés

A CAFF feltöltésére a listát tartalmazó oldal felső részéről lehet leérni. Itt első lépésként megnyílik az Android beépített fájlkezelője, ahol egy CAFF típusú fájl kiválasztása után megadhatjuk annak címét és árát. Az Oké gombra kattintva kezdődik meg a feltöltés a szerverre. Amennyiben ez sikeres egy Snackbar jelzi ennek sikersségét.

Upload1 Upload2

A backend

A szerver felépítése

A szerveroldali alkalmazást egy .NET Core 3.1-es verziójú ASP.NET Core web API projekttel valósítottuk meg. Az adatok perzisztens tárolásához egy lokális SQL Server Express adatbázist, az objektum-relációs leképzéshez pedig Entity Framework Core-t használtunk. A felhasználókezeléshez és a CAFF fájlok, illetve kommentek kezeléséhez külön kontroller osztályokat hoztunk létre. A kliens-szerver közti adatátvitelhez Request és Response DTO osztályokat vezettünk be. A szerveroldali logikát külön szolgáltatás osztályokba szerveztük és dependency injection segítségével injektáltuk a kontrollerekbe. A globális hibakezeléshez ProblemDetails middleware-t használtunk, így Development környezetben láthatóak a hiba részletei, de Production környezetben ezeket elfedjük, és a megadott státuszkódra képződnek le a kivételek.

Az entitások

Entitások osztály diagramja

A DTO osztályok

DTO-k osztály diagramja

A szerver Swagger dokumentációja

A szerverhez generálunk Swagger dokumentációt, ami a root címen ("/") érhető el, és a bejelentkezés után a token eltárolható a headerben a jobb felső sarokban lévő Authorize gomb segítségével, így minden végpont kipróbálható. SwaggerDocumentation

A szerver biztonsága

A szerveroldali authentikációt és authorizációt ASP.NET Identity-vel valósítottuk meg az általa nyújtott felhasználó és szerepkör osztályokból való származtatással, valamint a megfelelő attribútumok használatával a kontrollerekben. Az authentikáció során generálunk egy JWT tokent, amelyet az Authorization Headerben kell átadni. A token ellenőrzése során megvizsgáljuk, hogy hiteles-e az aláírás, nem járt-e le a token, és hogy a tokenben megkapott felhasználói azonosító tényleg létező felhasználóhoz tartozik, illetve tényleg admin-e, ha ez szerepel a tokenben.

Tesztelés

A szerver tesztelésére a Postman alkalmazást használtuk, melynek segítségével egyaránt készítettünk teszteseteket az elvárt viselkedés ellenőrzésére és a nemkívánatos use-casek vizsgálatára is. A teszteket két gyűjteménybe osztottuk, az első gyűjtemény a felhasználókezelést, még a második a Caff-ok lekérdezését és törlését, valamint a kommentek kezelését teszteli. A tesztek kimenete az alábbi képeken látható: User-tests

Caff-tests