From 4424032c36faf8794efb1f192781465e65a1d226 Mon Sep 17 00:00:00 2001 From: Hieromon Ikasamo Date: Tue, 19 May 2020 18:06:07 +0900 Subject: [PATCH 1/4] Abandon AC_AUTHSCOPE_EXCEPTCP, replace with AC_AUTHSCOPE_WITHCP #171 --- src/AutoConnectPage.cpp | 6 +++--- src/AutoConnectTypes.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/AutoConnectPage.cpp b/src/AutoConnectPage.cpp index 32ab578..77ed1ab 100644 --- a/src/AutoConnectPage.cpp +++ b/src/AutoConnectPage.cpp @@ -1573,8 +1573,8 @@ PageElement* AutoConnect::_setupPage(String& uri) { * Allow the page set upped to authenticate. * The argument parameter indicates that authentication is allowed with * the condition of the AutoConnect.authScope setting. - * It determines to except authentication in the captive portal state - * when the EXCEPTCP is enabled. + * It determines to admit authentication in the captive portal state + * when the AP_AUTHSCOPE_WITHCP is enabled. * @param allow Indication of whether to authenticate with the page. */ void AutoConnect::_authentication(bool allow) { @@ -1587,7 +1587,7 @@ void AutoConnect::_authentication(bool allow) { if (WiFi.status() != WL_CONNECTED && (WiFi.getMode() & WIFI_AP)) { String accUrl = _webServer->hostHeader(); if ((accUrl != WiFi.softAPIP().toString()) && !accUrl.endsWith(F(".local"))) { - if (_apConfig.authScope & AC_AUTHSCOPE_EXCEPTCP) + if (_apConfig.authScope & !AC_AUTHSCOPE_WITHCP) allow = false; } } diff --git a/src/AutoConnectTypes.h b/src/AutoConnectTypes.h index 168755c..3a3c189 100644 --- a/src/AutoConnectTypes.h +++ b/src/AutoConnectTypes.h @@ -52,7 +52,7 @@ typedef enum AC_AUTHSCOPE { AC_AUTHSCOPE_AUX = 0x0002, // All AUX-pages are affected by an authentication. AC_AUTHSCOPE_AC = 0x0004, // Allow authentication to AutoConnect pages. AC_AUTHSCOPE_PORTAL = AC_AUTHSCOPE_AC | AC_AUTHSCOPE_AUX, // All AutoConnect pages are affected by an authentication. - AC_AUTHSCOPE_EXCEPTCP = 0x8000 // Ignore authentication even if AP only. + AC_AUTHSCOPE_WITHCP = 0x8000 // Allows authenticating in the standalone state. } AC_AUTHSCOPE_t; /**< A type to enable authentication. */ From a2a100bc4c747c203a5fee4ba024464ea62ef7f7 Mon Sep 17 00:00:00 2001 From: Hieromon Ikasamo Date: Tue, 19 May 2020 22:23:47 +0900 Subject: [PATCH 2/4] Fixed invalid AC_AUTHSCOPE_WITHCP mask #171 --- src/AutoConnectPage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AutoConnectPage.cpp b/src/AutoConnectPage.cpp index 77ed1ab..d799815 100644 --- a/src/AutoConnectPage.cpp +++ b/src/AutoConnectPage.cpp @@ -1587,7 +1587,7 @@ void AutoConnect::_authentication(bool allow) { if (WiFi.status() != WL_CONNECTED && (WiFi.getMode() & WIFI_AP)) { String accUrl = _webServer->hostHeader(); if ((accUrl != WiFi.softAPIP().toString()) && !accUrl.endsWith(F(".local"))) { - if (_apConfig.authScope & !AC_AUTHSCOPE_WITHCP) + if (!(_apConfig.authScope & AC_AUTHSCOPE_WITHCP)) allow = false; } } From 61028083e631e3c1cca98d638e56bfea98d4ac94 Mon Sep 17 00:00:00 2001 From: Hieromon Ikasamo Date: Wed, 20 May 2020 02:08:04 +0900 Subject: [PATCH 3/4] Describe changing the partition. --- mkdocs/faq.md | 17 ++++++++++++++++- mkdocs/images/partition.png | Bin 0 -> 89363 bytes 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 mkdocs/images/partition.png diff --git a/mkdocs/faq.md b/mkdocs/faq.md index fa579a8..13e01ea 100644 --- a/mkdocs/faq.md +++ b/mkdocs/faq.md @@ -183,7 +183,22 @@ Link button to AutoConnect menu can be embedded into Sketch's web page. The root ### Sketch size -It increases about 53K bytes compared to the case without AutoConnect. A sketch size of the most simple example introduced in the Getting started is about 330K bytes. (270K byte without AutoConnect) +1. For ESP8266 + It increases about 53K bytes compared to the case without AutoConnect. A sketch size of the most simple example introduced in the Getting started is about 330K bytes. (270K byte without AutoConnect) + +2. For ESP32 + The BIN size of the sketch grows to over 1M bytes. In the case of a sketch with many custom Web pages, when applying the partition table for the default scheme, the remaining flash size that can be utilized by the user application may be less than 200K bytes. Therefore, it is advisable to resize the partition to make more available space for the application. The ESP32 arduino core has various [partition schemes](https://github.com/espressif/arduino-esp32/tree/master/tools/partitions), and you can choose it according to your Sketch feature. + You can change the partition scheme from the **Tools > Partition Scheme** menu of Arduino IDE. + + + +!!! hint "Change the partition scheme with PlatformIO" + Use `board_build.partitions` directive with `platformio.ini`. + ```ini + [env:esp32dev] + board_build.partitions = min_spiffs.csv + ``` + Details for the [PlatformIO documentation](https://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables). ### Heap size diff --git a/mkdocs/images/partition.png b/mkdocs/images/partition.png new file mode 100644 index 0000000000000000000000000000000000000000..be6588c30ddbe67981bb4e64945b777dea8e14ce GIT binary patch literal 89363 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ϕgw61h5_T5%~l@&W0$k(^iu`;8y(D&pV)I;KmE{Fm!jBwS)6WAf=@ zqtCl3bHy-Pe5BcZFM!kimvLc&k%_k{5ZY(Kt~MPAvLk4wHx~`A&0Sk~L2A7W&3v!2 z9T9it4zeUmd-Lv_>`own_PvQ(!yg@*8^|yNIPn=gK5}tZuPpenZn%lsu+AH$Xl366 z<&&5)o?2>HY*EjrsBWX8b57)YjZ8GNAX&-2)YW(OXY@!Hz?Q@phR%M|oUVe=tR*dm zH+qtRm?nWLQ*ljKcM}Oku6LNd>|sSajNdLVghF~44e*M=s3;9w#O^GCsy!$2o3375 zKP<`bbE(k=389nmLn-JgIag>l5uLuZP?uxrB4T=}ti5_NRVI-9y zYpMMc4jS6p5=?YY3QNZu`tX0oB~lIkvNwY>-n^iCg_G%7(RVjYTa029VFl4-dmj1! zAJvWoLsJ>ihX08(; zn9#h!k+8Mf-`{7y@3NVw@qdrh=ln_dUz7ScDE|$qzsX_x`)97c;aZc*%K-%{X187Tj*DWEd7! z!x=-R^RcA|1_D9?a|ioxvn2vzGL~5?DMApYc{7sISDG=LCvg}B$nkbUm$68YFYDNq zqm>K{BDnjk{BK!yRp3-iOi@(6#!hE5{$HICa zK$<&S%l(;E8L#$c8(y)0(;siohKM1kG(Wm$Sxndwis8(hnH}lVvw^6m zsJztW-2Qm(y9SnI8GRxEeZ46cNV0ZgP`WV=CfK1Nk3-g7!9y{Oo~1Q~VP`5p2ViXM zRC%2b1&yr)4wK7hFrK>}p!N-X$kMQsI~h|b=C4k(R+`-A6kx-a>U&tNTePwT9VR`% zUK($p7o%E?LKNr3ZW2dVFmh+QS8;F%ojf5~3tK`Vz-j-k$4fR zZ9l>X`i?@I)7@heZ0vHFIF|cc0{(m6`De(WUJWo-8FIL4a*zN0N50i=TXIx�jDR(O1K6<`AnxVzRpHejD=m`{pqE6A8^ z-QodL0G!`bE|0M-e1~OM&f&f*{Ry-vU5M*kb(J$OKt*A%$v*r*`5i!DePPrlL?$?< zgg)1>-xf}DlE%p=lj-7l6)S*GGsMN=$sLA7$s{MrPuaaC|Pad&F3kjx#L;P+n)@~cnTM{xn zn99hHJaOl(587XS#`*gUPde9i9E&#S0R7sT{=zGV!JRc9LjvKXm}g8tm|X*GK1V@{ z^gI9#Z$h^7F#sGh$A(Hsk~FsW8{ZASSdVrtJT@+>vfUm=4lWUsK+tY!tBrDchD1)X zr-1&AN-yW}1A)b9XP>eav?Q#R5IRhCkWQ|uEjr(jJ$Of{=`;*vJ=%%cTmzu&EG1Ua zJ^FQmeSHovVc&|wY1D{C5LNKk#OZii&|e}7z@8l&(v$k6OkPAR9t_;?xK(h67+aH3 z4Tqi-(mtH|}YRj&>#($CWId;YR|1OM?!vtZY_a})foE$+#3gyVZKGUpgX>tOYlII@t z{#UC2dga!6l)n-_Hd6e(fCG<9FE*e%+vPnZZZG7T2Tqbwb;94cIq_(nM|^AH^E-pz zYTKTG^a;GjtW&EdojEara*~ISpGr_RB5OHp>lKv>Fd8}EM5V+T8IHaSh!Yxe$QM*T zWB6JG@NHK`!aK*LbgvpFQO{bZ`*pDJEG=G~=%5t`67z+;sDv;xz7}ZRs&(}Xe$dm^ zCLA~d1PrUmP7oB>wXUKmS-P;}`M;Gw0RH~T_e=Y2n@uESEH}1YntQ5?i+*=4Now7Z z&lZN#`)5}+m%#CR4K!yfbQS!sBnv&n#JB(*^cKNi=c{XatgFn8Av^Lt^CcbWagRWD zUFBF_5;KLV00;yJFINus51qC{=HTj}n1=%bG5u~iqO zqOvH-AvliA9sJK>#~%H08ps7k<6`4VpbB;dz0mFU8E940kG$=M}NZQ$B?KhWdWoC8rR$Pu@9g){IzU%U%?NdtTZ&)76 zrBXmQXzWY&2=Vk3CwwU+itWFapY`@F_RxOk@Ys^#e`L!T{9s)4Zu%aq0>YHfV6p#| zlmor`Pez0_)2o}-;}QnSfkf*ow>}-!o$Wc~JX)|;PwzMJ+abs`%TD#U^EiCegJFOi z8<}s<7S3KonVlrdLsqtX3AexW=)D+MCl*es{h@1T&W&st4o3}|XG&bo2uj$fzZwcs=)g6$0Rwx0u0&o$2S)q@g$^_Vv4;<;4 zU~A)BtQvFo%)NEY1kR&a)BX0#w*?pWmY=;y^mXDpj2|1W0&ia7i`G6JRSmtkK^)}c ziW5Gq)s`A=GhI#!4wyanO0X_h`s|Fhb3r3{H~hfSQZV#%xiSUbXUT3F=Tcab>jK<$ zMyM)Gf%Wxx&f}7rafPF+ZS=F1yEqFaaJvSbNxDdWCL(zps5ZK-hbvyK2Qr@IA=dRi zHWtCJ)I@9TlpYf=_VYx?Z(Ozd3T4<1`t#JYuLt4XWe;@De=OO@k8i%WGX|Nmg(=A>QeC@8XC`?JNy=ap%8~6~4 zJ?SNJpM4`hCuS27yWa_+@3RrR{g;WehqXP2emgaF3W=b=_UDG^$(K?(Mw&tpS|U>!DEqcjtNS7R z-WcG^3vaLrvsXa~|2Niga=8*@Phr}sm@)xfq5X#dnd{H>_TwKmANbfD{FUGLpP%#Q zyU3-;mNT6?WKa-Qx0GYqnh! zxafPXFTL+C5Hs4beVvHCK~mv?lxa4WeKwq^yw_n)`7^C~;Aqz2V&3LJj$*cZNra!m z*-}rybK!0t!@Sb<=)47-dE1}vvD{t@LZU5~D{s`HOm{>+wMHYlC z=^uLba|EZuae zt)z>97RFHS=*fLVUrvIT?YMg6!Fwa~^>r2kx|h$)3(PFD+nNN z?#jTQ=cWQpZXn~a{)UwD=>+-8P^Azf`km+2@Kt50uMYab6*>bFH%u(kyi zR<=h)*+>OjbUJ99@G);;WoG+rC^Z9L@mKB)wa-5>+wMC+~k$oh8Wy4_ABjA-o~ z;u~et5nfn10_His3I*;z=rqc9KOYP#9=IOpxaO|-Iqqp%(v-QMb>|Q1H4%M5YrgEJ z)b0YEN$1~(noey*GLp$3$Q9%BdYjc>rC`uzhX4nB2Ig+(rtIuMJNK7fgOl@ALs{I6 zo-vciv33ZdAsEtU%JOr}`LI@9dI+N*DHnGj`vJOwYUz8Rbb41$cpDPl< z%cpbBRM^GbZU+yXbdw9b>I#(#mgw3(5E^Fd!J z_3%!Dc<$03*AEJIUeOINME3*!RMfpr(IF)&hLi+E4=!0f0Xz2RtPO; z%yqMVjzNitU>maM-Lk^^OA@ZYo=@{G@wLC6XOd%73IJV%Ap!c{Hn^FDHes z8+6$@j|{JWv&nU{-p{e>KSP>|i@-x4D+)V6U=idm@-sukpJv<;5?om6K3K|nB^B*+ zo)D;QdUSJru71_82E1!%?xuq1nXjWUn?<3BtU)x4<{9573Lin==Z%<0h1I?n^&{1i z!zaH}i@2XpTwR$?B+z?ZiA-D_iL;Z@3{z-}=_5OUoPIXlzRMR~^Wiq^owktI5 zE#{~s#-_`!An`myhXwXk@Zq-Mknkk^;m?kxPRjPi5S|WLn6Z@~0{E8vsTVyTG9jv~ z-!bjgkL=jY6CITz*S#uZgJ93Xh*hxnsc?no zvGaN|Mc7IF;ioC|)=>GIbr0klh9a1w9Iq|k+a=?_@_N7LsQ|vtbzq>rr+Qbeh!;7- z(ivjjd6TYQM6kT4UaK$RGQ(=jK<1&dtLAUdD8Xx%P-(c+G?&VrE=`}R)32Zjq_Owl zbeD`yXSoYS&pVHmVp`Ld$K9wGXC6LXjRS_4@Q``(Fk#5*tm^Rjk#n~4)? zjTiw3fGz7}mfdVSToMO1?#W?E!tpG+t^tu-Vd3^8w2V8CqdT*?@=VaobmP&Q%jW<@ zwQT6NsB2K=vRIr~bEX*M$&1Df9yN2QeGyHg|5d(tjO;lABRl z?UxN*gFjoVJF_6QXinU`2w=ElmwPRRD!-Q`!1an3y`)%NJ}M- z29X3V^7PkF!tiPwkJ&rF}`=Z>w~^@k4|G zwUMi=5)H?m=Wb)*Vx0rb-*NM6SF{>0sq>m11pI`}UJR8m03Q7EaH%Rk(WLnewBCYV z+d1xglt(AiLV~xt8|@!r5BFMJosRi#@;b`azHOqnR$Y3ZY)Ap)UqR9A4bipfpDC3UmA8m3D&pcsB^)Yus%%tbP1QY{lR8W77fo&2JC&qoBk)K^IiL9K||T z(B^D+*!S-x?TY$clzLZv-m?l(J`FS~yGPk&@!d+g!Y)#lT;tu}eFZS>A^eTn0EX6ro%w_K`189I@V8d~W>;7~L9ZnpML>#waQ1)q{=cRv zV0!$A)aKuOUGqCA)ma~y^XrQ8c|lb}!)6V5;hHepv0N} zb%4IYn1DXRLnAYpurT@fO7QwP@`Dm(IEl^jSXBDJhrDPMR|Uz36}w^-Hvfmoyomw> ziKJ4XmuGlf9BvvJ9u-RWTnm$`Grw<0SP4b;lM>j4hL@FER~Z8ZwQs~~bo{9wL)Gwo ziO;EeXpvU%gVq=TAz7@*j2%|(!BeBFn&(*8D_e-JoA6|Jzw^_Kqz>RmPUB3bNp|rZ zM=If;vZpW*ArSMTb5HC4`lHAuJ#8hg;%92o=&t{hqqjTsJ!epp!&&cb@3Fj53*T}c z9roYMl2FYQX_`Q(!OHCS-YUSVGrodHax!L|c)@M*cDmEo2dWY#Jb7sr$`G2X-dR5y zw#%usZ$5Vr)dCpcv-N_g-S=@M5$XYZUA+ii>|lk@sAxoV#~s2uUIG;OY35R|Y%!uD>#9|0TdE3^AVUSlg04P)DoS7U zhIHF4LG+@A;H3jyb#x5Y)DN5a+}Ce0NXG`^h|Mp3!KVUCfTpX$p>$RKc$Xt= zhujIAnp8o(bWir7UJKp*%(i`a$S4>X%*4ohkvPQdr|hlEYh%MEfFl}Or(`;tGkW&~ zN8Y2(QHqjz-ZmZay9z1;W~3rUfB9?tm&tU1iM=(SGoE>wmfqj!jlGay>G+3T;abjw zsDNGm?LRe62Cg*&sjD%6oakhBY+y32Y!2CiC`??^g(24S-%*o9LOgPxE@yrCGNHE! zdL$+$9l;F>WZ`+R8~QI{H&-bY!zFu1UMX>{G-k>n`gOWP)CUbp9qy&}^VI0VtLG1sF)<0PJehK4J9sN~+|yj^v7eun zJjFD8as~X0F;(oz<~5P$T~4jk6~(G3#r0h4{b5B=?#OA~-~%3MEeD-ZCe!Of7~YW6 zkF@Gg`7Qp_``JKQYX$tU5Q7F$+1PFut(`wrR2)zIpjA}Yv+~5UG&0jHoVgr)Aj8ok zDD6o~fJLjofs9=JF-2X~gs!;pcT(VKm(-fPBVv0ma2OPD=~^%5Qe?@|v9Dden9{(H z*yo&aVf<*~ApnsSEMyo>U45TJvoSu6#+kZ+C4~+6oTgVhb)e-Uq>&-%<&1f+@k=JU z>`9+Ev3rG8Smb;j%}(Wf=kh%}Bv{Ijz15{UvS21)>PJxA*tK3RP<)4gnt&%^yff#` z8s*0uFEdBrZ%AtY(+O|{;BSEX3cfJm6wZs%P~{?I9@Kw_-fRH$X8-DE+b_0Ra}Txs zK5=`^v+Mi&|JWfJ1L_nct6Uvv^1POxt}AM_`sG(U=#)hw? zKgXu_#$&?z=t9c_@oyu@P=%0Q#kQ(fgyp>lQN0^^4V6}F6#=y%sl2iFGqB@58La2y z!Q)fdHG4Aalfhn$V%BxuUXm2ZH|d&L!@#af(cPo}rJLb?elh%vC-L^5NiuXVTSRe>7W5Gia&`bl#GTre<-lwXdZ^<24O&m7?TIy8MB2X7;9g$z)(@{8erc(IcPJCd3(dW=&9HmC!=r4t zetlVd{7KgkD`;x2TD3=DlT$?oL6DI8VTV<&=>y7KB3~70+zq%);%G7S2n+WEZbJnO z6fA`Id%E|&rd}zvsBtW)J1Fk7KECkr}*iSkgB4m_+@cJCs zMm=zY+-~V;q+bIqna2P_o~r1~-s-aA&bOZyj!@qs&9@#y#G0U&wmO9O^64l~$g6*N zgNb>udW6qbq$z?PO+ew>>+hX_8~Aly_}3B=-b3&omGrSZwv^ooO4E#+-5)!Yp`k0( z)&vCoUbt_JS&agwIAL90f235R_bLj7(kT+(5BKj-S z<_BsHWCpx&FoBYX1OzS))0tP){s6XUUP!%a4M|7Iimx?IL3>uvpWq83Jp>vq|T({;A1N<7<*|xjtD*bEq7DWJDR6n=LDyQI-eZgLtA20BzZRjXA&A@{&cLm?kxL_h{wo zAH~%3X4qi08G}Ec%&|V)k0@jB$Rv!03NF~j=*dg6p8`Py(K?uNbn=vxbgvNKc=t-? zY07TlLp@w5VoFuzgX0eDc_alkFJ5Bd8BIZL|NRfb6Y)vpctF5w{I8sCT6E69v{Oyd z<&M4g^M5`fs)WahvS$|JQ7+>wA_#<*r@23M7E^^`m2zVXXKO61gv+-rClJ_)CA0=h5H#2 z#7u4|!_j^_5{oq&KZL#>sZ-3sRI>0)ZB@I$w9oGGF3(WES&RixB>AA2o~85A0wHE`sf9np!@9PdS z($!wXvqhKann|15pM6aOr8fw_);Xz+2NNl^03{7X2Gz`U9LCG;qR*owG&(eCqzkuG zp;oNURKDqQ8DD`{*vxAWMFtx)LOZbEjBuU;Rr(QX6LSiNUWIUG+<0Q5Q%@@XJ%XUp z|91#t)gjE#N=@l`Y4C>gyG;uY4n2a1zQd*eqn(0V(2D+F7=rCDhImd;n&U~9`Kn+F zQ$dN+hlLMf^oa}Gqg~0qxJg*Km=++OsxsUEJU;WX z7Hw1xnDjH_!-Wz^T{%TSaXF0k@q7sV4=hsTOGkNKHKtaQ=g>NYy0)W1vN?@xPl+8W6Xyio>!HNuCGp;MbCqS_;sS6iiaO3g{`%(SkjM_%tCs_gblJ zg3g0h8iy0s+igb%HilMO(yldZ06)UI2MwG$ub0YgVUp|6v{ zTY@0AEv%=NBAkG7x{GGM5T1~a-Vm=4e4{BI_D}~Ni-o!r9#et`cnGt9eCsv~WIF#- zMBsmDjQpBB5JfeQXl7=nYI-!QOrd?NiV;1m`fYZXp0!m>A_Gw+1Y7@Qj&=avaRqr? z$ww0qm1X+tDUJW5h^`zvL(8P zf9YjtkCbc-*vV>({lr+qwpX2RGAR`tl5GJtL9b zeJDJTT|M|izd5e{r=n*(pbQm*2vG~?e__n3`txlQ@Sg+#U$l^@NG&lO6tnBR9kf4rUmKAUzUVdgCj^aR>ukucQ Date: Thu, 21 May 2020 02:04:37 +0900 Subject: [PATCH 4/4] Describes for authentication. --- mkdocs/acjson.md | 9 ++- mkdocs/advancedusage.md | 159 ++++++++++++++++++++++++++++++++++++---- mkdocs/apiconfig.md | 23 ++++++ 3 files changed, 176 insertions(+), 15 deletions(-) diff --git a/mkdocs/acjson.md b/mkdocs/acjson.md index 67caf24..9ffef8d 100644 --- a/mkdocs/acjson.md +++ b/mkdocs/acjson.md @@ -25,12 +25,13 @@ AutoConnectAux will configure custom Web pages with JSON objects. The elements t "title" : title, "uri" : uri, "menu" : true | false, + "auth": authentication, "element" : element_array } ``` #### **title** -: A title of the custom Web page. This is string value. String specified *title* will be displayed in the AutoConnection menu. +: A title of the custom Web page. This is string value and specifies the *title* will be displayed in the AutoConnection menu. #### **uri** : String of URI path that specifies where to place the custom Web page. It needs to be a location from the root path including '**/**'. @@ -38,6 +39,12 @@ AutoConnectAux will configure custom Web pages with JSON objects. The elements t #### **menu** : This is a Boolean value indicating whether to include the custom Web page in the AutoConnect menu. If the page only responds to another page and you want to prevent the direct use from the menu, you can exclude from the AutoConnect menu. If this key is false, it will not appear in the menu. +#### **auth** +: It allows that this page requires authentication. An *authentication* specifies the following string that represents the authentication scheme. +: - **NONE**: No authentication. This is default. +: - **BASIC**: Apply Basic scheme. +: - **DIGEST**: Apply Digest scheme. + #### **element** : Describe an array of JSON objects as *element_array*. It is a JSON object array of the [AutoConnectElements](#json-object-for-autoconnectelements) that make up the custom Web page. diff --git a/mkdocs/advancedusage.md b/mkdocs/advancedusage.md index 4db1d5c..48f63dc 100644 --- a/mkdocs/advancedusage.md +++ b/mkdocs/advancedusage.md @@ -673,31 +673,162 @@ AutoConnectConfig allows the Sketch controls the behavior of follows: ### Applying HTTP authentication -The Sketch may use authentication to protect custom web pages and prevent unauthorized access. AutoConnect has implemented HTTP authentication based on the [ESP8266WebServer::authenticate](https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer#authentication) function that allows applied to several scopes. +The Sketch may use authentication to protect custom Web pages and prevent unauthorized access. AutoConnect has implemented HTTP authentication based on the [ESP8266WebServer::authenticate](https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer#authentication) function that allows applied to several scopes. [*AutoConnectConfig::auth*](apiconfig.md#auth) setting allows the Sketch to HTTP authenticate with "[**BASIC**](https://tools.ietf.org/html/rfc2617#section-2)" or "[**DIGEST**](https://tools.ietf.org/html/rfc2617#section-3)" scheme. [*AutoConnectConfig::authScope*](apiconfig.md#authscope) specifies the scope covered by authentication which is the whole range for all pages of the Sketch, custom web pages, or AutoConnect pages. [*AutoConnectConfig::username*](apiconfig.md#username) and [*AutoConnectConfig::password*](apiconfig.md#password) specifies credential as user-id/password pairs. The Sketch enables HTTP authentication with the [*AutoConnectConfig::auth*](apiconfig.md#auth) setting, also specifies the authentication scheme: - **AC_AUTH_NONE** - AutoConnect pages and custom web pages do not require authentication. Not protected from all HTTP access. This is the default. + AutoConnect pages and custom Web pages do not require authentication. Not protected from all HTTP access. This is the default. - **AC_AUTH_DIGEST** - Protect AutoConnect pages and custom web pages with DIGEST authentication. + Protect AutoConnect pages and custom Web pages with DIGEST authentication. - **AC_AUTH_BASIC** - Protect AutoConnect pages and custom web pages with BASIC authentication. + Protect AutoConnect pages and custom Web pages with BASIC authentication. -Note that the authentication scope specified in [*AutoConnectConfig::authScope*](apiconfig.md#authscope) is different from the protection scope shown by [**Realm**](https://tools.ietf.org/html/rfc7235#section-2.2) for HTTP authentication. AutoConnect assumes only one Realm and defines it as [**AUTOCONNECT_AUTH_REALM**](https://github.com/Hieromon/AutoConnect/blob/master/src/AutoConnectDefs.h#L239) in AutoConnectDefs.h header file. Instead, the Sketch will be able to expand or narrow the range of authentication by [*AutoConnectConfig::authScope*](apiconfig.md#authscope) setting, which can be either as follows: +Note that the authentication scope specified in [*AutoConnectConfig::authScope*](apiconfig.md#authscope) is different from the protection space shown by [**Realm**](https://tools.ietf.org/html/rfc7235#section-2.2) for HTTP authentication. AutoConnect assumes only one Realm and defines it as [**AUTOCONNECT_AUTH_REALM**](https://github.com/Hieromon/AutoConnect/blob/master/src/AutoConnectDefs.h#L239) in AutoConnectDefs.h header file. Instead, the Sketch will be able to expand or narrow the range of authentication by [*AutoConnectConfig::authScope*](apiconfig.md#authscope) setting, which can be either as follows: - **AC_AUTHSCOPE_PORTAL** - Require authentication to access for all AutoConnect pages, including custom web pages. + Require authentication to access for all AutoConnect pages, including custom Web pages. - **AC_AUTHSCOPE_AUX** - Require authentication to access for all custom web pages, excepting AutoConnect pages. This is the Default. + Require authentication to access for all custom Web pages, excepting AutoConnect pages. This is the Default. - **AC_AUTHSCOPE_PARTIAL** - Authenticate only specific custom web pages which are specified by [*AutoConnectAux::authentication*](apiaux.md#authentication) function or JSON. + Authenticate only specific custom Web pages which are specified by [*AutoConnectAux::authentication*](apiaux.md#authentication) function or [JSON](acjson.md#auth). + +Also, a credential used for authentication is specified in the Sketch using the [*AutoConnectConfig::username*](apiconfig.md#username) and [*AutoConnectConfig::password*](apiconfig.md#password) settings.[^3] + +[^3]:The default user name and password for authentication inherits the setting of [AutoConnectConfig::apid](apiconfig.md#apid) and [AutoConnectConfig::psk](apiconfig.md#psk). + +Here's a minimal Sketch with HTTP authentication for the custom Web page: + +```cpp hl_lines="26 27 28 29" +#include +#include +#include + +static const char PAGE_AUTH[] PROGMEM = R"( +{ + "uri": "/auth", + "title": "Auth", + "menu": true, + "element": [ + { + "name": "text", + "type": "ACText", + "value": "AutoConnect has authorized", + "style": "font-family:Arial;font-size:18px;font-weight:400;color:#191970" + } + ] +} +)"; + +WebServerClass server; +AutoConnect portal(server); +AutoConnectConfig config; + +void setup() { + config.auth = AC_AUTH_DIGEST; + config.authScope = AC_AUTHSCOPE_AUX; + config.username = "user"; + config.password = "password"; + portal.config(config); + portal.load(FPSTR(PAGE_AUTH)); + portal.begin(); +} + +void loop() { + portal.handleClient(); +} +``` + +If you want to authenticate only specific pages in a Sketch that handles multiple custom Web pages, set **AC_AUTHSCOPE_PARTIAL** to [*AutoConnectConfig::authScope*](apiconfig.md#authscope). Then, indicate the authentication instruction using [**auth**](acjson.md#auth) key with JSON on the relevant page. +**AC_AUTHSCOPE_PARTIAL** value takes precedence over [*AutoConnectConfig::auth*](apiconfig.md#auth) setting and tells to use the specified authentication scheme on each custom Web page. In the following example Sketch, it has two custom web pages, `Hello` and `Auth`, and only the `Auth` page is applied authentication without AutoConnectConfig::auth setting. + +```cpp hl_lines="26 45" +#include +#include +#include + +static const char PAGE_HELLO[] PROGMEM = R"( +{ + "uri": "/hello", + "title": "Hello", + "menu": true, + "element": [ + { + "name": "text", + "type": "ACText", + "value": "Hello, word", + "style": "font-family:Arial;font-size:18px;font-weight:400;color:#191970" + } + ] +} +)"; + +static const char PAGE_AUTH[] PROGMEM = R"( +{ + "uri": "/auth", + "title": "Auth", + "menu": true, + "auth": "digest", + "element": [ + { + "name": "text", + "type": "ACText", + "value": "AutoConnect has authorized", + "style": "font-family:Arial;font-size:18px;font-weight:400;color:#191970" + } + ] +} +)"; + +WebServerClass server; +AutoConnect portal(server); +AutoConnectConfig config; + +void setup() { + // It's a default value but has no meaning in the AC_AUTHSCOPE_PARTIAL setting. + // config.auth = AC_AUTH_NONE; + config.authScope = AC_AUTHSCOPE_PARTIAL; + config.username = "user"; + config.password = "password"; + portal.config(config); + portal.load(FPSTR(PAGE_HELLO)); + portal.load(FPSTR(PAGE_AUTH)); + portal.begin(); +} + +void loop() { + portal.handleClient(); +} +``` !!! info "PageBuilder v1.4.0 or later needed" [PageBuilder](https://github.com/Hieromon/PageBuilder) v1.4.1 or later is required to use HTTP authentication with AutoConnect. +!!! warning "Can not use ESP32 arduino core 1.0.4 stable release" + For ESP32, Arduino core 1.0.4 stable has a bug for HTTP authentication. The upstream of the master is recommended. (or use 1.0.5 later) + +### Applying HTTP authentication for Built-in OTA + +[*AutoConnectConfig::auth*](apiconfig.md#auth) setting also affects the [built-in OTA](otaupdate.md) feature. **AC_AUTH_BASIC** or **AC_AUTH_DIGEST** setting allows Built-in OTA to authenticate with the [UPDATE](otabrowser.md#updates-with-the-web-browserupdated-wv115) page. This setting is valid even if [*AutoConnectConfig::authScope*](apiconfig.md#authscope) is **AC_AUTHSCOPE_PARTIAL**. That is if the AutoConnectConfig::auth setting is BASIC or DIGEST, authentication will be required for Built-in OTA. + +### Authentication with the captive portal state + +When accessing the ESP module from an iOS or Android device in the captive portal state, the HTTP authentication framework is disabled in the OS of the client device. Even if the ESP module responds with a `401 unauthorized` with `WWW-Authenticate`, those client device OSs under the captive portal do not display the login dialog and deprive the user of the opportunity to enter their credentials. There will always be an unauthorized error. + +AutoConnect's authentication operation based on HTTP (not HTTPS) depends on the OS of the client device, so in the captive portal state, most devices will unconditionally result in an authentication error. Therefore, the default authentication behavior of AutoConnect does not apply authentication in the captive portal state. (It will be ignored even if the AutoConnect setting is not AC_AUTH_NONE) + +However, if you want to deny unauthorized access to the protected page even in the captive portal state, you can use the extension bit of [*AutoConnectConfig::authScope*](apiconfig.md#authScope). The **AC_AUTHSCOPE_WITHCP** flag allows AutoConnect to authentication in the captive portal state. It is set using a logical OR operator for the [*AutoConnectConfig::authScope*](apiconfig.md#authScope) setting and AutoConnect will enable authentication at the captive portal if the **AC_AUTHSCOPE_WITHCP** is ON. + +```cpp hl_lines="4" +AutoConnectConfig config; +... +config.auth = AC_AUTH_DIGEST; +config.authScope = AC_AUTHSCOPE_AUX | AC_AUTHSCOPE_WITHCP; +... +``` + ### Assign user sketch's home path **HOME** for returning to the user's sketch homepage will display at the bottom of the AutoConnect menu. It could be set using the [*AutoConnect::home*](api.md#home) function. @@ -855,9 +986,11 @@ A home path of AutoConnect is **/\_ac** by default. You can access from the brow #define AUTOCONNECT_URI "/_ac" ``` -### Static IP assignment [^3] +### Static IP assignment -It is also possible to assign static IP Address to ESP8266/ESP32 in STA mode. By default DHCP is enabled and it becomes the IP address assigned by the DHCP server with *WiFi.begin*. +It is also possible to assign static IP Address to ESP8266/ESP32 in STA mode.[^4] By default DHCP is enabled and it becomes the IP address assigned by the DHCP server with *WiFi.begin*. + +[^4]:Static IP address assignment is available from version 0.9.3. To assign a static IP to ESP8266/ESP32 with WiFi\_MODE\_STA, the following parameters are required: @@ -880,8 +1013,6 @@ portal.config(Config); portal.begin(); ``` -[^3]:Static IP address assignment is available from version 0.9.3. - ### Station host name [*AutoConnectConfig::hostName*](apiconfig.md#hostname) assigns the station DHCP hostname which complies with [RFC952](https://tools.ietf.org/html/rfc952). It must satisfy the following constraints. @@ -928,9 +1059,9 @@ The flicker cycle length is defined by some macros in [AutoConnectDefs.h](https: - **AUTOCONNECT_FLICKER_WIDTHAP** and **AUTOCONNECT_FLICKER_WIDTHDC**: Specify the duty rate for each period [ms] in 8-bit resolution. -[*AutoConnectConfig::tickerPort*](apiconfig.md#tickerport) specifies a port that outputs the flicker signal. If you are using an LED-equipped ESP module board, you can assign a LED pin to the tick-port for the WiFi connection monitoring without the external LED. The default pin is arduino valiant's **LED\_BUILTIN**. You can refer to the Arduino IDE's variant information to find out which pin actually on the module assign to **LED\_BUILTIN**.[^4] +[*AutoConnectConfig::tickerPort*](apiconfig.md#tickerport) specifies a port that outputs the flicker signal. If you are using an LED-equipped ESP module board, you can assign a LED pin to the tick-port for the WiFi connection monitoring without the external LED. The default pin is arduino valiant's **LED\_BUILTIN**. You can refer to the Arduino IDE's variant information to find out which pin actually on the module assign to **LED\_BUILTIN**.[^5] -[^4]: It's defined in the `pins_arduino.h` file, located in the sub-folder named **variants** wherein Arduino IDE installed folder. +[^5]: It's defined in the `pins_arduino.h` file, located in the sub-folder named **variants** wherein Arduino IDE installed folder. [*AutoConnectConfig::tickerOn*](apiconfig.md#tickeron) specifies the active logic level of the flicker signal. This value indicates the active signal level when driving the ticker. For example, if the LED connected to tickPort lights by LOW, the tickerOn is **LOW**. The logic level of LED_BUILTIN for popular modules are as follows: diff --git a/mkdocs/apiconfig.md b/mkdocs/apiconfig.md index 676605e..a3bf37d 100644 --- a/mkdocs/apiconfig.md +++ b/mkdocs/apiconfig.md @@ -65,6 +65,14 @@ Specifies the authentication scope of AutoConnect Web pages. The Sketch will be
AC_AUTHSCOPE_PORTAL Require authentication to access for all AutoConnect's pages, including custom Web pages.
+This setting is available only when [AutoConnectConfig::auth](#auth) is other than **AC_AUTH_NONE**. Ignored if it is AC_AUTH_NONE. + +Also, the authScope setting has another bit that indicates to allow authentication in the captive portal state. Its enum value cannot be used alone and is always for qualifying the above three enum values. +
+
**Value**
+
AC_AUTHSCOPE_WITHCP Allow authentication with the captive portal state. This value cannot be used alone to declare an authentication scope. It indicates to enable authentication in the captive portal by the logical OR operator with one of the AC_AUTHSCOPE_t values above.
+
+ ### autoReconnect Automatically will try to reconnect with the past established access point (BSSID) when the current configured SSID in ESP8266/ESP32 could not be connected. By enabling this option, *AutoConnect::begin()* function will attempt to reconnect to a known access point using credentials stored in the flash, even if the connection failed by current SSID. @@ -266,6 +274,13 @@ Specifies to import the built-in OTA update class into the Sketch. When this opt
AC_OTA_BUILTIN Specifies to include AutoConnectOTA in the Sketch.
+### password + +Set the password for authentication. +
+
**Type**
+
String The default value is same as [psk](#psk).
+
### portalTimeout @@ -373,6 +388,14 @@ Set the menu title.
String
+### username + +Set the username for authentication. +
+
**Type**
+
String The default value is same as [apid](#apid).
+
+ ## AutoConnectConfig example ```cpp