From a9549464e98b628ba62adb92dc68e5af01ce6862 Mon Sep 17 00:00:00 2001 From: Saket Patel Date: Mon, 3 Jul 2017 00:12:45 +0530 Subject: [PATCH 1/3] - move password checking to client side - add flag to enable/disable strict password checking - use entryptionstore to store/retrieve passwords - remove builds directory, we will be maintaining builds using release versions - update documentation --- CHANGELOG.md | 8 +- LICENSE => LICENSE.md | 2 +- README.md | 28 ++++- builds/passwd-1.0.zip | Bin 11440 -> 0 bytes builds/passwd-1.1.zip | Bin 11657 -> 0 bytes builds/passwd-1.2.zip | Bin 18750 -> 0 bytes config.php | 7 +- js/ABOUT.js | 2 +- js/external/PasswordMeter.js | 3 +- js/settings/SettingsPasswdWidget.js | 5 +- manifest.xml | 5 +- php/class.passwdmodule.php | 153 ++++++++++------------------ php/plugin.passwd.php | 4 +- 13 files changed, 97 insertions(+), 120 deletions(-) rename LICENSE => LICENSE.md (92%) delete mode 100644 builds/passwd-1.0.zip delete mode 100644 builds/passwd-1.1.zip delete mode 100644 builds/passwd-1.2.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index a66252f..df938c3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,4 +9,10 @@ ## 1.2 (20th May 2015) - Bug fixes for LDAP plugin - - Improved UI \ No newline at end of file + - Improved UI + +## 1.3 (TODO) + + - Add config to enable/disable strict password checking + - use encryptionstore to retrieve/store passwords + - move strict password checking to client side \ No newline at end of file diff --git a/LICENSE b/LICENSE.md similarity index 92% rename from LICENSE rename to LICENSE.md index a072de3..4ffb687 100644 --- a/LICENSE +++ b/LICENSE.md @@ -1,5 +1,5 @@ Zarafa Webapp Password Change Plugin -Copyright (C) 2013 Saket Patel silentsakky@gmail.com +Copyright (C) 2017 Saket Patel This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by diff --git a/README.md b/README.md index 34c0cbc..665167e 100644 --- a/README.md +++ b/README.md @@ -7,28 +7,46 @@ This plugin is largely based on the Passwd plugin by Andreas Brodowski. For his original work check this [link](https://community.zarafa.com/pg/plugins/project/157/developer/dw2412/passwd-plugin) ## How to install -1. If you want to use this plugin with production / debug version of webapp then please download package from [community](https://community.zarafa.com/pg/plugins/project/23147/developer/silentsakky/webapp-password-change) +1. If you want to use this plugin with production / debug version of webapp then please download package from [release page](https://github.com/silentsakky/zarafa-webapp-passwd/releases) 2. If you want to use this plugin with source copy of webapp then you can just download this whole project -3. Extract contents of this plugin to /plugins directory +3. Extract contents of this plugin to /plugins directory, in Ubuntu 16 refers to /usr/share/kopano-webapp 4. Give read permissions to apache for /plugins/passwd directory 5. If you are using LDAP plugin then change PLUGIN_PASSWD_LDAP to true and also set proper values for PLUGIN_PASSWD_LDAP_BASEDN and PLUGIN_PASSWD_LDAP_URI configurations 6. If you are using DB plugin then no need to change anything, default configurations should be fine 5. Restart apache, reload webapp after clearing cache 6. If you want to enable this plugin by default for all users then edit config.php file and change PLUGIN_PASSWD_USER_DEFAULT_ENABLE setting to true + ## How to enable 1. Go to settings section 2. Go to Plugins tab 3. Enable password change plugin and reload webapp -4. Go to Change Password tab of settings section -5. Provide current password and new password -6. Click on apply + ## How to disable 1. Go to settings section 2. Go to Plugins tab 3. Disable password change plugin and reload webapp + +## How to use +1. Go to Change Password tab of settings section +2. Provide current password and new password +3. Click on apply + + ## Notes - Feedback/Bug Reports are welcome - thanks to h44z for adding password meter and icon for the plugin + + +## Dependencies: +- php ldap extension is required if you are using LDAP plugin +- if you have ubuntu 16 then follow below steps (this should ideally work with all distros) + 1) sudo apt-get install php-ldap + 2) sudo phpenmod ldap + 3) check if ldap extension is enabled using below command + php -i "(command-line 'phpinfo()')" | grep ldap + + +Initially releases of this plugin were maintained in [community](https://community.zarafa.com/pg/plugins/project/23147/developer/silentsakky/webapp-password-change), but now users can download latest builds from [github release page](https://github.com/silentsakky/zarafa-webapp-passwd/releases) \ No newline at end of file diff --git a/builds/passwd-1.0.zip b/builds/passwd-1.0.zip deleted file mode 100644 index 0235122168702c7b4526a7b14c44e7f5bb6e8572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11440 zcmbW71#nzRmaa?8%nTMYGh56|7Bfp0Sj^1K%*)t&1Xa0E!}AAVmWJ-~jLe4u(!nt|p9D zPK>{|=uJ$GT+A7)oYYid0ATnnb;`e8E^crD5b#4V0N@|D1??02HF4B;x_1mu2E{RM zf9W;ah-E3{g?c=&dgEpJKphouT1VjttZ#qO} z2(G@PWB##p**m9;k51|y@qX}Lq32mROvb%BiYrxoXlHF1e^03jHF4tPYMo*cjB~IkE5xPXT8(f5xBe{uP zxCvK|f-14N)2e3_ysmc0;AdC~Nwi`q{W9nu&0m#xLN|AyTyfDFlAb}APo)AAEaJ_+ zx*#p*Mq;a~o!@a-7o!RwD~XiK&cPRD0ZijOF^B50sg?F<=ytkIK^7yCC^hUapF+%u zhC;W8hAvN!cR{K+6Vc5UqK&L(*&;s>BZ^q1r*V(>i^|6`Aa3^7Y|l{IE7S-SaE(xE zm`kLl?mPg4u_LaxhZe@RpIZmuKEJ)~ya4y(p%(L0<*@Eg1dArXA)vQ3}pcE$WZIPbO;ewgfdLo6o%aviCrSZD5bTyJ~ z5yYM}W3|sh*Q*!_Ogq{SROslJwBArXcMLh)upyVbLtM%GDs@m03A z&bO@{IiF*#PejUEwlmj~?)x9_xFc29F!tI-P(w;}?#i1pA!Dh_hPjJJs}PiT!mqWl zK#GnVlH1*9Ny}#uPAegF)#Oq@em`rw)f1~+qx8J@sx~;CW8m6*M>%ogkULK)hW zrU|WDHTZf@a;%;RBqjisWa6`~=vEhD&fUQCO$RPRZ|4(6%$< z7&@Ff?%fVFwksDhquL8DLW-4l8sUNyN`ld!KZ z7^w3ZX=nulh3ajtK?_6WK-(_is{1l_xMj^CN>cNL9l@MRw-6`AEY0>6x%=f4x3Ool zPGNCjiSLT2m|-3r3T}-S z?|%1!shVz!c6vI5EUBJoeHH`0;w{bUtEu~@`{FU;_gt>Du{%iup9`KPRIuUic{!5!=^tpvo(au zCgy`oa8Q%j`$;uuPS3dgaH>7Q|A_CnYQO^I*P)Yu=Dg$F*47!`CC2T|?&oyyKWSl` z(>1S$nk$5Ckt!zyaJ9MU4GnETAcL2D$Lq~zUY>4$k&X=gu%-88<}xq6h~ZxHLIv(u zaAwrY+2o<(Q>>CUJ%@ABct$au!Tpd-6f*>@XD7I%#~Jx>q)$Yt>co}VaDEX-StG)S zX>>OZx2fSS01YyZp`G0CK0QN|@Eo-Ak!d2Yr+<*w(IgB;AOJXg#3!0x3+V&WD-W0@ z^^Owfpz&47Zgrr$d}A-oC5HJ5=W;?Ta_T^<1sR5V35H*NgFqAg{_|?FrxIb`TRW*d z=oSlPIDMktD#Vl0vMm}a=z7J^Fe;%1JCJ(6^nr4ui9XSAvQf=q$!9{qi*r_T>b4SImF2eXk2?0S-rIteEQXwxm~^yep%_ zL>9U5JmgiU#^ZqFa+0JNfRz~pjk2HuN(gsod`vJPXqOQv2uc%^wOl#Y7v^9nLtHt| zSP^u(U^@zHtHXZXNAqbSzDK&V`fi-5lE5||JX{$hzsihDTvM%J007(Re99vHVIdWA zic-_5rL@~&WMF8M9x=-@UN1)hYJEn&zGCt72 zsUUP7osySzm<(HI%ekx>s)9|n-@SgaYtff>=vZU?;R}$y%E6SRM{MY_8miF@^b%)33u-H@Hb!f;L)#YPtb_rx`rxp&K2piEs^LOT zO>m@HgXZ)@{d?z}59EBfGY;mpE%CREMcq#>ol?@U*GOU#q4bA`Cj|s(>C1NpIwwQ> zFjn2pSrrPz)4=|I^O>C2@4gnaRs^G#K%TJhIXbh=PiLm=Kfe_+xa)HCGMOg& zFWh?^=$3|zJTA7_mNV|pud8h=7Ft(wK3q>$J8pRS4yMe-Yv982p70zZIiFTI zyT-z2KAGd)wz$M??Z;N;y**)rFr(-8<}E)SN&J-7SbI64#uB`Tj6WkFlqNjCb1cG! z7xe(6qJ>58A!bM?tohtDFzQ^Xe3BE_sJ!6P1Y5~)>uy^BL9MZ}o^Kj=h^{nb4UY7w za9?71dB8}OAb0_pIKTMV{gV03n7-S#&MU@>FK+8f2gBx-qP>}vW;K~`JXEP$5F7$J zLI&R705`%$AC$qt_{&spOoxPwGn-A(%3GSZT){J>gyX%wf&_GgWw!<`Zpmrn{zmuV zBDbTMXogOI8Csi2q;)u*l+vvG6k25w?ib+*Cwr*sZ(bd#>P82d?V@mS6DaXu=!hvG zo$AX!$Ofn3gx}XzjJg!mp7n%Qg5FDqQeg%>Uyz7Q;ha}UGb8NkrK1F-_{>>~V0M~C zb1%Ko_Gh63i1=wOic!z~e?m+WTjAp}j{EMbb@8tu+RCoUBVB^p7)+VjhIrQZb~e^) zTU20JKLihjRWG0F8D!&5X}@BLQ!8>l&!Da zd|!B~8DuxP29~Hc*^+1=Ec0U-;n8FWz0@9!oRgM1T=|f%&UFwDt=C$d$<*Ap;&sC5 zv}7I}AF==FK_^;dhg?0AFU-6@KXRZeZ&6wl)O2|6p{Rg@J`SZi#xJC(57MXkIpNW* z1{PfeB<1JXx&cul#D6Dh+Q=NuidWQo;!^-X@KkHy9&nfjeUyxqniYEWRs84f;PKb) z;IL4pGZ_*9SVIE<(EiQt;J^0;1pj_tP_418u*QS@KCN%KKae7+WU!W5(v03!6WA)< zThRi4RRY63R^056&9|2CT>Spb%PW;BG6B1WB{|c54ZQGiH7D9U68Z*H7A3yL^R6s~ zhHJt{#GD@xMZ+FVP}`dm4QQ!l%0(d6GnF%K;Ktu6a|B}c*!-zRK%PyNL(7_gbF%_LB@R#b552D+{TiH zw#?O!pZL6yTh?v1BD)Ch$ zy@BHggVsZQaunrboVML^>=jKVLkLr$b{LfMyKoVGBx)QPN$qLPldAe2!EE`!_|ZVs zm^*hv$unM26>d7S z=i7(5WF$=h!%>MYKmyypeY}>pPs7BNke2I&9o#P}>GJyD#37E@SRlC?BH0X8y*DLl}Ccxg^fyDKRX--K5PV zUxxvUN!I<&9iwU4jlUV8Fol9}09rg4fh7|wyQZbm?2Pf$PI}lLE?+OLUMXwRMyUOX zmV~n!rUPAE3AxmeH9Z2&xbl$2)G$4G2<^?lcx`8byQNcbdt~F9pe-eCn@#h+6iGZW zOmI&fSVb0YgG_msLMp`aa|}GlW#td%eT6dPPIw7s8EY&0(Jv8MIr_Q^ z?P;eS!y~aof)5=)GeWkK=#KhwLo=dHFZE~X@coy_ytQEmR$b`;#!`uFl(l}3c(e^W z*OOGV{W;LK4{{MxGZbUklh0qTehhf_V2k?_;6ErZnWql!ma({wyVtWD;)c$e?Nq5z zb^BMGSl4D{R#LQAJQT$5jG0@)zpy5H+?B<51Ab&vnLg{!X8XPluRMNDo?Woin_r)` zu&#}0(c>y{T0I0dcq^Rl4k|rp>NZR<;ynX`lcB^Kb>{mz#6(SBB+r~k^q1J^+wE!* zLG{q!7O2gt3c*UcnTJGTy1Hz(7Np&?g+E&CMpfXoMl9M@D&=vgPNw1@?wed?Sfdpq zz2~cDZU=I3tMv8J$4)%w_ zJ^fO+o^Py`biWiX3k3kc`$OSuER7fyf3w2u9Zlp+olPD8Tj_{@Dcx_^|K)%+Yuehc zaUj3hyhm8KEI3lgNG%qLwO2{;xgx}|37_WouG-}lHx8+zs)aXXL$26w#uu1yJL+j0 zKxRcqY+PUJxzwD92#Qgl{DfEO4Ibp$C7mWVLotK7My~1;;dv}rQ-4=Cs#FQ%1*V?0 zbhNENE(eM1>D19>Mt&FkD3uq8ivC1mTNe0qNitzdtn3F8lH=!!KTl^gv>26>Je<;4 z2=O$d#DzhfDhzI%l8@AM0YfA#YcOc^-5iuU(R=CkF-ZnuF)?+ z#0Ha)Md{Gw%P(t(?wYsYyLMaH}whwW46 zl~u==gd+)pSL{}Jl2l~Zu~3nAmtT0p%K;p>;=J-tY zV&F8Lk~*JOsC&8Mch}*vP z@OMed*FQhH3?7TpW&iw&wIljib1hS_Mozu{EjLsA(tUE@Ks;vJYTMUjG_`#qk8z47 zP{u8L#x0rBnSg!*E%&S3tt!vZf@)t=nRZB7Lx!|*O+nsjwYF%m{6a*stY?!VPZ32g z=~n?FUlD~3fCxzsRaN!rys{czbLRId3FGc@m1ueYjXA{|C6VOzLrF(AY4hQJd<{ol zBe-nd=$EpD3ON2{t=aI<5J~Ge&aQkZEm~#vF5r-zq!HM@mz;r074>XpU$1U!%807H(exANMaDc-)>x4x?iv+|LidB(oGhF7ke) zF0`;MKUb{w<@YnM5UzSePUOCUFEb93L{mHwU|7J_#-2OOn=_Vj2XwS@tEpJg!wgd$ zgfVBU7*Ae9PHliaFxu_fU(`^#<-@eN;=!+pk;KEoF(<3HEqVL7d)6Lxk)Pe={M1ox zO8FGTNJz%EEkF<@9ymdwX&+p~o$Aig2}(#llo_p!J<)rRQ-sir4VM8ja>$$!sdg-; zf$W$uWx=RnzbKmkXW^mfnaU-G8!IPFDL+_*rFrhT`1~|`#z9v&(OLSKGS9c|TO<`Y zX_8)q8G#(Z-6hFyRZf;<1!;}l$!3#$T6Vw0nXoVQ6R>ig5aqD(=Ke*N&_>bsGPASV z(`}azcT=GS^uosHa>73F5D^!rNE4NP!nQRYe;`u$eeV$c$v%c5v&P$qXjO1oa8+={ zcTM3;?m782_SJr1c2{Mn^&LA|YLUYM((R-C3t}nMn_mZ}32^e=1s;IUWlIj2QaP539m<6T zL2Ld@t6$2ktg|FU_ukepV^2QJ>k?&TuSyzh8 zG?NsdBscTAi2VAIo7RyrZ^D1WY6^)s7D}7XKJ!|l_0S(EOvnJ zmGC-gB~QY3sDcf%-=G3ah$+K&_E*cC$a%E?qJB_Wy4y)NG8x`x*43`y+OOjo1csie>&dDRCTfuw z4HN^U=osMPJkKyCEvJf%*m6R3Sr0re>GDHRE2L7jk2xo@;%6Iw-lD4;<^q>@8sn^| zWHk%VZo_n~ahh)mQ}i4HL9JBn`f6K^DsW)fy3G3&d@A-A`o`)QUW&-l0#+|3T7#x6 z;xo>G$f0DW_CuZ|SVlVGn~Fn?nkzjR;nauH{Y$%JLo1KSTB5Pdx6bm?;s z-du&{X5KrgY0ApkEFaw~W|AjqI7sTQcGS;WQegzWr~_Z;iV?-@Wr-#UC$mVnlSL=s zcVtu$KZ{KD3VF#%)tF49kENx{NET8L=_K{Dyav+n6oQMW?QzhKGIGnB?ip60>()pv zi30_CnF8ILctdqGQBx5P(`%Za*!QR*ZY9W|<-ZLMd@QXm3BWVpF~9Nzwv-Pvtkdx$ zT>xzj+^fhM@x>lS)C~=36tT zrE8XH1k{HncrY*~6k_NcU44CBiJsWnk%QgtPrF7GXWF(OX(hi-tF%Y4nCFu(*R9NH zp`W_n+vN4SyHDGgh8H8#acF9NbM*Xi25LknE26g3SUeOaq~ZVI2<1Jnoy&8+HXfjS zuXt-9lkp8-!yi91zSIWVDtlGe5RSDCptp{LCOJ>Tois zx%Rd0O^lGtKZl${nY-34HAC{rD*dqg*2|gQ9ZjyLc0;GD(*xsm_w?z<&T)f6_gVEy zyQXk1Gv$>86`vDHj-jylt{7M}1swTMcH;oe5&Z~rnrxz6;`81W?DoPcExoYzxyOX~ zrP$I!c?~@#=e)Ym+5V>@S7`H@Z-etdY*p+h=8=ZuWoeR8EBRaeVmH6lOWr!xDuogCC*z4c zZgj03Qy%0@70Yzsv0!h7c}PQ_l_%;cF!F@dWh<0w8(a!o*i$##!K*s-B5FIU)mPT- zuAjgwA#Rqe2~B-<4(b$;zAqyrAutU~)F&Cf#|qCV4rc-R-E^>CS$zk`TNS ztUNb8mNH$kN?$(l6-8Z%X_BX0$T*+ifPFJNcz*SV!u-l?w#;JFitv`wzQA!qukW1Q zBV#~=E&^u$)qpfsL}-*Ndq?bHq8VGQ^v*4?9!uSaL(zv&`e})3S}}6kFn@uB>}b1W z0t(_WlLE{#mz$3lF_8p#RTE-a%;M@FS=>*$y!mEf5X?=@qwy_xvOnXr;-%_>kC#R{ z*QS@FL~7YZ$Hr&^bngS{=6urz>eqBRMIfBgec-%A-Axaq^8J!^JDwMZn~$^UG9K%D zE%I$JBXJAFk{juH-oQ`&#tJqeML)0Y63Dx#zCgGf3>@MYU)aMNmiM8Ewpi4Z#uL!6 z=9PS@eL4PAu?#MGDm#jKRffwojVdnZ?yNTxPI$%XIKH7#>O*YSCqu~`{6}^wybuv< z?0I}cI*_vv}JJ&8vy>GAVO<+tTgUcb(aKurm@vB)F_iz z648{GBK^frBh3i8ajvQpjcQ(T4pWGEHg>iBei`%S{lZ62qgZELN*m0Z@Bm{>!rQT{dw#bnl9Ch8+bs}+2H4SWt5*ZA z4u*}=`(ZTMn}|H#iZ{zg(4y)T;HCIl>-X_>d6yuV*v5#;G#Qq?APi2v zh>io&287R;Myw3pii)7=8#7t^s9_)q?S!tlX`=|y$5C|)7)z!8aun2LcAMtaoKkKy z$H7Q1*~<@`2MNmtda3ky2oDBIL%PU0UYoR)lCX$U#a}Uk1NIZJ#x-?6^J4eUvkL1F z5mJ9WWfFm*O+$~BBrsW?WyS~`R>h871tg+26lmh4dhU5j39czU=d_x$8X}J9&bbC4 zfwCAyXW-6qu~<|qmgBS)DFwkm1a604cvnp*hK|xkGTX3_i8X^_wQ3hpTeXL^@K15d zGQ;v_WE^*zWb6yQs;Dgwu(x@#SEGr-iz(;oeZ}__WW+*32S%owDvI7q5@wLNlcpz% z4tzP%Ro+Zgzssw11LRtz3{y0sq?mV1P#k_XLw>u!#OHM|Z&s97oA+AohmtE##Kp2S zp>_50vHb}#)!4Y;vJERT0+_0apJA*-X?^b9sXod298(O@$WAwHsbwUqNp3sUHIEPp zeEN!O-v?P%_(V~qT*8RS+0j$M85F)~vxaEs4}&26`E=4={JNIATW=mI>sX;!;0=-I zO0eL0Yi2ub=<`>0G)m9a3c~LZkkcDm@njTqevHO$;U0ZY*K2WDY}M(mSb7FJ_c{j` zwVeQrNHV#udt?hA@B6dkFWk97+qFkO8M5e8=2!Oj&Yun(zwkbK@bg;0gmiEExZ2<2 za=foM`f}X8gZ_2kZqgQ@5&jyuG`|d!KOG0y8roT!nL0T$xY^qL-RiVjMb2rB__y&I zaA+6*W4UjHQXeo0aLE4JO9b~v^k0ezZYh^LGe5* zF3ddj2&3aCdw#MDqJDG%=r%b)Dq_*r^ zg?LX{353{8U9sH9%d|a@k$U$8TCK~5NW7Y0nXF*zRn-{o0RAgUhc}nPqS}T+{Yf*6 zUOqO-b?cQ>%|Hl#$tUsenFfN=++l6t@w7L+z$7c4le33#)}SM`xxUQq%1Mn?4(^|;tF zhdy`4IqC$TOjKLyi@CW-t@k=;-Zfb#1f#_8Z8*g7voR@H4QYeGz#j0y+=PAk?6jTd z9F>c>@!?$&9!6}1ZOjw>?nLKX31R zobHIyWAvw`cNWd(H~%`+_81ZEmwr{LIe-8FD1Xe6#`bn*mgfKC#5mn2J;;O%x#gK_ zWVg^zhg5f*knoi*Nx20x)=;*TBTh~vq2l4DB+}!uZUge|u_wKwE7!Zeng$tDA6_^E zhHv;mAb@kCvW2M)U;$56I939!)=V#+(Nvt-U>!10pGmqmsZYh#g9WT6EN za|ENNbMByJka#GD%EfjN`NmN~M|nm^7f;HT<)ZPzKD`x0@fN`@4!R-Y=qIi8BF=(U z)78!}mT?=KFmUv+G<|~?{C=sUW4eo;u`<*Y@f^zd+Y^HQ z^-KW&sNDNU|aIm3x0zs`m%uH}~_;47fiSzqy}(m&pGs$ZvA?{|ABkqbGk4 z00AWg`%k5e*#G!%zeW$>%>TFM-xM}N{9f4je_6VUGJoLz^(^$yctZGp#s9-E{ssQ+ zWb|*q|7t=18T@OK{qKJNdqetHfPZ5~|GDSC1^BDQ@aF*jIR6ar+w1yIhQt3Z%wLx^ ze-7hJ@|Q6GW|8y1i||+d`Evw%vVTVSs~Y|9z<-@>{tQl|_$Tfy3BVm8>{!Lx&?=SLq-oK{npLuV8@P1F;|G9&I5Bx~=&kp{c$p7y^D8Qe4 f81@HHP4z#)Abu?@006jOpV?ov#bdvI0s#CUt=CBW diff --git a/builds/passwd-1.1.zip b/builds/passwd-1.1.zip deleted file mode 100644 index 6f28c72d2019809a933919854406dc9f81157c97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11657 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 diff --git a/builds/passwd-1.2.zip b/builds/passwd-1.2.zip deleted file mode 100644 index 1706ae5326bb95af022d2c350993e1935828844b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18750 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 +?> \ No newline at end of file diff --git a/js/ABOUT.js b/js/ABOUT.js index 8381cbc..6e2e4d5 100644 --- a/js/ABOUT.js +++ b/js/ABOUT.js @@ -6,7 +6,7 @@ Ext.namespace('Zarafa.plugins.passwd'); * The copyright string holding the copyright notice for the Zarafa passwd Plugin. */ Zarafa.plugins.passwd.ABOUT = "" - + "

Copyright (C) 2013 Saket Patel <silentsakky@gmail.com>

" + + "

Copyright (C) 2017 Saket Patel <silentsakky@gmail.com>

" + "

This program is free software: you can redistribute it and/or modify " + "it under the terms of the GNU Affero General Public License as " diff --git a/js/external/PasswordMeter.js b/js/external/PasswordMeter.js index b8ce416..7afbf91 100644 --- a/js/external/PasswordMeter.js +++ b/js/external/PasswordMeter.js @@ -62,7 +62,8 @@ Ext.ux.form.field.PasswordMeter = Ext.extend(Ext.form.TextField, { var width = this.getEl().getWidth(); - this.strengthMeterID = newID = Ext.id(); + var newID = Ext.id(); + this.strengthMeterID = newID; this.scoreBarID = Ext.id(); var objMeter = Ext.DomHelper.insertAfter(this.getEl(), { tag: "div", diff --git a/js/settings/SettingsPasswdWidget.js b/js/settings/SettingsPasswdWidget.js index 59a93b6..7c7b77d 100644 --- a/js/settings/SettingsPasswdWidget.js +++ b/js/settings/SettingsPasswdWidget.js @@ -72,14 +72,15 @@ Zarafa.plugins.passwd.settings.SettingsPasswdWidget = Ext.extend(Zarafa.settings } else if(!this.passwdPanel.getForm().isValid()) { Ext.MessageBox.alert(dgettext("plugin_passwd", 'Error'), dgettext("plugin_passwd", 'One or more fields does contain errors.')); return false; - } else { + } else if (container.getSettingsModel().get("zarafa/v1/plugins/passwd/enable_strict_check")) { // do a quick score check: if(this.passwdPanel.new_password.getScore() < 70) { Ext.MessageBox.alert(dgettext("plugin_passwd", 'Error'), dgettext("plugin_passwd", 'Password is weak. Password should contain capital, non-capital letters and numbers. Password should have 8 to 20 characters.')); return false; } - return true; } + + return true; }, /** diff --git a/manifest.xml b/manifest.xml index c9e6440..7479624 100644 --- a/manifest.xml +++ b/manifest.xml @@ -2,12 +2,12 @@ - 1.2 + 1.3 Passwd Password Change Plugin Saket Patel https://github.com/silentsakky - Change your password from zarafa webapp + Change your password from webapp config.php @@ -16,7 +16,6 @@ language - diff --git a/php/class.passwdmodule.php b/php/class.passwdmodule.php index 3a88b15..88d4fba 100644 --- a/php/class.passwdmodule.php +++ b/php/class.passwdmodule.php @@ -83,6 +83,9 @@ class PasswdModule extends Module public function saveInLDAP($data) { $errorMessage = ''; + $userName = $data['username']; + $newPassword = $data['new_password']; + $sessionPass = ''; // connect to LDAP server $ldapconn = ldap_connect(PLUGIN_PASSWD_LDAP_URI); @@ -91,10 +94,10 @@ class PasswdModule extends Module if(ldap_errno($ldapconn) === 0) { // get the users uid, if we have a multi tenant installation then remove company name from user name if (PLUGIN_PASSWD_LOGIN_WITH_TENANT){ - $parts = explode('@', $data['username']); + $parts = explode('@', $userName); $uid = $parts[0]; } else { - $uid = $data['username']; + $uid = $userName; } // check if we should use tls! @@ -126,48 +129,35 @@ class PasswdModule extends Module ldap_bind($ldapconn, $userdn, $data['current_password']); if(ldap_errno($ldapconn) === 0) { + $password_hash = $this->sshaEncode($newPassword); + $entry = array('userPassword' => $password_hash); - $passwd = $data['new_password']; + if (in_array('sambaSamAccount', $entries[0]['objectclass'])) { + $nthash = strtoupper(bin2hex(mhash(MHASH_MD4, iconv("UTF-8", "UTF-16LE", $newPassword)))); + $entry['sambaNTPassword'] = $nthash; + $entry['sambaPwdLastSet'] = strval(time()); + } - if ($this->checkPasswordStrenth($passwd)) { - $password_hash = $this->sshaEncode($passwd); - $entry = array('userPassword' => $password_hash); - if (in_array('sambaSamAccount', $entries[0]['objectclass'])) { - $nthash = strtoupper(bin2hex(mhash(MHASH_MD4, iconv("UTF-8","UTF-16LE", $passwd)))); - $entry['sambaNTPassword'] = $nthash; - $entry['sambaPwdLastSet'] = strval(time()); - } - ldap_modify($ldapconn, $userdn, $entry); - if (ldap_errno($ldapconn) === 0) { - // password changed successfully + ldap_modify($ldapconn, $userdn, $entry); + if (ldap_errno($ldapconn) === 0) { + // password changed successfully - // write new password to session because we don't want user to re-authenticate - session_start(); - // if user has openssl module installed - if(function_exists("openssl_encrypt")) { - // In PHP 5.3.3 the iv parameter was added - if(version_compare(phpversion(), "5.3.3", "<")) { - $_SESSION['password'] = openssl_encrypt($passwd,"des-ede3-cbc",PASSWORD_KEY,0); - } else { - $_SESSION['password'] = openssl_encrypt($passwd,"des-ede3-cbc",PASSWORD_KEY,0,PASSWORD_IV); - } - } - else { - $_SESSION['password'] = $passwd; - } - session_write_close(); + // send feedback to client + $this->sendFeedback(true, array( + 'info' => array( + 'display_message' => dgettext("plugin_passwd", 'Password is changed successfully.') + ) + )); - // send feedback to client - $this->sendFeedback(true, array( - 'info' => array( - 'display_message' => dgettext("plugin_passwd", 'Password is changed successfully.') - ) - )); - } else { - $errorMessage = dgettext("plugin_passwd", 'Password is not changed.'); - } + // write new password to session because we don't want user to re-authenticate + session_start(); + $encryptionStore = EncryptionStore::getInstance(); + $encryptionStore->add('password', $newPassword); + session_write_close(); + + return true; } else { - $errorMessage = dgettext("plugin_passwd", 'Password is weak. Password should contain capital, non-capital letters and numbers. Password should have 8 to 20 characters.'); + $errorMessage = dgettext("plugin_passwd", 'Password is not changed.'); } } else { $errorMessage = dgettext("plugin_passwd", 'Current password does not match.'); @@ -197,10 +187,11 @@ class PasswdModule extends Module public function saveInDB($data) { $errorMessage = ''; - $passwd = $data['new_password']; + $userName = $data['username']; + $newPassword = $data['new_password']; + $sessionPass = ''; // get current session password - $sessionPass = $_SESSION['password']; // if this plugin is used on a webapp version with EncryptionStore, // $_SESSION['password'] is no longer available. User EncryptionStore // in this case. @@ -212,54 +203,31 @@ class PasswdModule extends Module $encryptionStore = EncryptionStore::getInstance(); $sessionPass = $encryptionStore->get("password"); } - // if user has openssl module installed - else if (function_exists("openssl_decrypt")) { - if (version_compare(phpversion(), "5.3.3", "<")) { - $sessionPass = openssl_decrypt($sessionPass, "des-ede3-cbc", PASSWORD_KEY, 0); - } else { - $sessionPass = openssl_decrypt($sessionPass, "des-ede3-cbc", PASSWORD_KEY, 0, PASSWORD_IV); - } - - if (!$sessionPass) { - $sessionPass = $_SESSION['password']; - } - } if($data['current_password'] === $sessionPass) { - if ($this->checkPasswordStrenth($passwd)) { - // all information correct, change password - $store = $GLOBALS['mapisession']->getDefaultMessageStore(); - $userinfo = mapi_zarafa_getuser_by_name($store, $data['username']); + // all information correct, change password + $store = $GLOBALS['mapisession']->getDefaultMessageStore(); + $userinfo = mapi_zarafa_getuser_by_name($store, $userName); - if (mapi_zarafa_setuser($store, $userinfo['userid'], $data['username'], $userinfo['fullname'], $userinfo['emailaddress'], $passwd, 0, $userinfo['admin'])) { - // password changed successfully + if (mapi_zarafa_setuser($store, $userinfo['userid'], $userName, $userinfo['fullname'], $userinfo['emailaddress'], $newPassword, 0, $userinfo['admin'])) { + // password changed successfully - // write new password to session because we don't want user to re-authenticate - session_start(); - // if user has openssl module installed - if (function_exists("openssl_encrypt")) { - // In PHP 5.3.3 the iv parameter was added - if (version_compare(phpversion(), "5.3.3", "<")) { - $_SESSION['password'] = openssl_encrypt($passwd, "des-ede3-cbc", PASSWORD_KEY, 0); - } else { - $_SESSION['password'] = openssl_encrypt($passwd, "des-ede3-cbc", PASSWORD_KEY, 0, PASSWORD_IV); - } - } else { - $_SESSION['password'] = $passwd; - } - session_write_close(); + // send feedback to client + $this->sendFeedback(true, array( + 'info' => array( + 'display_message' => dgettext("plugin_passwd", 'Password is changed successfully.') + ) + )); - // send feedback to client - $this->sendFeedback(true, array( - 'info' => array( - 'display_message' => dgettext("plugin_passwd", 'Password is changed successfully.') - ) - )); - } else { - $errorMessage = dgettext("plugin_passwd", 'Password is not changed.'); - } + // write new password to session because we don't want user to re-authenticate + session_start(); + $encryptionStore = EncryptionStore::getInstance(); + $encryptionStore->add('password', $newPassword); + session_write_close(); + + return true; } else { - $errorMessage = dgettext("plugin_passwd", 'Password is weak. Password should contain capital, non-capital letters and numbers. Password should have 8 to 20 characters.'); + $errorMessage = dgettext("plugin_passwd", 'Password is not changed.'); } } else { $errorMessage = dgettext("plugin_passwd", 'Current password does not match.'); @@ -275,25 +243,6 @@ class PasswdModule extends Module } } - /** - * Function will check strength of the password and if it does not meet minimum requirements then - * will return false. - * Password should meet the following criteria: - * - min. 8 chars, max. 20 - * - contain caps and noncaps characters - * - contain numbers - * @param {String} $password password which should be checked. - * @return {Boolean} true if password passes the minimum requirement else false. - */ - public function checkPasswordStrenth($password) - { - if (preg_match("#.*^(?=.{8,20})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]).*$#", $password)) { - return true; - } else { - return false; - } - } - /** * Function will generate SSHA hash to use to store user's password in LDAP. * @param {String} $text text based on which hash will be generated. diff --git a/php/plugin.passwd.php b/php/plugin.passwd.php index 729815b..85bd809 100644 --- a/php/plugin.passwd.php +++ b/php/plugin.passwd.php @@ -43,9 +43,9 @@ class Pluginpasswd extends Plugin { 'v1' => Array( 'plugins' => Array( 'passwd' => Array( - 'enable' => PLUGIN_PASSWD_USER_DEFAULT_ENABLE, + 'enable' => PLUGIN_PASSWD_USER_DEFAULT_ENABLE, + 'enable_strict_check' => PLUGIN_PASSWD_STRICT_CHECK_ENABLE, ) - ) ) ) From 3bcef6e3883ce64a3d87d3dab669fbf247406730 Mon Sep 17 00:00:00 2001 From: Saket Patel Date: Thu, 6 Jul 2017 02:46:27 +0530 Subject: [PATCH 2/3] add option to create zip from build script --- LICENSE.md | 2 +- build.xml | 8 ++++++++ js/ABOUT.js | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/LICENSE.md b/LICENSE.md index 4ffb687..4d87ad5 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,5 +1,5 @@ Zarafa Webapp Password Change Plugin -Copyright (C) 2017 Saket Patel +Copyright (C) 2013 - 2017 Saket Patel This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by diff --git a/build.xml b/build.xml index a5f4840..543e6fb 100644 --- a/build.xml +++ b/build.xml @@ -233,5 +233,13 @@ + + + + + + + + diff --git a/js/ABOUT.js b/js/ABOUT.js index 6e2e4d5..3cdb890 100644 --- a/js/ABOUT.js +++ b/js/ABOUT.js @@ -6,7 +6,7 @@ Ext.namespace('Zarafa.plugins.passwd'); * The copyright string holding the copyright notice for the Zarafa passwd Plugin. */ Zarafa.plugins.passwd.ABOUT = "" - + "

Copyright (C) 2017 Saket Patel <silentsakky@gmail.com>

" + + "

Copyright (C) 2013 - 2017 Saket Patel <silentsakky@gmail.com>

" + "

This program is free software: you can redistribute it and/or modify " + "it under the terms of the GNU Affero General Public License as " From fffa1ddbbb504f14c0e8fe5269dc4da096ab3c98 Mon Sep 17 00:00:00 2001 From: Saket Patel Date: Thu, 6 Jul 2017 03:07:36 +0530 Subject: [PATCH 3/3] update release date --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df938c3..712bf18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,7 @@ - Bug fixes for LDAP plugin - Improved UI -## 1.3 (TODO) +## 1.3 (6th July 2017) - Add config to enable/disable strict password checking - use encryptionstore to retrieve/store passwords