-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME
More file actions
101 lines (69 loc) · 4.61 KB
/
Copy pathREADME
File metadata and controls
101 lines (69 loc) · 4.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
client http pentru biblioteca online
1 descriere proiect
acest proiect include un client http in c care se conecteaza la un server rest pentru a gestiona utilizatori filme si colectii dintr o biblioteca online clientul primeste comenzi text de la utilizator construieste cereri http1 1 trimite cererile prin socketuri si afiseaza raspunsurile parseate din format json
2 tehnologii si librarii utilizate
clientul este implementat in limbajul c si foloseste biblioteca parson pentru serializare si parsare json comunicatia cu serverul se realizeaza prin socketurile unix folosind api ul de sockets protocoalele respectate sunt http1 1 pentru transportul mesajelor
am ales biblioteca parson deoarece este usoara rapida si compatibila cu c pur permite parsarea directa a stringurilor json intr o structura navigabila fara dependinte externe complexe si este suficienta pentru cerintele acestui client
3 organizarea codului
fisierul client c contine entry point ul programului si functia main care citeste comenzi si apeleaza handler ele corespunzatoare client h declara prototipurile acestor handler e helper h si helper c definesc functii pentru deschiderea si inchiderea conexiunii trimiterea si primirea mesajelor precum si functia read_line_trim pentru citirea liniilor din consola requests h si requests c implementeaza functiile compute_get_request compute_post_request compute_put_request si compute_delete_request care construiesc manual cererile http
4 functionalitati
in acest proiect fiecare comanda disponibila are un rol clar
login_admin
autentifica utilizatorul admin si salveaza cookie ul de sesiune
add_user
adauga un utilizator normal folosind cookie ul admin
get_users
listeaza toti utilizatorii normali existenti pentru admin
delete_user
sterge un utilizator normal dupa nume pentru admin
logout_admin
delogheaza adminul si sterge cookie ul de sesiune
login
autentifica un utilizator normal sub un admin specific
get_access
solicita acces la biblioteca de filme si primeste token jwt
logout
delogheaza utilizatorul normal si sterge sesiunea si tokenul jwt
get_movies
listeaza toate filmele disponibile in biblioteca
get_movie
returneaza detaliile unui film dupa id folosind token jwt
add_movie
adauga un film nou in biblioteca cu datele specifice
update_movie
actualizeaza campurile unui film existent dupa id
delete_movie
sterge un film din biblioteca dupa id
get_collections
listeaza toate colectiile de filme ale utilizatorilor
add_collection
creeaza o colectie noua cu titlu numar filme si id uri de filme
delete_collection
sterge o colectie existenta dupa id
get_collection
returneaza detalii complete ale unei colectii titlu owner lista de filme
add_movie_to_collection
adauga un film intr o colectie existenta dupa id uri
delete_movie_from_collection
sterge un film dintr o colectie dupa id uri
5 flux de lucru pentru cereri http
pentru a construi o cerere se aloca un buffer de dimensiune fixa si se concateneaza liniile de start headerele necesare si un separator gol in cazul metodelor care includ body post put acesta se adauga dupa headerul content length dupa primirea raspunsului bufferul este cautat pentru delimitatorul crlf crlf si corpul json este trimis la parserul parson
6 gestionarea sesiunii si a jwt
dupa autentificarea admin cookie ul de sesiune este extras cu functia extract_cookie si stocat global pentru accesul la biblioteca de filme se apeleaza get_access care intoarce un token jwt extras cu extract_token si stocat in variabila globala jwt_token acest token este trimis in headerul authorization bearer token pentru toate operatiile protejate
7 citirea datelor de la tastatura
functia read_line_trim foloseste fgets pentru a citi o linie si elimina caracterul newline pentru fiecare comanda handler ul citeste campurile necesare de exemplu id title year rating si valideaza intrarea inainte de a construi cererea
8 modul de utilizare
pentru a rula clientul se compileaza codul si se executa fisierul binar utilizatorul tasteaza comanda dorita apoi valorile campurilor pe linii separate de exemplu
login_admin
username admin
password secret
se foloseste get_access pentru a obtine tokenul jwt inainte de operatiile pe filme sau colectii
9 makefile
arhiva temei contine un makefile care permite compilarea intregului proiect cu comanda
bash
Copy
Edit
make
acesta genereaza executabilul client si gestioneaza dependintele intre fisierele .c si .h din proiect pentru a evita compilarea inutila a codului nemodificat
10 concluzie
proiectul demonstreaza cum se poate implementa un client http in c de la zero prin constructia manuala a mesajelor http parsarea raspunsurilor json si gestionarea sesiunii si a tokenurilor jwt intr un mediu text