From ee498eadf93a1e5ffdc7932ed1519c875eadcd7d Mon Sep 17 00:00:00 2001 From: Dag Date: Fri, 2 Jun 2023 20:22:09 +0200 Subject: [PATCH] fix: move debug mode to config (#3324) * fix: move debug mode to config * fix: also move debug_whitelist to .ini config * fix: move logic back to Debug class * docs * docs * fix: disable debug mode by default * fix: restore previous behavior for alerts * fix: center-align alert text --- README.md | 4 +- actions/DisplayAction.php | 8 +- actions/FrontpageAction.php | 1 + .../SchweinfurtBuergerinformationenBridge.php | 4 - config.default.ini.php | 7 ++ docs/04_For_Developers/05_Debug_mode.md | 20 ++-- docs/images/debug_mode.png | Bin 21735 -> 0 bytes lib/Configuration.php | 16 +++ lib/Debug.php | 99 ++---------------- lib/FeedExpander.php | 4 +- lib/Logger.php | 15 ++- lib/RssBridge.php | 2 + lib/bootstrap.php | 1 + lib/contents.php | 7 +- lib/html.php | 33 ++++-- static/style.css | 36 ++++--- templates/base.html.php | 8 +- templates/frontpage.html.php | 14 --- 18 files changed, 121 insertions(+), 158 deletions(-) delete mode 100644 docs/images/debug_mode.png diff --git a/README.md b/README.md index a09d6553..b54194a7 100644 --- a/README.md +++ b/README.md @@ -183,9 +183,9 @@ Add the bridge name to `whitelist.txt`: ### How to enable debug mode -Create a file named `DEBUG`: +Set in `config.ini.php`: - touch DEBUG + enable_debug_mode = true Learn more in [debug mode](https://rss-bridge.github.io/rss-bridge/For_Developers/Debug_mode.html). diff --git a/actions/DisplayAction.php b/actions/DisplayAction.php index 3a262674..c71be5dd 100644 --- a/actions/DisplayAction.php +++ b/actions/DisplayAction.php @@ -107,7 +107,7 @@ class DisplayAction implements ActionInterface && (time() - $cache_timeout < $mtime) && !Debug::isEnabled() ) { - // At this point we found the feed in the cache + // At this point we found the feed in the cache and debug mode is disabled if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { // The client wants to know if the feed has changed since its last check @@ -118,7 +118,7 @@ class DisplayAction implements ActionInterface } } - // Fetch the cached feed from the cache and prepare it + // Load the feed from cache and prepare it $cached = $cache->loadData(); if (isset($cached['items']) && isset($cached['extraInfos'])) { foreach ($cached['items'] as $item) { @@ -127,7 +127,7 @@ class DisplayAction implements ActionInterface $infos = $cached['extraInfos']; } } else { - // At this point we did NOT find the feed in the cache. So invoke the bridge! + // At this point we did NOT find the feed in the cache or debug mode is enabled. try { $bridge->setDatas($bridge_params); $bridge->collectData(); @@ -200,7 +200,7 @@ class DisplayAction implements ActionInterface $item->setURI(get_current_url()); $item->setTimestamp(time()); - // Create a item identifier for feed readers e.g. "staysafetv twitch videos_19389" + // Create an item identifier for feed readers e.g. "staysafetv twitch videos_19389" $item->setUid($bridge->getName() . '_' . $uniqueIdentifier); $content = render_template(__DIR__ . '/../templates/bridge-error.html.php', [ diff --git a/actions/FrontpageAction.php b/actions/FrontpageAction.php index f015062f..f7ba56e6 100644 --- a/actions/FrontpageAction.php +++ b/actions/FrontpageAction.php @@ -24,6 +24,7 @@ final class FrontpageAction implements ActionInterface } return render(__DIR__ . '/../templates/frontpage.html.php', [ + 'messages' => [], 'admin_email' => Configuration::getConfig('admin', 'email'), 'admin_telegram' => Configuration::getConfig('admin', 'telegram'), 'bridges' => $body, diff --git a/bridges/SchweinfurtBuergerinformationenBridge.php b/bridges/SchweinfurtBuergerinformationenBridge.php index c7c935fd..349a9d8a 100644 --- a/bridges/SchweinfurtBuergerinformationenBridge.php +++ b/bridges/SchweinfurtBuergerinformationenBridge.php @@ -43,10 +43,6 @@ class SchweinfurtBuergerinformationenBridge extends BridgeAbstract foreach ($articleIDs as $articleID) { $this->items[] = $this->generateItemFromArticle($articleID); - - if (Debug::isEnabled()) { - break; - } } } diff --git a/config.default.ini.php b/config.default.ini.php index f67f315f..3a347036 100644 --- a/config.default.ini.php +++ b/config.default.ini.php @@ -15,6 +15,13 @@ timezone = "UTC" ; Display a system message to users. message = "" +; Whether to enable debug mode. +enable_debug_mode = false + +; Enable debug mode only for these permitted ip addresses +; debug_mode_whitelist[] = 127.0.0.1 +; debug_mode_whitelist[] = 192.168.1.10 + [http] timeout = 60 useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0" diff --git a/docs/04_For_Developers/05_Debug_mode.md b/docs/04_For_Developers/05_Debug_mode.md index 482ff0f5..6bdb1d48 100644 --- a/docs/04_For_Developers/05_Debug_mode.md +++ b/docs/04_For_Developers/05_Debug_mode.md @@ -5,23 +5,29 @@ Enabling debug mode on a public server may result in malicious clients retrievin *** Debug mode enables error reporting and prevents loading data from the cache (data is still written to the cache). -To enable debug mode, create a file named 'DEBUG' in the root directory of RSS-Bridge (next to `index.php`). For further security, insert your IP address in the file. You can add multiple addresses, one per line. +To enable debug mode, set in `config.ini.php`: + + enable_debug_mode = true + +Allow only explicit ip addresses: + + debug_mode_whitelist[] = 127.0.0.1 + debug_mode_whitelist[] = 192.168.1.10 _Notice_: * An empty file enables debug mode for anyone! * The bridge whitelist still applies! (debug mode does **not** enable all bridges) -RSS-Bridge will give you a visual feedback when debug mode is enabled: - -![twitter bridge](../images/debug_mode.png) +RSS-Bridge will give you a visual feedback when debug mode is enabled. While debug mode is active, RSS-Bridge will write additional data to your servers `error.log`. Debug mode is controlled by the static class `Debug`. It provides three core functions: -`Debug::isEnabled()`: Returns `true` if debug mode is enabled. -`Debug::isSecure()`: Returns `true` if your client is on the debug whitelist. -`Debug::log($message)`: Adds a message to `error.log`. It takes one parameter, which can be anything. For example: `Debug::log('Hello World!');` +* `Debug::isEnabled()`: Returns `true` if debug mode is enabled. +* `Debug::log($message)`: Adds a message to `error.log`. It takes one parameter, which can be anything. + +Example: `Debug::log('Hello World!');` **Notice**: `Debug::log($message)` calls `Debug::isEnabled()` internally. You don't have to do that manually. \ No newline at end of file diff --git a/docs/images/debug_mode.png b/docs/images/debug_mode.png deleted file mode 100644 index 6ab8917bb62e10365885cb2a4d422d5905ecfe8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21735 zcmZ5oWmFqow8h;Win|tfr??YbTHM`>OVQx&?(R~Y;_hCcxJz*7<$FKgkGIxcnMo#V zlB4(BefHc)Rb?4eBqAgT2nbX;SxEo{1SB>1{3ik&_*MT;+#&=7IfR^~xW>=y3qQ|n zlA(lN;!DpX!PjZqFVL-#E@;`%JWo!8t8jLCs07z*mV2B=E*!K(Y}M3aSoHbXuBoaL zSn>!pe{2>ejBmQKwP3Q0ZXO>;6lWIi&b*90Td=G?%V*@Trm|`;YhOIv-8Jv)E%W^F zzHv!{hYS>|;9nG!ISkY}40a-@VhW-{3IP)j&XU1P7#Hc<>AvIhY`tGX47nr)N>DKv6!&iZ%U^$$gaPkl8(cy!Y0!l2zF zr?!CdltZWK3$e$x4EAG3!NT8H7Z>gkY0xjR1Ki3ol&E{~p=3G&>285%n4;{ILwDG@ z(sX&CwT+FaEf?5L5LD{<)ZQEk|KB!-U!6SW&Y#P~!)>_rT&ja2MZsNhfs1?K-`FNQ z5YlixE3*r)WSzQO;gspdJwKV;E4c7tPViPEgb$qymLCmU!A~2kEj);Cqc2B5Y)GDp=%%_Gcxk!P-Y;lG^5?_ zJDPf@0s^inv(Z$>U#7uZ0s9Vpxd`6WAY^3O%=DO1f}Z%045lq2p?=DN zELxf}0fIl5ufH^sCnp4G&EXC?aFG&sIc& z3QIyf(6Z;OEjYK*r0BIOd#No9e;av1zoeZ#!NAL|$S9O+F#0*X<|t36#-Q4j0K{oC zhFGf9+a27IR%$t%r;tbt59!>C!=lo@v|E%&fj_IUy!iZd{v8x`bo_KP@KH6?l0#!z zg2hm{J?MGKQx$4g9DAFZMbJhULsw)SvWSAEM?}F8Q|1jw@80Z7adjiUDpDlV&z7mw zW-bn|djFtrusVMcXmj(g(=*=XMMm+pEDS?`g z2rN(ivoGnI9bSb762sIWnY3$?fYtzZCFBB^ac1d#c7!6f&%;@}Sr1_gn<#H*>ox-xj)%dzOldeNqBtTbs}u>sSPjoxuFIQb`r(zaJlB4LB2!<9huyU% zOeIR}L>yYZIdNphjUG4d$`P#23JnS6nSX`hU0pf#Y`?5}0#(`HOdKiOIiz870qa6N_vWhLI&EkA&k%kr!Waw@M7#)<&!ec1I+vtdv-2 z&MdBEOb!YALWcz7>5H`C@?pVzP?J8kH{P(d9pGCV)SdaG$v#&`Q_J}Z2Mq(Sv;eP5 zLY}1c*P4F-?&^%d>Dgc4VY>fvllG7{O#WSDC_gojCXU95zKyQAx4I6js>uAv&#ZzS zbyM!_?#VtasX@e_z`YLV`LA)Gn3H3Nmd+^e6vkANQUG>W=`C%VAN=Np#8d2dIhZ7)f9ujPE$~ zvIa9k757Zqb7WL!>ihqw`54t{1K2@|mZG7I@~j(Lf*M)+6={FD37~?FOpv;ird&p% zYSg9HXNMP`elP|hx4<>p7;Tj{37H7265s+Gp&*3|MwW-X0nu1u0!~X)Q^AW;?k)8Z zHb&0GoId!c&}ASNww81vHARLZC3qyrl4Gj;tAk=XNnc~2=G)2FU`$bE#$)s3dEAIZ zYNex*8S^4dhhjefT_?&K!Fg?u9G=M*19DTE02O>jT_#SH zgD+TdBbXxOny-a=n%QluL1ftH!?msSzIBDG0#+7ixw@ujm%b|u$*v~f^ z1@UG;x0=*|RQ~VvZOR8OYwYjvO@0Xh1$BX3s;(2z%x4PBc;Be8#Hk4e>R{jr3=Oh^ z<*I|e8Pi0zKBD+$xEG%-w`M|OH32eVse3Q#5#oa{#u&vqTzX-?uOy6_3Eham$U=#k zV9SN_WGKEM*b_5BQAif4fu*Ad0uC&Vv;dR|Vq8R0e8j`GF^zrA+U(kLRB03Z!3s4= zz9MnW4!ec$-M#!CTErv`>88%Aq+s_mCWs|(w8w@W?falsHVtG`k(y-7PHEC%769wN zY{6Pabqz@fBXBYA_knooJq_5Zcu^F@XjC{6|4L=5j_&t|h>G2aU^nD%1c&Ux-d>n* zPQZ>bQa5lIqALr#%UKOC+oJ4WA(g6J#`38~NdZ^vCs$qxlQ>0~Kq9Gbddd1S|H2iZIh@!cYlhUM0|MLwatPoxA z6?Xc!l6Wbr1XsMPg1A;9_28bfBqb({&!2WR2w6H7K>R*)?*|l?imw)guu`!IwYP~Z zi?JwK;`S#4!E;OvwOmhNv2`t3B#Y47+p>)h`6#;8m*?s=PhMDAq4lP*Ni&XFcalWv zC9bm!bEDNNAKE16kU)W_T@c@&9X1cg)awF9F#sFOrTc@f|Ch#7St5VYu+N;3xg2)t zq~*$@4WyhYy)t@me)(-M-GHRH;MPjAm^Sb!k~UEQ79!RezUe&(s`wj!TbMDQmKNC7 z<#fRcq?K^R3(KSNvc2Ug8cg<~{wgWki%~i)tl@L|P3@NIXpi<&roQ@+6W?f>%NXf3 z7&UiLqb+HZ?EEF+5xOWfgMO3*Ps>7bdK@@?9x`8UW)G#8-Rh9Ah)pa(Q^RUsDu`)n z7Dx2fKesk%ZRj@=bPC3CH*f&Dmnwwrhg;PkJhn6|@;UYTvN!poR}+VXvs`}~>7%JX z;@4|7%oj>tIl!e0RZw+VI}(Js>tO(qLp?P4POI}36EfVzO~0?^3V`G6b`Nl$dSQ&n zgv9}tTI(y3S*m&d zYK>;|TF9br$Wk1Xt1nR3Q7agw^ti?Mp^_ffUt_kKqBv~HYs${E_}kM)=n3- ztvqKVR99%89Lc?g6&Gq+qqbd26t%P92>QK1TyQGw=}vb zj-6GnG5895^qizcHv{3irVCW6dK&J*$^s<7iG*709dNr9Z=u1 zQt6l$L6X(*TCT(38`RhIHLVEQY^>sYW5}Q0k9L3($wiJCnB zm}Y@pvpM>S#gqm_V@lK^jTJ!q>-*siu-qz+)oVS?xM%%2?6_ zub%xZEl7_swI6l?)z`5j=t_A3bRpMuU$nFAgtw75D=adyM>gj)jDu>as9Kd`oE)1X zjVCP>x}i>)tR;hLc|C=>bo(ATCQ!R=XEObPqt%*~ z-aXK#gv_0767X3N$&q>~$Av08)siz@8H;l$obrby$~}8Lm(bG4nQf?~ru^wtg6aK8 zK+ye|z2f{t)V?#D)nwn!L0Q`7X?x1rPP1{;tZCE&JUEV#ik)XDNyv8AUxzz{l7W1H zZI#-pQ;In%6I!Rpa&&Sj?CD5I(RMrT(%??>9KeNWCdN>Q5zLrb<5zMiDz(XMx>mq( z{=1VGk$NYxs=SG+kywWLFPo%ew-~7T0*5?Z3g6rXu|U9r>jnh*i49WIa^+JsMD+9z z!oeORjE3};c@xvgz_o^E3Gb!Ut4e!;9<$Hab4@rNY5-e=>3861yQ=^!HR=R6{(c7b z4>T*ys~+z22f2OA3Ju256I}z<1N;Ri5D&ETKo-^@8p|#PuJ(F^M_wj_vnkb9Bgkl0 zal=hqeUG-bVH1fguh5k5al_WT690z?X91uh-++0y!Hbwc*v80P=zB{%V7)2HQGE#A z6DPh(BP11&2QEpPI|3!))7)c4y;gsJCvQim1I=zhfOBi&SaFkiQQ$sgh!svyErLV3 z4m=LA(<~@Q$~t;oTgc$-WDtv&syU^t|u<#HpTUD3aG@#ACDc zZ<#rj(bu4sg%Qb9rjo-l5l8IBb!h4eOrAIp3OvqU<(}htod_05X%GAS!eq07I$j)9 zpm;c8t}U|BdYrwJzY|M3U_HR9B){TrXD~347{uOa8@UW!@&O4L#O2A%GqqolkC5lD zUeEbMW}$(8d2OvWxw;Z##1>(-=#md0!%|m0)X>6#ZO}pKH^Rt)4{rAfD^byQgdVVQx>B-yC*@=k&gAv)D z$|}5RvUZIUjUy%A{LRCpkv^wYUOHV8*woJBEzcjLD_4ZW9Nk$Vf9^Hc>3GRrWs+cZ zo`tEb$(o;pdrqG4>_2xlXNBX_D#s@WA*+4vzDbM{|0HFw`atct;Y-c|doukUm~YQS zpCqbO%Av!Im$1a~gxRJ<+#@NKUK|3lR?BTJYzHF${@Icq)wEe>Hj_ZniD0v_XS0UpBDZ zCZ(CAFTBW4&0qu*SypnVM}#WuwGD2T5Q!fdRk*@5dCbfxv(#0R)Fv(aA_LhCtMp-z z7^1L(mw8Q$#{k;DbTd{jDm93fv4ZN3=@BxLBZuT2{ zOZJ}?>JPBuA~NcU)XYEnT7&^3%$mfwGZT;bkn@pA=6^pmaB}*|p@Ja5BeFEVUGm&>-h3g+R~CvK(M3U*AypB8Sr*?yO{5~d@!qC4hJ*Ghobcwqa)*o zsCt{FuV%D=lbfF;@JCB?fX#>i4oCBwicWtR46g_jOZWRaK{(mp{fZzbKf$kH$s8%DPPq=P4ddD(0E2w`25KKm4IBa*u#L!3mnK*HGZ8%Opa zPRr+0zc3TUAZ^wB3-cIrjgS~1OeQ7C+kNGr2vRCw1KZG~A)T%y?C^;O3z5l1m|(D0 zNluv^*PvmfCH}aAD(SYTS!p3rhjHd|3ZS`>cIAN|&>>qt0LyKqp}EIr;SF`c^RLNQ zNhBr$?q%47{q9^&YY9crIudb+P9iPb$qFUMPRp`I>=I%RwWgU&HV_-q1%q zFLw}ncF_hc-i#zPh@KuCGzCpf*x$c@KW_CS5Z*Lq-XtF2b~X3SRe8n;`cus%5M>^B zd*Rf4bu^0yTOCR1eB$}$NCaO@pX%1}AuO_&hiC|11<~WU3>$9}RS5jB$_Aq9twYNe zQX67g8ML>2DNrp3!mIJ)cjWwIft%~Bb9{VhO*biBuy(Vn+iE4|Wdc6bXE{v<>ssSN zj#Q9DQQ#mMe@^q!eSRfpe}oAr+}Li-umi4_1`f8`ormz|C>Omlw4CC+H7OJw9|pz? zG)VDR1wH)K92K9SM)g7cT&*gNdwEWePtYJ=MQZU&Vn(P2I6c=QV6{Gv3JyK1 z!)MaVxt238@Er$=X=|s!5h)sfe$I9L)E>l;hPX-g>fr zF(me&N)HBd_V`i;`FHCq-RlHd$<>F0&hBs&l=xLap1Rszr-zJTdY!rs@^fwYO0vLx zT)mEP%fl|3dSk_O20q#V=E#~zo3jW;s#jiNkcouilxZoBu&^*G+dl>j1f$O_`daMd zczbKjIgYu(E#J94vr^EvUu!+|Jf&?qe>9c&=iG&=z5GlUS+yM z>*xrle*R{RCY>JYbM*RYXu7h+htGB@&_YN)r!F%v+t4+B#pPtrNrtt+4=1a2(-wOW zg+@UhqfsyG;!5<+fe8j>y{qW;hX}|UZiwvk7aHh-n<~>aoInd4ZquHF`fzUMW%+$t zFi8H2{Moo0D=vser@m^;31M?%HVR5G^1qfuSe(_S@vlc{Ax|iVM0u()$*@}dD|#hi zsnQLODfGAGK{_(BmkDh&i z9e_AMC%G>rDyiM3BHA{!s@>u@&{o^3-JvA*zk^3;SXCOsf7h7s>70iOVZIs?j2s~E zwg36JSYk4_OByuS&V>6<4cuoHoCz0?C;Vf@zFv7w1l&%E6KJu|{T?7~73MvF?LMe?XAczPTj&TxPm>Avo=LSkMAm zl+tQA%-_lD0a{_0z>%tXBdc}@k`*(K$i9#Dz`?*!dt6OTlK58a$dL96VGyH}C0=P| zrA}+T_tuB27rKCVW!p4m8BYo{?X4aBkfljPBJlO%o8J7|MRg%18MJw=sS3?>bz)MAW^#3Nm3jcA8q_gxEVXb2T zTuBie5u!9k_PlUfH1C#EiXnR%BN2H2tU+H|QseXJosD3xj~$0@#>>#!(;a9baG*M< zxc60C73B9<=Mw4lT(v?(GSDdu7(uiu$4kCv(5QuAEmZ)b@zt#H^#bEsCMa9h8U&jF z1O%kxt#zwkJm-IwhYqge(ZmIKsG+ZeqZRpl)euJZJR~9XVb;Dk&!<#n10R0dN=bCDP+pX9}8^EQj2r=k4uHth(CzRTmXO zkh>TrNo4h60h=K6Q@TGQm$m^mNRN}tSX;+*oEJ$nD5by#o<4@Ekk@XuLpBJSedYi* zdU~UVzkwGge)W_YrnuXIl(^RlL>E<9)BV{w1WuDiE9^8CX4Br2c98(e_g=TMJH&v&b4|iG~ z&jpAAWOj2Ye-zpzoFgO$%?Gt2OyeM&#Xz#!0GJ|4O*;egcM~17`>l#A5QtaR+`(7} zc*bB(`L04;8BF-;)Aj{hs!gf8yL+|A`+EII-D;I5VM*O&q|4V1O*pe;t{o@7eC7{& zyjEyY>>nVMme)vgA-(eV;!_+9*tClz;b|Q`;1GIz?e>u{CH`3WDDaT#oQkB8mAt{Z zkYi(kR&xX@M#aeI50n)TuMl5j4R+Hcnq68IBbF+7O{D^P;?%+-hvof10}8Ed9r#&T zB|^@wTYP`3OHM}?J@$nRI(g!-wh-kv!)_C9__HSS8F?U~Yo&JJp5+;W<(sw`t; z8lx*eW`+gI4?!Mg$2k(@ovxub1?mS!Gh5 z;Z=@7|Fpa5v=j0h}ys0wI&jfC{e?D zsBze4=XPHhI{`knC`?4i@9IUVU~$4CD^Ik;v<_B5V^%~z1%(+_po!?*ty#X?ig4Rf zNENY9)}Dq3-+EFP@Ys}$GCJT5nk_ZOqiJs_e${5J@~C>VQ-CONTIHoribG5?CxrK) z=bQEl57YNHu_)DNv)ziliwq6O!873$n#TFgF&NWPWvQAqBa{W%oxs_hI*d*l3AW|+oNmGjN z63lZ@uqzT~+N?m1qv0@#&!(vb5#1jgtNL}zK*=^eu0I(s73m!8h5D8vN#8Xt8q|;@ zugF;GToebE_NtDW%@v7}JHF-a`3!%7r7l3X?rrzLxI!qwOSF33eRSA*9IKxGDHN;9 z77Ypx+#(aLkf?H4bItyU6lI7MDxuTX@nVsm zXQxaqE&;cCRbd-Ew!ffnRl|(>**W8e27DqAq#$47^s-H7^gpahHJ@u3m4I&`62_0m< z;=~^(xC+na`!kD{wdSGAso@xg^KUjbm2byKlF0%;UT`X7`h+InV z7ZvtR;rn5i^cC-3{{7LdSi#>`ZL*JArS$ji=XxoMgF({pfr3&tuO>czpd+|aMYhHrxDeiah)mlTaY_Fvsrs|JIv10hn_CIYR~F07{PURU-y62EyL3PNY#LCr zQSN#s%l+;c&Wjf*O>*VM7<3Elre+BY{sy6jZg2eh@;1TE1JdB|SE7A;B?22wMN{z)r4 zZkkn=HFfM4^#tn5p@cq)rd+3cQocO2cLSRj0mT3XNg=M~Au=50Uw$`l! z7izCgk&*4P0@jo^;@J7-mrMfz=njUuVe5`@-P`cStjO`)>dTm@M`q1^TqG)>-&bk0UJ zs|7n4d6XPbv$Iy%O^89d{Ans~Sng(u4gO zSF^)XL%V{E~`_Cbi;QmZSXLOB^C6OcuW$@M?hopZ|Tkls(^!` z<-b@|IB9#{`uuM)X{U#L^Xi5oVk=jp+mO`$64rf0S*n>)nkq(bz-kb^;Ch&kAdeLGI8NgQHreZETeBFZ(L8|$ZY-e)LWPkeZ!$vR}#$vo(? z%sc8ZvUX9*-yp1L;Fs&9t9X{@32h>q1`slj*TJ|lsgB{JL)4xmI=LJH_~v;NdH))F zIGJLWSuB@?bUF*oYz5Fzl8-A4x~V=H#ddE4t%|vGRB7vd5!dw);|o)wl!(8a>*0cq zQzMlGNa*#*W8tjlWC28LiW4PI-%D639c0B1RGV2Fp(L@jqkf9nSU4~cTpP)~ej5o! zVuiJ)?OF^MQ!%3__iCj#=yr!Aq7)6;wl3X%pd&!hq5%R=nblNHZie*_{oM=8KO=*% zF0hqK@&gC;W8EN2D+mf(tqHTm$Rp@hT)YyCuyrW-_zwoet^5n=u>+SEEnF_)r6(Ip z#d}(mSBb?6vB#m|rEGXAP@=7Jk<=|nV0?Q} z4eS51UPYl(7at1w&4{(CjMUX>Q-I)cr>0q2oXY=20Xr9d|9hoDnk{b7h(`DK8PtbH z;riJYNJg%PJT^0*zx?Iip50`FciE89(bq7PH^2$6$gq>^$7GT+_5vs^g|YTWfsykl z)EDV$KfRtb7NpcroIli;A?K?ZYQ)zdwfT6A4yyb$h-67^3UGBTCIy*xqOqwj^Q4)a zieDltr;Uh2s&Oredh5(I$yF?Z(DRj}DK?!m8V(Y08;=A<)f;4jH286&Hf5J}cm!Qk zC6L$4IeW1pfOioWx;Xmx<`&#r&+C;O34HuAYXiM#C_a*87~@q^JQlu7H&c3U5n1Zq3aLI1RQUh^M!@_ELAtuYdq*iO-!%otZ93 zs?8~-F9wa{QyvX0o-9Xv@;WNth>*g02*m@oVPI*7dDV-*E%|rLogtHR3$(qx-2`hz zJ&CBVYoFNE9;NgkE(5MF=={x z8Qq%Nnh+^V#Uxw$Dj$zG)wI2OJ+pB1v+wXbjNa(oep60^^tZUm=dZq#SO#rBh7n0E zTcd3~LNPG^qOpwk?&GsAd$wYz>;5|kCc)VnDY)TIl!0<42*ibFk znry9W;kj^wqjL4_k7SK9<6SfAI!_Yv%MX!Dpf+t!oY3dpCeHqoeLh0^+f#Ad&CT9G zo7~31t>`;MMTzFnm^yd#YK>{$zVMKy8Hvidmh%CZ$XD5ZR-Ujq7K9G-K-c`%=wkL!%@B<&XYw=lDC%bNQ@`2e z_1W$z@@CJ6eB+9hAW{P6g`>^in!y(cl!cRY`3FxbL{`Wnd3C8k_8h8w_amVyC;(qn z3+zBq^q(Y#jbU{t1u{x+eMgN;sbIbym1Z`V-aw@Pj1cqAu)Q&iEFY@yP1y(4kF9q+ z^mX)v>TAEED{GC~@JNVXdC7VVNN?7ehIG$pQ7~e~`GuZQ{v&X;c%XlW@REf;bEStZ z!GDSg<5^eEFK0vgF!w5IRNw(RR{F`xq9^mDD8do5E@o7Z#s7UBS9hCqJJZ2vPo1bX zqi$F9OV{{EyEBr1Cr^+P zZNEjmun=YG?d_L|;>2536I{ikOKDVZSM4^`2uRy4Iv?qw2K=bn$yH*cy##TkW`k-C!_ZYJ@hCxYXovG-`d>%{RKg+uz!H-BXal)r~nzK zUgsPebsc9&NR1bHue;YpP_^*_S=JF=Km*7j`OU370-mzNegBu!vyf~r0X1o|6&JUm zeon40N#qNt6`C4zb`iRWB9JJXpMM@dw7>r4v}Gb-`h!C>kzO-04yH^zmom_VTpF6~ z`5Nxy?o76z4V8QeicqwyM7A%Mi^i){)iCAJ2~wRiN~7iqJ~-Ulo>b_k>d!lsqT=_$ z9;u*2E|c70=Q#}c^@oIFbVnw!!X)o{ox!?O9O>7=pV++{dXmkQB69+N{k#QLS;R0I zv>kgws%WkFync}OZ}l4@*yvITm3RZ5(y3T!4-eoxK$VGW07UJZ$K00FcA3JF6Pn4q zqJk35kXhWE)Jq(wRx4BVe z+(}ep)GO5q9MCUGv4c#D)dKBU^Sf!iu`F6VIeJ77z8zvzM@UGG>+q>dDO3e{{XUJ4 zwm9s}oowVOvZvJpv(P#!L)?b+Z@aRm_5eNw?_0G(9K{9-j48pnY}Yvr0(ceH+vVOw z&Bri=_)+bSg~+nL$sUHU{IhppQ;B#`VJqlUJa9J3x?nc&vqW93R?U9P48ZZCLYl3H zdW40@B#HaD{(hzVAt;j&C8f|$cZ5M7wdc%u@ME9pgIzl&+Kh2PcHR`BhDN9|v@H2?pQ!RtpgUx?coo{#Z7gY`&?H zPQzKT66&>*3=9V*n2+m$%`N{fj>Pmr-%G%*0m7bu6Tnqk3rrTz-XFw8g2i$5`gNd=c>#X&SgdbVYIdoPk zeXN>`fQpD`9`Y$=?$pBhb3QFt(L>jEzpfV5R@%*~5HL~IqjurC#N0ajGar~5j#ABW zoBP&|i_GQg;{#{?CD7(z$ZKBv#_LPGqTSeYnJ2M>k-#owBpQZjL#PC#^s2H%cCJLa zS&n6s?*6>4fhF|(62;dnLBrv5R0dzy>M&E83cd$%)a~@N{^Xyqxc*-N%%)qzIMd!5 z0}Vx7*=%|P_+{zs=aE9WlXqIef}W;GpZDdjTMI|#Yz#ld*ZhZ%d7Pv7klEPunT&Ul zp!1q-SADIO;S>}fyDd~I4{yt+#!MR2Dgf*9{ik~w@8^4|&E|4$cAS-8F`9uJSvnak z->x_!RfhYro4J?0)7pAn?;7I+Nb7H;As?B!oPd6~vtvns_RgXZ89A&I1_gytgrY*G z_5@gP}U4d%fA#SSZ@rI!5X#L=g z9Ui*k@^xn|bLmX;{sWMd*NfY>)cKhYH6W%_ELr7<-L?B<=iuyiKAo7UK&) zrOHC{>_`^t#zZsZc2giXe;my?{li0HI*akH$wbCa*Y;qJCKM!^zx+~C6W?g1r5Hya z9|{3qO$U-_V;wb}hhvd|(>4ZwNRql|Qe9{izgHH4L;oNL7l#QKr-??0aC~oTEOquf z*GQjZ>wZHaU0lVPl5e5rPNU5e)on%0e9jU|C`4?l4c5x%Wvkx$@-@bqt@8ZwdCPO zu#)ZAoG5wGmExEhP@WT+0O9VM3+zn*gwpfI--y`Tghi$WnZrRfct(Ey_DGrCeWw)I zhPg&YwwaI`aBWJh)wz)klrAM$E+>VbJe%Q(=Fq@xsO z`*T}4{WNjqR)p3@A=Is66(XcIP6CvW72f1%g;jKMC&K2%a@BBE)sJi7pkHuAM+~O-L0NN*dZfz6nqlUFoI{$y)zdo<|RXTGFYcfJXm-`-5b0`gvTz^q?J95!ztkhAq5!JwkHy9^d{WpeFa8};BsNh%7> zO^`a9JcNrhh&+|*U!JS{7>eai3|dA8>A;LUGYhl?B1ejVSHw_DBvS{>D?mcgGVri5jEHmV6 zA$A_M5PGi}3ZO_DS~9J%9I0~nUIbK8HPHw49xCL;80SmXO-`+-UO2A zaTyNjW@(OQ!YM5idk#>sLzfzx{N+N$zi4~r1+;JFw&_-O(u0{B`y9GLR{BNgk{5q$ z!XgDn^zr6>*Y5Cu3g#DQi|&&gH4T#rwbPp{sJQ_r5m3}>W&icnU0Ne1Mr`>ke2Em4 z93#Wb+AJXFxp2RG4B7})?uvhb&>Oa1rB8bK3ydUNX4%W%@!Ztik7>R?r-x>m>>Bxd zWc!FSiQ+$)%Uv1eYTuy!w$Nr~WX3USHvceQZ4BH`J)1J)cxWPWKrt5viuiQUkgJS37hSfS=X1g> zhVLKyPdmA&-Y9v9& znF(?}^KazWFY%>}$Awaldq^Kf@CENqS#Y5#QYmh>lrkqel`m-)_kk<)Bol5nus_=v zz?|eF$qBc%8%m#T>{jgCJ0;p?4Wv@*Ri-9jg`DH>)u~p>zZm&%?MT9!H>r~5Gltuy zkKfogMQp6m*odyE4CUszln8*a$kG*7UW(tcN_|fA^zDm@MF`1t{WysgitFCW01U;G zIHVaSkn%ZE9huQ=u#5w$D5*85G;LxbP8~`On5^li zrm=2RSrcjKx{A;ApYa0=}33NO7yS=5-R|HnJ%-({<$L=FPBYZPYjC>ZyQ5WYUhxJszL4hDA8l9+LvPdkLz* zV$HbFQtR4KoO>|&USAG(#r;dqp1iHw88GtxJ0T3`QmVcthYooZM{iUyWoA5)5Bmo5a>?XT6$myoy# zDoh-*JDnuvKxg6SLlPc-3PSXtXGa+pa<#LF@I2WHH($kca_n2GDZxyIDBW z8eTJD3e-V4mSjV$&!=MD{A%j`?~<-EXVNMI`xrBqAaf(durKa7qlhUu@ZZ#P{IkE0ANc&PzNoWUgxeHg1R@5 zn(wn3r6!I+@V#C87b97Ylt9>--V!g=#*3kJ6uG&Su07Vh3sX&AgDpDNa8 zE>>HTEjk61A#$fkjLVvi?GeTLsgAVs{pM8W`D=-OENerw9}?z_%q;$N@fBCDu_jw! zNslChlC8jShJpUo_f!KU-{YTA#dq$?UwhXX7bQoQ^F^GC1YM}K@PGpMc9$p-Tt*XC z>}tOb>XYk{nr6n)NIYBS$*JMu$F&9?z2q=H3~MyERJEIA0zbW1Uwk7^Y2$D1b8{A$ z7bMS2!Ii{38*8mNlJ47&j<$7xAM{HgEQkeyJJ^yK}m zXhHMb;na)pLea?YRYwFGd?wfXN6p+t3=5JMk>4WeX0^XrhR-Zty1%i`S7?Ja zYEL3Ot(JUi02onBN^xiSr8e!3d5B6*WP|}PGRXB~n7G^a;Q2|ezt-$Nn8;fDI^(~b znKH-Hp4^y9OlRk{(ID;)Eh)p4-l^SxRk|v+TDjY_pb>q!n7`hV^fO>p4ORBMZnS{q zhGK34?c|iALrFvOj#hULw|`P%hgD)fXW&kmT`f|rCq8w%rjwG?W~mQz6UcN*M+upa#mcRz8p^F_ zf9e6GuQ??qet)XsBlCl=VpW~r3{WXtx?7KnW9&ER(_cUv^lYF(CeDCgoWdo$$n|p^ zEzsik4l1RMeZMeseCCGg{3F|CaLJdDdyj&|%rX`MXuV89&nbDi#n-$ofP(`^*?a64 zJqap6tR7z4_7NqdeQVqsD4;vb+ZIw?nA9su9;xEVy9(H(HL+^@`cVkBcZTtEob+A0 zw%x7FMQ)$$rN_Sa+e=K%cKeMMO$+lAmFq`kksdGn>zGoFC6Qma?AO)5D;+eeb;mn` zc=0wtSfT}Qn|oa@*TLEfgw`nW+uZ#)KP7oP=F_P@#*IZ`uc5=dXP$LwV*-`BMQ##S zn3u=v^88n%S9Yha1ZQ?BY}0Srfn>s^yT#zv-kUh?NHhR6<;7TfZ#8Qd0M9hT2z)JQ ztKs1kor-2^p?<~|{bkDaqU(&L8Ka%cO!|A#HwbJdLPeMRb z8mtSr2S~wHeVxZdmF;TT$IshOKH0z2f2_)-qnr~y@b}DE@viNlG&WsiCSQg|?fu|h zACZ1JS{dni2xW}1Vp7hze6z+wmwrREr*fUobH?4YpJ8e^zDozKkliHti1uOMHzmkt z{3^JT5h8DhEXHPBPvez{N!CBuK3j=BzLoYmt%F!D^1gU%iwl=8_^A*EnPinUE*M8> z__oU(|F--^U6k$SHtHqDl9LPL=5R!G<`sjS8$w>g*+xmZNPZ-Zsphd$Z)VxMv^Q9% zF3)eLYVMI6xi2Ph8*jofYX_fd&rVNwJ3=d3wirp9Cv4J*FK4dd%Pbq(&AkX-b!1rwGxd^2<{*@)O z1@XhkatEHMqNV1=b2FYpFIjLRIhDWAdq1e&e}hr<{}7xT-&)}(EO#cUc0NVVYw_nL z=+KPY@(5f!26KNP;Ic*r#AQsjpB~kWD%(|2&tiP zNz;k$mxwQWP}DyE+a%yPf?PDPqOFmvg6SROJ|+ypIwF?d2F56MpJfE&KJI_t|0IIS zD+>Sb6uhTEEW!WVWB`1N{|UwuIqab!KpLVU8loeHj#@yfcT!W&ky`8bL#IFkGsZ^> zz1@Nf-_CSY0#c*#F8uTL;$Uihf4KYnb{XR%f#*gSnj?+>cLE)CfFx9uWoHA!hPiak zay;XcmQelw6#jPZKa=0T3$HCUglP?jyYFw8F+N=UHnIpkv;QHydhC0E6EDDv!O{`I z|2v6}DnR0e%afYW{ujK#l;sD@aL^}TioVDFeF4w5e$E3(wQ9>WO0{@zcH7X`cI&gY36uX&z)V6dF;@O>#;^iA}#LG9{ju+Z8B&RNi=WaT|0o6BJyFGK52UkX)X3C`UKpDO3ueAE`?l0n{of%*L`va(lTUQPz9TkAY zuUu3~oYJ0q?!xO#S5M0FWhIf#mq^DX@<8plS*nD*&#>&*}#4FVV)Ja`bj zg&3Z{^Cx)yL+=5G4Z~Z*&&A)yUhOE$Ti;)R0xOYPG;whD&3NUsuW7sg@l-u!Kp<2)n9xUS7dq3^*-@I}4BK-ZD zv+(Bs8wL#fXT0(K+wr`d$1{)Lg;ziI0qeQr&cMs_f}9c+@$A}G{Nt?Qc{s7+m>VMJb2m+;@4$8(GCz$;%n0dEZ(2E6`(vI>+53lt=XvD z{VDG_-mnAZr9ZUZML)l_4F`LRc=n+$xSxN08lEX<@Z8)#;nfEFc{GC3I~tJa#5yZt z#l*8$pW+D0>z6)&gA?w;i>JKL`RuLl%||YiK`v*Y{J@#Ez@31XHYg}}KZaNS)l%eF zNA5*FmqR+OBY)3lT;Xdu9e*D+8PDGGUA)QO`OSyXn=PSS&Q)#i%H=Z3>8*JAc=r2C z@m$KTd0aN|+%=5f_u};{$K&}0qw(_R-tV^e<$LhA9YH+PE2@88#=*7)c;Tuqy3hZ| ziFoz0JMqFF&vcaOt<%1b*G~T>UcB!XymFlV+&_IAe~%RH?MfccOghhg{zG_WZU~ip z4A1}1N3Cc7{T%$gD`yo{E9rQKj`1b;H#NqUo=JGs9^=;@>hQIiERd1#_pkpyy!pGu zcqZSAO3B1CY{Krz+=0AsLMt|G>{5^R6)^#|TFQY6yffr8yC*TVYqLMA5P{^Y6 z@RuAuU!4;6Ue~njXU?3ye%)5&b2$_?U+F9kZ~b5ndP}V6e-_VPcM9IPY!iAbIUF4M zO}C#LRrCfX*X-xf2ukl*KoWvcZ!gM`$$0g>w!;0}`6x$IFbo~$)bF~=`Q15483s~; z8F=}9_Or+S0lj)2`CJswe)HYdXYW4`m2e8CsUmZ?YlXai`Ffa!ft1#U=RV6;&X3@w z^%{!B49b7?Ztn_(0t&_!yu^UugO}hL-7eW0n&k5P?-$@1)xQ60;g8*w`Rv6g3$6m9 zyQ9))5mhio>5{DUrdzcMM{xg9pWVqF{eHsF!0RSY= zHm%pb%Wc&!T*VxI8`4SpX4H+>;5DW!-Ub|ITFP$b*CSLPZuiz3oPK`*Zdp6uIl9XJf|oXR7=`Xa)U{TaJ*DPtn5 z81{8bIEjoE~u*Nkg@0|E+AdK5r(eAG!^9U_>?oJuReUhx*28F#dzbBH>0Fy zky~}4VEiN;6!epV5?x%6271Q>5?fI#73)s*;=Hq5Vg1~FFcLBni3F0HZpJH2S-w3T zaxw{Z+Bdzz{hs&Yt@nC`{*@8CAZn*Oxl3IJAm{{l#=!p$Fu*7@OwWps&yZ`x#KohxxYUjdHaqs{!TG=m2`GF z*=k(<1Pon=mUsfsGC=y*^HGTCFboYD0!Xin@38=I79F<-kkjnznA;!3tIl|wfl4Ta z%q+t5XYYlPkdaI#n;7HwdOmw?Ot{Y+MT5{Yi4f8zRjUcF^2G*v?CFRq33^0a_;O>}Gxo|3)LW5G z+N<>w*SUc7y}8Jy)6T_-l=At!<^NdvQ;#AkvJ5G*9tRyjIv3f13{{n3K12ZNkq(QG zWfzcfyA5f{zT*0+zqo+({+}Qp(Y!nl|1-2mqQNn~4%wZ%k=nBd>AicAYi~#XKnDtP z%5zP%14hLnip$S;EWg)o+i3x9cs^cafOOIg$RsovOMl@R$DCq%E}%3F!@jCpf_^^% zq(}E7nM_)XRx$~B-g)jgUbz;sBteoSD9JXIzG`p3hMj_EmQBPAkOm2}m`mq!yAy`uq%T1Vw_8HGXtxm*tEt_gVgJ+@%9Tm+*#hHyBH z=m5_RNBl9fkx8YH$z-aof6nD{*6P3bCmuygCK8AT*P_<}q#q;Ql|V8XheEe3 zWA;OqWhh-U@%Q($ar-4QAsLb+L0<7|XY2Up*^{9rBuIP4xIDL92)!%X@EDtcgr(q$ z0)6*5yl~F1(c7+jE{3GnBjxA2eyLY)-(dl5$0WD?6R(FEksu$KiWiv==Y2myA*k6` zb8ARVIR~!~|2=Y14YHhsHp1=y%VYK;5#0xK{1~KnMIdp2luRUSnTSJu#62W<^VE;x z&99Auo{%BSGNgUu@uHxgs;WBuJb1uBKA-nkNk`kZ?HvzDy}iAT0B158m_`)YKb&X_ z+z0Tt`&S~qZ4q+cASXa)K7v?#7sBCA$Txh!7P9x@g}YWG5s4vwU=0dqx8TjM-3>Vy zMI;h{^k)~4aKf*lZ)-5X{#-S#_A{|n?`6tP$g@hx}ZWhS`iJOZU>AB*Akw`W<&QH!`Voxw2%^z2B&v|3_u3Xh1lq{&*?`i5=O^t(GP(zui#}q5toxA*;~arsMgO-iKFj*a%HkA6laaU}Ln!VAnY8}?qjIJV82!(I0ygupk-pebzs27^{b5U(-t{kd?{%f6~Jrh7H53|2G=t6TF|{U(Z4M z?$fHCedEGKNW@}@#e$G$-HPW&2M59rwkAa;q zu07i`#=TcJGseU5(yv>Q4Je*|Q9#OOvq+^RWFEQzul&0W@Sivnz4zXU7yg;{;dG?i zqliU&pia2~fBVWO@aDUQ0mJ?YZ+`Uic;S|LFeS_JF3U2Kp(l~Q;EQ3naM%G9rg&5V+4t;yjOgd=ISZ5` zRllR3^Y3TRviC+-UEu)Io9E4Q04bBnI93wdt{H{_MNyDUTK+QHXZlyfFW*;D-zkrx zzOi>VGRBce1hH5Q$z&3W?J%Z*M6cIo)}N+nkR%C-M8cU<+Ai%&JRV0fnRK>Gnx@&l zBg;1@%d+z>1}2PRwlzeFjRXCR{)YaRA1A+l4gu0TjA~g(OgWjb@ruq94;D=LY6)8- zAj5-=|8rf?E**{+@7{t)IBY9#5YY+Wvd#Z@;pGv#9D$~QM3q)mRY;Olv(KWwiWIIM zNb&s=0kt1!Q_xTp1v=S^Qr}o3fW#Afw{-$4J0N8Fl62?)ilTTxi6{0B9(4Skr&bah zKPE$bKZmw#M*tIt3Xp_8BwK))l@yQ1eSv{0rQ;`HPHo3GkZ}G|aN-r27us5@E_>ek zcNg>vTY!(8kIdTr2!(pjDOVeiHpA3qJxUpWR^R}7LQIe^4l61iLssZ`48GgI6~`dp89 zO0q0F)M)=iW6UfUP1CISEE{BLj1~1E(fMS3<1HC}{wNr+HfRU{1tvPbqJQ&pz<*AO z{$A8i7PcWe_8$VIw=wy}Ar*^7M~IoF#DtD26eB8J>{%wrl-P>O{_;Xezo#oO^$(%H$b2dcj9BzJwUSuh zYPH4uG$J5Mr_)tIk_^NtIMtE?YH9hA=y}>t)<=H3cDVIv2#^K{l=w((Cpa>jb&@4n zP+TqH;)Pd4G~bE-PV`%TMfMX~e)~XyiEcmGDx1k6lcyMa8zw|RFA=myZ`kwZ)#N{In z<+8nlh)$-c{t-KcV#3E0T{T65D-vSSyV&p8U)nDH4HaA-O80_DyP2Mu%D~%p*eHsF!0RSWlOw>}MWWbWZa=8mPaUGZ zrAWB;MAU5m8yS~o##jVGe$^Li^{rk%YK>KY=C$5?>2nldk7h7>#{-fGlz2h**47c1 zn)MSd(ew2_tF_wmia^1M-)=D=qQ~JBjQsl9Xnz{zU(}vx9GV$p%4?%#efv6>{O9%l zUu#@yje+QUzkVLAV02Uf5VM$DsFC*iOSOQauWgFn rA)3ej&gDSy-pG3zCBJ?iP4xc(YC%p#`+d<>00000NkvXXu0mjfj;%x4 diff --git a/lib/Configuration.php b/lib/Configuration.php index bdbd830b..6eec33f6 100644 --- a/lib/Configuration.php +++ b/lib/Configuration.php @@ -114,6 +114,15 @@ final class Configuration } } + if (file_exists(__DIR__ . '/../DEBUG')) { + // The debug mode has been moved to config. Preserve existing installs which has this DEBUG file. + self::setConfig('system', 'enable_debug_mode', true); + $debug = trim(file_get_contents(__DIR__ . '/../DEBUG')); + if ($debug) { + self::setConfig('system', 'debug_mode_whitelist', explode("\n", str_replace("\r", '', $debug))); + } + } + if ( !is_string(self::getConfig('system', 'timezone')) || !in_array(self::getConfig('system', 'timezone'), timezone_identifiers_list(DateTimeZone::ALL_WITH_BC)) @@ -121,6 +130,13 @@ final class Configuration self::throwConfigError('system', 'timezone'); } + if (!is_bool(self::getConfig('system', 'enable_debug_mode'))) { + self::throwConfigError('system', 'enable_debug_mode', 'Is not a valid Boolean'); + } + if (!is_array(self::getConfig('system', 'debug_mode_whitelist') ?: [])) { + self::throwConfigError('system', 'debug_mode_whitelist', 'Is not a valid array'); + } + if (!is_string(self::getConfig('proxy', 'url'))) { self::throwConfigError('proxy', 'url', 'Is not a valid string'); } diff --git a/lib/Debug.php b/lib/Debug.php index 9210ebc8..f6a8d105 100644 --- a/lib/Debug.php +++ b/lib/Debug.php @@ -1,106 +1,23 @@ message)); - } + Logger::debug(trim($xmlError->message)); } if ($xmlErrors) { // Render only the first error into exception message diff --git a/lib/Logger.php b/lib/Logger.php index 9bbdd512..e15035fe 100644 --- a/lib/Logger.php +++ b/lib/Logger.php @@ -6,9 +6,7 @@ final class Logger { public static function debug(string $message, array $context = []) { - if (Debug::isEnabled()) { - self::log('DEBUG', $message, $context); - } + self::log('DEBUG', $message, $context); } public static function info(string $message, array $context = []): void @@ -28,6 +26,11 @@ final class Logger private static function log(string $level, string $message, array $context = []): void { + if (!Debug::isEnabled() && $level === 'DEBUG') { + // Don't log this debug log record because debug mode is disabled + return; + } + if (isset($context['e'])) { /** @var \Throwable $e */ $e = $context['e']; @@ -66,7 +69,13 @@ final class Logger $message, $context ? Json::encode($context) : '' ); + // Log to stderr/stdout whatever that is + // todo: extract to log handler error_log($text); + + // Log to file + // todo: extract to log handler + //file_put_contents('/tmp/rss-bridge.log', $text, FILE_APPEND); } } diff --git a/lib/RssBridge.php b/lib/RssBridge.php index 62e8acc5..e6f1c9e4 100644 --- a/lib/RssBridge.php +++ b/lib/RssBridge.php @@ -42,6 +42,7 @@ final class RssBridge ); Logger::warning($text); if (Debug::isEnabled()) { + // todo: extract to log handler print sprintf("
%s
\n", e($text)); } }); @@ -59,6 +60,7 @@ final class RssBridge ); Logger::error($message); if (Debug::isEnabled()) { + // todo: extract to log handler print sprintf("
%s
\n", e($message)); } } diff --git a/lib/bootstrap.php b/lib/bootstrap.php index 8e5cf69c..98c7b54d 100644 --- a/lib/bootstrap.php +++ b/lib/bootstrap.php @@ -40,6 +40,7 @@ const WHITELIST_DEFAULT = __DIR__ . '/../whitelist.default.txt'; const REPOSITORY = 'https://github.com/RSS-Bridge/rss-bridge/'; // Allow larger files for simple_html_dom +// todo: extract to config (if possible) const MAX_FILE_SIZE = 10000000; // Files diff --git a/lib/contents.php b/lib/contents.php index ebd4ee2c..a1630e3c 100644 --- a/lib/contents.php +++ b/lib/contents.php @@ -438,14 +438,17 @@ function getSimpleHTMLDOMCached( $time !== false && (time() - $duration < $time) && !Debug::isEnabled() - ) { // Contents within duration + ) { + // Contents within duration and debug mode is disabled $content = $cache->loadData(); - } else { // Content not within duration + } else { + // Contents not within duration, or debug mode is enabled $content = getContents( $url, $header ?? [], $opts ?? [] ); + // todo: fix bad if statement if ($content !== false) { $cache->saveData($content); } diff --git a/lib/html.php b/lib/html.php index 7f4f1201..ca0a411c 100644 --- a/lib/html.php +++ b/lib/html.php @@ -1,23 +1,34 @@ Configuration::getConfig('system', 'message'), + 'level' => 'info', + ]; + } + if (Debug::isEnabled()) { + $debugModeWhitelist = Configuration::getConfig('system', 'debug_mode_whitelist') ?: []; + if ($debugModeWhitelist === []) { + $context['messages'][] = [ + 'body' => 'Warning : Debug mode is active from any location, make sure only you can access RSS-Bridge.', + 'level' => 'error' + ]; + } else { + $context['messages'][] = [ + 'body' => 'Warning : Debug mode is active from your IP address, your requests will bypass the cache.', + 'level' => 'warning' + ]; + } + } $context['page'] = render_template($template, $context); return render_template('base.html.php', $context); } diff --git a/static/style.css b/static/style.css index 570ee014..a83e25e4 100644 --- a/static/style.css +++ b/static/style.css @@ -71,15 +71,34 @@ header { text-align: center; } -section.warning { - background-color: #ffc600; - color: #5f5f5f; +.alert-info { + margin-bottom: 15px; + color: white; + font-weight: bold; + background-color: rgb(33, 150, 243); + padding: 15px; + border-radius: 4px; + text-align: center; } -section.critical-warning { +.alert-warning { + background-color: #ffc600; + color: #5f5f5f; + margin-bottom: 15px; + font-weight: bold; + padding: 15px; + border-radius: 4px; + text-align: center; +} + +.alert-error { background-color: #cf3e3e; font-weight: bold; color: white; + margin-bottom: 15px; + padding: 15px; + border-radius: 4px; + text-align: center; } select, @@ -342,15 +361,6 @@ button { width: 200px; } -.alert { - margin-bottom: 15px; - color: white; - font-weight: bold; - background-color: rgb(33, 150, 243); - padding: 15px; - border-radius: 4px; -} - @media screen and (max-width: 767px) { .container { width: 100%; diff --git a/templates/base.html.php b/templates/base.html.php index 00728785..ca31823d 100644 --- a/templates/base.html.php +++ b/templates/base.html.php @@ -17,11 +17,11 @@ - -
- + +
+
- +
diff --git a/templates/frontpage.html.php b/templates/frontpage.html.php index 5daa63bd..63f4a2ab 100644 --- a/templates/frontpage.html.php +++ b/templates/frontpage.html.php @@ -4,20 +4,6 @@ document.addEventListener('DOMContentLoaded', rssbridge_list_search); - - -
- Warning : Debug mode is active from any location, - make sure only you can access RSS-Bridge. -
- -
- Warning : Debug mode is active from your IP address, - your requests will bypass the cache. -
- - -