Zápisky z vývoje - HTTP POST a COOKIES

Poznatky z vlastních modifikací zdrojového kódu, tutoriály, nápady, vylepšení, rozšíření, nové funkce, pluginy, speciální úpravy
Uživatelský avatar
mypower.cz
R.I.P.
Příspěvky: 4927
Registrován: pát bře 04, 2011 11:36 am

Zápisky z vývoje - HTTP POST a COOKIES

Příspěvek od mypower.cz »

Tak přátelé,
po poněkud delší odmlce (asi tak 2 roky) jsem se opět vrátil k aktivnímu vývoji Micrologu a po několika dnech vývoje po večerech jsem implementoval funkčnost HTTP Cookies a metody HTTP POST, což je nezbytnost, chceme-li implementovat zabezpečení webového rozhraní Micrologu pomocí hesla.

POST bylo nutno implementovat zejména kvůli faktu, že Cookies se v HTTP requestu pomocí metody GET posílají až za požadavkem GET, což je první řádek HTTP requestu.

Typicky:

Kód: Vybrat vše

GET /nejakydotaz?parametry HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123
Vzhledem k omezené paměti arduina a někdy velmi dlouhým parametrům v řádku s GET je nutno tyto parametry zpracovávat postupně po částech hned poté co přicházejí. V Micrologu je na toto ve funkci zabezpečující provoz webserveru pole typu char o délce maximálně 200 bajtů. Můžeme tedy uložit maximálně 200 bajtovou dávku parametrů a poté je už vážně musíme zpracovat, neboť další bajty z parametru nemáme kam uložit. Například program displaye při uložení z www rozhraní znamená velmi dlouhý parametr v dotazu GET. Ten ale zrovna v případě ukládání programu displaye zpracováváme po dvou bajtech přímým zápisem do EPROM hned poté co příjdou z ethernetového rozhraní. Navíc například i zápis programu displaye může proběhnout až teprve poté co si ověříme, že je uživatel skutečně přihlášen. Ověření bude probíhat pomocí Cookies.

Po přihlášení vznikne tedy takzvaný session a do odhlášení se nebude neustále dokola přenášet heslo v čitelné podobě, což by bylo velmi nebezpečné, ale jedinečný a pro daný session unikátní hash (například 1c3d5a64c58) uložený pomocí Cookies, který bude mít také omezenou platnost časově, pokud se zapomeneme odhlásit a bude zneplatněn i po odhlášení. Klasicky tak jako u jakýchkoliv jiných www aplikací.

Jelikož nejdříve potřebujeme tedy ověřit Cookies, zdali nám prohlížeč posílá platný session hash, bylo nutno přejít z metody GET na metodu POST pro delší parametry HTTP dotazu, které by se nám těžko umístily do paměti a které potřebujeme zpracovávat "on the fly". Delší parametry se totiž při metodě POST posílají až po odeslání Cookies, což je pro naše účely perfektní.

HTTP request metodou POST může tedy vvypadat třeba následovně:

Kód: Vybrat vše

POST /nejakydotaz? HTTP/1.1
Host: www.example.org
Cookie: theme=light; sessionToken=abc123

dlouhe_predlouhe_parametry_http_dotazu_prakticky_nekonecne_ktere_zpracujeme_hned_jak_prichazi
Zbývá tedy implementovat
  • čas platnosti Cookies
  • samotný mechaismus vytvoření hash ID po zaslání hesla
  • přihlašovací formulář z www rozhraní
  • funkčnost více přihlášených uživatelů současně, tedy úložiště pro hash ID, zřejmě pouze omezený počet.
  • odeslání cookies do prohlížeče pomocí HTTP Headeru Set-Cookie.
  • nastavení hesla
  • reset hesla zřejmě propojením nějakého rezervovaného pinu při bootu micrologu
  • ... na něco ještě příjdu.
Implementace metody POST se dotkla samozřejmě i změn ve www rozhraní, které metodu POST nyní používá a s Cookies počítá.

Změny jsou zatím pouze vývojové, kód tedy ještě není vydán a funguje pouze u mě na stole. Všímavější MyPoweristi a Micrologisti si zajisté ve stavu online loggerů povšimli verze 2.05sd. Tak tohle je ten vývojový Microlog. Hádejte proč sd. Proč.. no proč .... proooooooč? Protože chystám dokončit rozpracovanou podporu SD karty a ukládání dat primárně na úložiště na SD kartě a až v momentě dostupnosti internetu teprve synchronizaci na MyPower.CZ pokud bude mít takové zařízení zapnut přenos dat na MyPower.CZ. To znamená mimo jiné výhody i to, že i dlouhodobější výpadek internetového spojení (logování přes nestabilní GSM nebo wifi se slabším signálem, atd.) nebude v žádném případě znamenat díru v grafech a ztrátu dat, jako je tomu nyní bez podpory SD karty. Jednoduchý důvod, data bez SD karty prostě není bez funkčního internetového spojení kam ukládat.

Mimo jiné www rozhraní dostálo designových změn a vylepšení oproti staré verzi. Screenshoty budou k dispozici v následujícím zápisku. Vzhledem k tomu, že jsem se vrátil k aktivnějšímu vývoji micrologu, budu teď zápisky z vývoje psát zřejmě častěji, aby se přínivci Micrologu, jejichž počet se za tu dobu značně rozrostl, měli na co těšit a podporovatelé věděli co vlastně podporují.

Pochopitelně dobrovolný support na vývoj projektu Microlog je více než vítán a aktivní, významní a pravidelní supportéři budou mít zcela jistě značné výhody v individuální podpoře z mé strany tak, jak tomu je doposud.

:)) :arrow: ::fv:: :arrow: *batt* :arrow: :home: ::rolleyes::
kodl69
Příspěvky: 7694
Registrován: sob črc 19, 2014 8:56 pm
Lokalita: severně od Brna
Systémové napětí: 48V
Výkon panelů [Wp]: 8kWp
Kapacita baterie [kWh]: 12kWh
Chci prodávat energii: NE
Chci/Mám dotaci: NE

Re: Zápisky z vývoje - HTTP POST a COOKIES

Příspěvek od kodl69 »

neuvěřitelný, co se do kousku paměti v arduinu dá dostat. Škoda že programování HTTP je v arduinu tak komplikovaný na rozdíl od běžnýho webserveru jako apache+mysql, IIS2 a podobně. Je mi jasný, že většina webu je na externím serveru, je to tak? A co aplikace HTTPS, to už asi v možnostech W5100 nebude. Jenom takový nástřel: arduino yun - příp yduino yunshield - na arduinu nasazenej shield s ARM a linuxem, tam je to webový rozhraní easy, ale dál jsem s tím nepokročil.
ostrov skoro 8kWp neustále ve stádiu zrodu: smartshunt(ex WBJR), MPPT150/45, MPPT 250/100(ex midnitesolar 150 clasic lite), 16S a různě P cca 340Ah Winston, MP II 5000,( ex Powerjack 8kW, ex samodomo cca 4kW). 48V DC rozvody a spotřebiče.

  • Podobná témata
    Odpovědi
    Zobrazení
    Poslední příspěvek