REST API

Hašovanie hesla

Heslo pri registrácii výrazne odporúčam odosielať už zahašované, aby ste predišli odosielaniu raw hesla, ktoré by mohlo byť odchytené.
Pri prihlasovaní sa porovnáva odoslané heslo 1:1 s heslom v databáze, ktoré bolo prijaté z registrácie.
Resetovanie zabudnuteho hesla
Pri resetovani zabudnuteho hesla (pozn. server a appka nepouzivaju rovnake hashovanie hesla), je potrebne si poznacit v appke, ze pouzivatel si vyziadal zmenu hesla. Pri dalsom prihlaseni odoslat naprv plain text heslo a nasledne vyzvat pouzivatela hned zmenit (appka ho posle uz zahashovane). Pri dalsich prihlasovaniach sa pouziva uz zahashovane heslo.
Prihlasovanie sa heslom na appke spoluziaka
Ak vy a spoluziak nepouzivate rovnake hashovanie hesla, tak sa nebudete moct prihlasit svojim heslom v jeho appke do vasho uctu, aj ked zadavate spravne heslo ( lebo spoluziak ho inak zakoduje a odosle na server)


Webservisové endpointy

Vo všetkých requestoch je nutné použiť v hlavičke atribút "x-apikey" s hodnotou API kľúču, ktorý vám príde do správy.

V geofence/* a niektorych user requestoch je potrebné používať O-Auth autorizáciu v hlavičke. Teda atribút "Authorization" s hodnotou "Bearer token", kde token je access token.

Access token má časovú platnosť, po ktorej expiruje. Potom musíte získať nový pomocou refresh tokenu.

Exspiracia access tokenu bola zmenena na dobu 5 minut, aby ste si vedeli jednoduchsie otestovat aj ci sa vam uspesne obnovuje access token. Nasledne neskor bude nastavena na dlhsiu dobu, cize nespoliehajte sa v kode na presnu dobu exspiracie.

Ziadat o resetovanie zabudnutého hesla je mozne 1x za 5 minut. Kod pre resetovanie hesla v emaile exspiruje po 10 minutach.



### Nahratie profilovej fotky -  !!!!!!! POZOR - upload.mcomputing.eu  a nie zadanie.mpage.sk ako pri inych requestoch !! 
### odosielate fotku JPG alebo JPEG ako form data, kde je jedna hodnota "image" s profilovou fotkou.

POST https://upload.mcomputing.eu/user/photo.php
Authorization: Bearer ...
x-apikey: ...
Content-Type: multipart/form-data; boundary=WebAppBoundary

--WebAppBoundary
Content-Disposition: form-data; name="image"; filename="photo.jpg"
Content-Type: image/jpg

< ./mojafotka.jpg
--WebAppBoundary--

### Ocakavana odpoved

{"id":5,"name":"a","photo":"photos/u-5.jpeg"}

### Odstranenie profilovej fotky 

DELETE https://upload.mcomputing.eu/user/photo.php
Authorization: Bearer ...
x-apikey: ...

### Ocakavana odpoved

{"id":5,"name":"a","photo":""}




### Registracia, ak uz zadany username existuje odpoved je {"uid":-1,"access":"","refresh":""}, 
### ak email existuje {"uid":-2,"access":"","refresh":""}. Vtedy treba upozornit pouzivatela, ze si ma vybrat ine pouzivatelske meno/email.
### Po registracii, treba kliknut na link v emaile, ktory pride na danu adresu. -- Bude dorobene, zatial bez overenia.

POST https://zadanie.mpage.sk/user/create.php
Accept: application/json
Cache-Control: no-cache
Content-Type: application/json
x-apikey: ...

{
  "name": "username",
  "password": "heslo",
  "email": "email"
}

### Ocakavana odpoved

{"uid":"id pouzivatela","access":"access token","refresh":"refresh token"}


### Prihlasenie, ak zadane meno neexistuje alebo heslo nie je spravne vrati {"uid":-1,"access":"","refresh":""} . 
### Treba upozornit pouzivatela, ze meno alebo heslo je nespravne. Ako hodnotu "name" je mozne pouzit name aj email z registracie.

POST https://zadanie.mpage.sk/user/login.php
Accept: application/json
Cache-Control: no-cache
Content-Type: application/json
x-apikey: ...

{
  "name": "username",
  "password": "heslo"
}

### Ocakavana odpoved

{"uid":"id pouzivatela","access":"access token","refresh":"refresh token"}

### Ziskanie profilu pouzivatela

GET https://zadanie.mpage.sk/user/get.php?id=[id pouzivatela]
Accept: application/json
Cache-Control: no-cache
Content-Type: application/json
Authorization: Bearer ....
x-apikey: ...


### Ocakavana odpoved

{"id":"id pouzivatela","name":"name","photo": "photo path without prefix, i.e. photo/1.jpeg  prefix is https://upload.mcomputing.eu/"}


### Obnovenie zabudnuteho hesla -  po uspesnom odoslani, by mal prist email na dany email s odkazom, ktory pouzivatel otvori a zmeni si heslo v prehliadaci.
POST https://zadanie.mpage.sk/user/reset.php
x-apikey: ...

{
"email": "email pouzivatela pri registracii"
}

### Ocakavana odpoved
HTTP CODE 200:  {"status":"success"}   - uspesna, email bol odoslany

HTTP CODE 500:  {"status":"failure", "message":"text hlasky"}  - neuspesne, popis chyby moze byt v hlaske 


### Zmena hesla  - ak je pouzivatel prihlaseny a vie svoje heslo


POST https://zadanie.mpage.sk/user/password.php
x-apikey: ...
Authorization: Bearer ..

{
"old_password": "aktualne heslo",
"new_password": "nove heslo"
}

### Ocakavana odpoved

{"status":"success"}




### Obnovenie access tokenu, pomocou refresh tokenu

POST https://zadanie.mpage.sk/user/refresh.php
Accept: application/json
Cache-Control: no-cache
Content-Type: application/json
x-apikey: ...
x-user: moje_id_pouzivatela

{
  "refresh": ""
}

### Ocakavana odpoved

{"uid":"id pouzivatela","access":"access token","refresh":"refresh token"}

### Ziskanie okruhov pouzivatelov

GET https://zadanie.mpage.sk/geofence/list.php
Accept: application/json
Cache-Control: no-cache
Content-Type: application/json
Authorization: Bearer ....
x-apikey: ...


### Ocakavana odpoved ak mam zapnute zdielanie, tzn. aktivny geofence

{
	"me": {"uid":"5","lat":"48.1555486000","lon":"17.0513821000","radius":"100"},
	"list":[
		{"uid":"5","radius":"100", "updated":"2023-10-28 16:24:34","name":"username","photo":"photo path without prefix, i.e. photo/1.jpeg  prefix is https://upload.mcomputing.eu/"}
	]
}

### Ocakavana odpoved ak nemam zapnute zdielanie, tzn. vypnuty geofence

{	
	"list":[]
}


### Ziskanie okruhov pouzivatelov - predchadzajuca alternativa

GET https://zadanie.mpage.sk/geofence/olist.php
Accept: application/json
Cache-Control: no-cache
Content-Type: application/json
Authorization: Bearer ....
x-apikey: ...


### Ocakavana odpoved ak mam zapnute zdielanie, tzn. aktivny geofence

[
	{"uid":"5","radius":"100", "updated":"2023-10-28 16:24:34","name":"username","photo":"photo path without prefix, i.e. photo/1.jpeg  prefix is https://upload.mcomputing.eu/"}
]


### Ocakavana odpoved ak nemam zapnute zdielanie, tzn. vypnuty geofence

[]


### Zapisanie svojho okruhu,  lat,lon su suradnice stredu okruhu v desatinnom formate, a radius je polomer v metroch.

POST https://zadanie.mpage.sk/geofence/update.php
Accept: application/json
Cache-Control: no-cache
Content-Type: application/json
Authorization: Bearer ....
x-apikey: ...

{
  "lat": 3.3,
  "lon": 33.3
  "radius": 100
}


### Ocakavana odpoved

{"success":true}

### Odstranenie svojej polohy, po vypnuti geofencu

DELETE https://zadanie.mpage.sk/geofence/update.php
Accept: application/json
Cache-Control: no-cache
Content-Type: application/json
Authorization: Bearer ....
x-apikey: ...


### Ocakavana odpoved

{"success":true}

Mozne status kody z webservisu:

500 - databazova chyba
400 - nespravny request, chyba niektory atributy v hlavicke alebo v json tele. 
      x-apikey  nie je to iste ako X-ApiKey, atributy su case-sensitive. Povolene len Authorization/authorization a x-apikey 
401 - neautorizovany request, mate zly alebo uz neplatny access token.
404 - endpoint neexistuje
200 - uspesna odpoved, v niektorych requestoch je prazdne telo (nic request nevracia)