From 4ce75ef9a78b0ccac5db73db876bc9bbed7245d1 Mon Sep 17 00:00:00 2001 From: Engincan VESKE Date: Thu, 8 Jul 2021 10:16:03 +0300 Subject: [PATCH 01/11] Documentation: Update VoloDocs `Creating a Project` section --- docs/en/Apps/VoloDocs.md | 10 ++++++++-- docs/en/images/docs-create-project-v4.4.0.png | Bin 0 -> 27201 bytes 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 docs/en/images/docs-create-project-v4.4.0.png diff --git a/docs/en/Apps/VoloDocs.md b/docs/en/Apps/VoloDocs.md index dbbd3712d2..f85aa78bbd 100644 --- a/docs/en/Apps/VoloDocs.md +++ b/docs/en/Apps/VoloDocs.md @@ -49,7 +49,7 @@ When you extract the `VoloDocs.*.zip` file, you will see a `Web` folder and a `M - ### Configuring Website - Go to `Web` folder in your VoloDocs directory. Open `appsettings.json` in your text editor. Set your connection string (same as in the `Migrator`'s `appsettings.json`). Set `title` of your website. This will be written on the left-upper corner of your website. That's it! Now you can publish your website. + Go to `Web` folder in your VoloDocs directory. Open `appsettings.json` in your text editor. Set your connection string (same as in the `Migrator`'s `appsettings.json`). That's it! Now you can publish your website. If you want to run @@ -127,6 +127,8 @@ When you extract the `VoloDocs.*.zip` file, you will see a `Web` folder and a `M * **Navigation document name**: `docs-nav.json` ([see the sample navigation](https://github.com/abpframework/abp/blob/master/docs/en/docs-nav.json)) + * **Parameters Document Name**: `docs-params.json` ([see the sample parameters](https://github.com/abpframework/abp/blob/dev/docs/en/docs-params.json)) + * **Minimum version**: *leave empty* *(hides the previous versions)* * **Main web site URL**: `/` @@ -139,7 +141,11 @@ When you extract the `VoloDocs.*.zip` file, you will see a `Web` folder and a `M * **GitHub user agent**: [see how to learn your GitHub username](#learn-your-github-username) - ![Creating a new project](../images/docs-create-project.jpg) + * **GitHub version provider source**: `Releases` (other option is `Branches`) + + * **Version branch prefix**: leave empty () + + ![Creating a new project](../images/docs-create-project-v4.4.0.png) ##### Retrieving GitHub Access Token diff --git a/docs/en/images/docs-create-project-v4.4.0.png b/docs/en/images/docs-create-project-v4.4.0.png new file mode 100644 index 0000000000000000000000000000000000000000..fa30fcbc3afb087a00adde36f7aa5a23c4823ea4 GIT binary patch literal 27201 zcmd43cRXATzb~3jga{%!2@%nW=q-^!5azW3exJ?C@oJ@@>9&n&YTto8eStMHd<$`oXbWarMEqj>fdqj!gm|&bwE z`pwzf`B`f=?{nwu#-D*6YkM1S&RjJFTM^`U20C&oxdW54?$(s&StXCE_kD5Wjvu;t zYV%dn?lw$X?8lEER@UZU`L!0~RKHrwcW`R-(Dr@5IjwO>{q%94YqA@fFn~!#JHP%E z$=)-9mMxJ^#iVXZCi=?z4Y+Tzs(5_&N{b^wF4G|7h@8P5c9GWai{|IVElq0soh2fuFr2ej>}W;>L4!C%Ms^Rj}}Re%oh~=#MXT(>r%ro z_G!S`9JE)NM0QOA(4<2dzw)(mKYsZVtS)!l&T7d%3Ui$N(A)b$ayy^e-)Sg4(6g0j za3f*>*7U*GMI%~l9Q49&_kN7*0h#mc?sYM5^^O&v)13@at)1af!7}VV@mm|pLfGj= z;KL#xR@|*vxP!Zx#rE#Cyx;Efodk@mjIsC?_0SicUOMsB;MTH}9ouPVZPy_|`ADo- z#$#HG89JMW_mJxzy&jOKyfC2(201?oJRU!q8U`x$xhvmtVr>w(K0gqsNpYFJhl}Kj zZqVB%rx}k-C@NLV48>{$ET?NOs~%(%?D7w=-B9lYOQ;56OZ zXh++^!F0lBd`Sge)O^q1+W&58h{wswT#-$HtWA}%lx^CxCUQ@N2I}7GsOXJE)7U z)rBi+rajQ*8jqb3`ZsXZn%xAQRpffWQZYoCY%No(S-^Joo0N0jBs1l~+jDe*$CLuv z`7!!c(PFyM2M&t~Q{wZB?>&-mBTu|}8fX}2UtjdAlaF#nglzh%_n@dg$q5+M1s|+W zaNN1`xL?{NAt4yvvI4GWO}@jX9K))`zcrShU#wB2CsC7g#chQmj_mC4u1)98*7qTFUc>>cD_B4ad3vos^PYe_mwI{> z39I)!w6zaINeP{OKR-A}h3z(HK6+AR6y8BeNE<-KXz+ge6u0Ef%o=@9+E{TSw@G<^ zGtfq&u=(BiVqFi`5hW^ zG=>px%_|K(orTj45GZw`w?bi?$n1#yZxBVj0kj_tn?qS zz7DF^%J|JWhj2Qh?J7wm2J zq8*1w;A=G8FM8{)u@ z31zFF*&-&d+7qODgUs0mHD-E4ZX+Ssl}2nK zA>ZP4m^~MJU0hsjnch}w@Ie2ax<{m<%%wLNxSw@BHNLccV6d5(yPHq&7C$B(KQs*4 zD$z+C={9-T9=aX98Lcu|on>H_i0Jp0NtdgBWSahSSaPh)yyp~hI{lkE39?F7yw(0r=H}>J((obFbm8y?v(~23+mLx3RIV3IAnr|kD52(KdNh7o`+H|JTo!81 z)G%*jnfJV3oASv@^kb$B&gqr#4_8GY)ZGsqVuRtAM%xL zi2hI(>-y>0VT5W_o6(%QZusiJJ8}0r?3;%EXBW+5;eU0}pmya4WxWU&$^*LFwgXea z{2-7O`bV5`58H(D8->PM(J?BM%w8f-Y*i zKejTx<>>V$5VseA5?ctiFM+flN4ZP7u=7w(+(BG7T|Rs?omfT_29A7LgudBcd^GI+ z;^(%C*wjTRxIN4n$wG*zUfvTd+beR;%heBuL};$Hc-qaWEqVTq3`o=3>6mKu66zZ0 zQBo5z5kJ37VZz+;O!U=FJz7PYv^Z+ALA7j+cbkdvpz`w0qeG*V)gSQ4lg)+i%@OH&xBIB;|N#V~cjK zr8$=zts!F*gH7;C3{Km3Bm}635(2wC?upGrHTswzpZ9C{&L9VlH*GGAe_D(V3uTye z!!_=LZ!iZV8<&nPJNlIro>odFl+8I+ls(>3VR1PAY-=S<763snzCk-*5k!D+>Drq1ZjsjvdbK|R%C6i%#PHO1{Tz( zJnwhqw!ap^#J2V>!R=S=UUKL`{v>qKfwPS?kFweNvHesMrcZfXxWfL0dU`Au*i?;h z@7g5S)+6{2gD3)PYixq=5L}#A8k+_(SF@-*5L*+aef{I4rXIstD+n)pfgV?FdER_X zKdU5qL*py&m}$>s6@{0Y@RO%9I;u?+uJt8;Ph@fQDH^+o)?e-RJ?8Uz)|tOR6i$Oef6u5jM!uk zH;WQ(NM(~#vo>c|`73A(%-8pvloXf;jC=!XyljFh9W!sfNwG;}r>={Nd+fH^u<+SA zCMP76AFknwv5u|m9Er6;@QNW3DXS#|;$QQo9tE37A6XVEj)kstl$osF_tA5Z4jYM8 z<=dox9s6@6X z4G)L>3hH9}^dx=W2nxy5tP$|aXJ?1h5C|ALz$zPCZ6W1%8`Ok|IjwqFCKp{N=7CeXKv`q{WqpDfnFBM{muQ_tlO4 zWT!vIzUE6U^CuC?JRNpuuMDMFBwMongjrb1+QxJYgEi-b+pX(R*ioL;;aYJv8My|7 zqEcft_v82U$NdhgG6a$aVvW~$z0ICcd)^}Z(u%t&)qpQ>R6&X{gozi- zmj^(SXJXkoe5eSr5;t~d+NE5*#jF}PvR8ZP2*0gOu7{!K(YU_Nn^drC(M`phwPYEI z?gvjnIoZK%tn>?FL>tSyGqG0H&DpK|co$P3I;XN zP+5rd(rEn6+1%R#Op43PbIYRbx!+MY`II=1nd?ZHu0=--H>(6oI_;0h-)3M?^0;?G zEnWOsuk12K%kUR+Nio~ARhSiRN*j;7U&~Jg_T(fN>lnT+OZ3#e5+=IPMO+UMr2^PN&wZV*<{XFvf`6lgl ztqX3bw4x=`mg-Cf>|zfp#H2m|i=6SxUe4-yUn?;mf2s1AuSH(6V-f9@gvNpu;1w{4OB`MLd$6w5C+{B;~`;upBmi608aoW+&{2QVj&k_U@fwsFIzemqRrE$z#ZCWoKH^xY1 z#P;Xc^$!G!axD#)Zil3B1Ai2fPx9nXo3?DP=49Vh*tHgOB)Y%5sDOAn#Th>A|NmFBgn~Z1{A2U(a#eNlNiO~1{6Dw4V;h?ys%Vd#6$xyk_|m2wLC&$hH}1;oc&U3daltx}L@qi~Id zzogMkl`5qg@g)J7(Gj+0W?0Bbe9ZbsLYvvB?N*RJMM_JuYgcxUD^)w&fIdXNZeLL( z<^y%SZuqR2)7DPw*4WoPhS3|~3n?fp+r)x*(Mlc(B>{C=(BQXgf8L2RXbclLuasd; z>NrcjiKA@yR}+`XvoCxrY|=;1C+^j*6?=?Y63;LLPg!}7+1;&nm^^UBH{S}JXSe^B zY>43#V5Ciz9>>_29>+Afl4H_IURyQj?6g~zi{1(cwreqp;XhQE{3*l^>z zB?Bf=vwA+#Nm9ZoxTVMgnbnu03OT+*TMyfOH02W5BI`tqP7-Vu7r?^q92eqx7NF{PJ%lMWf!&Xe7&5UEDtYOBXg9Y}&V(e=smSR^3^W-AOZui{Mq+Bx66H@kB|=M@=@K`Ik6Wjf_nw3tJj;jZ)xlXI zAZ>c0!H_1qT=c;vYb(?64e&YU7H&?k1AXFzeKO=19q$Cy;$v_~i`d*>qV#i%-ZREAS4}2Y-ysz zt}$eaUvctdeOx(2!k+b^__yY0eYkvrv!}M|)s)%Cn9i!PRJ2>d0G!_i@2KNAf-KNs z&nj?NZPDTP{?LH`VqwvVx<-718rI_HJHLJJn0~Bd8vfm5t+=Ig*^ZK!OBP*5MMWES zhJZH>F}Y_*gW_La2>%spv}EaV1A>nV2= z6B8DqXRFzHJ;kUMvX(uC1;>=%LKz(UH_LcupX|UU5y48fNuQ!=I`{tOs>U$Zod~qMu*BTP2cIeZ9bPpY^@I8I*7`UYf{}D zF_sIc`Qp^6th3>*$9)ivr;D*%O3F0<9UbGeWNtTrpLl&zmcP2-)Q^@5i39Ld@TH|5 zJGAFFxved~t9o!}Wq^;Cif`WtsGN?JYsyE|Zr`PLXUr~|nln;Ac&viTJ!6wefRJ^a zAnbfWNlyH^T!5tKiz?P_seiQ(&ff|I^06hiVP>9@|@8l6j5Z-*Ta={{e z@6$TD2sS#HvS-EZJq-I*Y0kmUbM2o@Nmi1Snol2&`d!(x_HOSfFMZ_lPUK;S-Yo6` z2q=W-T1?shl%4VKr1Ost0&KBe4Ua*-()iO|zh1kl_C`EPMfhRfWvPCdZ~8K>fB4_G zWM1QE6I|>w|2~Sll$obWoFV~X@hcPDvrxIdL%G!bg~OQU19o~2m75W?Dt_7$I&7~* zK-$*D3jj5|(o7Z7meMz0n z%-wx08|BxBUOl6@xGHd83=iUW>NQz)P@vkx!_F13{JExly9f7YBb-Bwpvk^6{sM79 zT&91MRzNwA2B>gyyzw5pcgdW6a0Gu;glX-yl1^2{SV&Hngbbrsp7kA@O+EY)XScIn+m0N1t&RiL(@@W&da?n=f=7e3;I^A{NqbdZ*?2Ji~K_Nu(`-dWG}{xHpoll zZI8cWAnII};tsHNBFY+zoU-|sirBKOvDte*IPCnRb}!tRF4y&eABBl`?)4upjmY!O2o#wz)`V)A7?UZmc0;b5FNcs<%LAk!w3Oe(p%00?ZRUL zqUFN{-{6hby56Fz5hT*fXZN>;hTI^A{efHgC%fMvY82Y;!gc#(pIXo}?Q?QQIhpbT z-))%ge73qYA+rxgPx|1|orGm;(loIbp(UiaA03urH$r#SlM>O368DssIeBLGGr*7Z z(w|^WcSk4*M(n+IsA>GgxMla$_@?JN9p=(Rfs#8)`=3|Ux7LFC@`jBAO|L0Li|2WZ zkOaS|e&xsjELaotZQ=2>+S=IK-aMJmx06lLGGnao7Ae-an^zLSmpKI}#8F6=6+4OQ z$Zv@9CdOpZeMPNxsg3(LDiggd^Iprouhgc@xI!xsR|Js^K@rikFWS1xK zW_q;96Zb0ASCG^nlz=FRx8_G@&m>4%zhg+$K(T+`piN&`EWI%v>_SPOW~V!T}Mos)|BK0|&aVE^ICXY`GztA z;{D-an^L5%%c4FeLCE~%v%gy$Bu{su#Jr+dv0=g%(5|UzQUV|)(WZ5kE&|s2KYCz@ z<(8VGXrGJyg@{QBS?{lo#1qsB!r8EYmPL}J1*u~;H|wMOTb!*8*#!o)ZI9CreZx$# zSh4L|tl>^lib~;edwyx|9k&uK7mp;W>`gFfvtePf2l*4WzINZW zxG#_{8Y@OeFj6K;d4vmER(VO=w+nAh)jX(?*Qgs^#y}~Y4wHU+S501w*=g!f@wMSy zK#S?JU=4H{nthUQ>+Ab28CW*H=_@b40@w#+_5T0qfx}UzG+q!Yajn~c=Fc7oy6*F# zdX6LO`9j@vKrAG$d>&9F{XkBJwLF0;sY!j zCDQ{}QD4z03$@x)7G~{=oI7$n_^A^BSw8RP5$n<2@22e7xFl*~ejsEyYq;<9&02Pu z`CEc#lG`fh^c}iYew*V`2k+u=Lc?=E?kVgt_y{}LO8eQHM(mm+C))r#RX|%Wd^u~T zR*IVTn{G28w(^BXeB3;SCz{*7yylDJPJIY%An4Y3T-dVPjVkNswg~t!Ribe|RNPax z_%So8U|FR1Fri{v#|vf=xty}89)vr+dU&A77PIM*ukD1sd&0_aAokCn>y4rYi$7c$q+zy z{)&J2a!**S$0%uMQW7NH_&WsHGVC0jR~fn^=Nkif)fnQz?dv3E8jUTmLYI)P(kVBi z#|^GT=kU+SjjwN6*X8ngkd2Jwtv21tmcDO(GHys1Pvq_Cm?BO`O4qxTm8ud2CurOf znxoj>Zi~jIP=_6^cS6Oj|7fSot(FHO>7(>}eC7vOuC5t?<#rEm=JfQrUPY-Ccn z{L2?VYkh2301W@y&^Wl-EIi;$>>g>8g5y7d2$)4&9}hV}dfa#j81> z?ax^qL+v|LwstFpJ5z?sYQ2NHnok}-DShpGFNVQMF753vab3c0AA%Jzvb-n!hcDST znJFg8ir}+S6XMgMhF1oNtPGOY71DaY!GkDc1Kshqi?V{ygEk?;Rrk4BRs6ELO+Wlr zB1|^SDDJc3=0MfyFMD#|m+3ZuowzF85SDrfWji-F`Y^TJnjuq!(!T>^DI*n2oDK-c z90{GAaIzOhMywFAB|dVgo%S?$r*jlkBpOKYQ3i< zhhC2TSM4pG2WIraHp3Y}ki zIv|(y*Q?Ai+P^c=(3^1TD9n&jlr9(TA?$6>0m>JKWpxrAK^-X)HHw+QDg)(U&ouAm zzcgd-$@&;xYOoINqP0NQly|vz#s$o>gk!Ldb#7jFz>zb1G4>T&F>0L_I7Y=HsCX_wKm_H;%H_in#m=vSU+OL zwKT`tI@_}-MWb4c|Bqm;rV?mbaVa+URTQ(uf0GlK z5JtF_nNM>`6t3{Zohjpk(;W6OkT;mzLIf1X@IHq_KTnc_!!V43HUrkvprthVG+$7lnq;z-UMLAJu zyNpHSvqRL)!ohae&TgMv0@R;&Y+`1Jru3fY`w?MCUMn^6Sv=Pv^9v0vMd>>0R1bxX zXOjMsUPT8Tr6J>Y9g0P*H$dyvwdH!SSl0TM~o+GC@`DoGb%BTkP#thOOm+YU3XcM@g}#*%Kq--3$P{n7!qL8kjorZ%8|I0^<& zJI%%q_tdi}T-b|V>J{OszEOFQ&{uvc$E@gVd_6{X^gMr`b+_P~oA!cYJokMSm-5;- zXcKe9S+|{7vztmb-G()MqEj=%qf)gxm#vjY=U^mUg(RgSnDe;ZG#?*qYXt?7vl?fa zVe2|K@!74IwiWjkj@fnM38dEO(1y0?%!#wP*7vD&;Tu5h;Y?Qz8WtiYHmXbl?k!3` zRPf&p-8sJ3^pn%be?Oy)ysRgv%yn7`HC!rc9Hke5pfxdeeZj|j=zw45w2-!Flw5!f z+C|5xR?ml3$uItZ*JY>M^LGipshi&FKf2m!WplCGzsRAVT7y#qa5Lzn=nq!pIe5R7 zdbtf5PII!(dVB9TLZTnSi%w+HB6q5zzLiyWR+Je3l#dcKP)wke26TzT49^ZBo-R1) z=%hWdq8hAK^r)VIHA8WM2g{-*o2BcTdk|?D@2M9(G^-0n1O6ssCm?M}Z+w-aFJ(^F z=H_|(VmBJLdoQ{f-ieQL0tVJ~02*)y^5_qJweX~DHlC4FQwE(JYn=%tl4a%`S@Qh< zh|cXwAlg~X+xu=p{$Y%6V*ePUXSdn^3&v=N^4Q~wpE`R(KnR6dyu3grb>Oi~daPto zg0^GU+<$-&8r*>-pb3LNFriTGnL_BUF4CP=PW|PkRnEiNUN!W`Pr#ycK$?5%WrUIJ z0YS0v?jIRWw?4D!-@!fC9x^=0$pa!J--&*Vl09Lx(16A4)?MpS(uWR`*GP(dg*fjI z8Y=fP^(?1|tvOXR{*;Ol-@3|2=CV;a^NcTIH8#Y6Yd-zf003a-&08yZS$*fqN`xNf zh4i?+IuJUFzRx`Ccm;wXIQrA34ruJF_aaYzlitp5rV`l&RLR2w$FWTJ9IF!gF-Zgr zXRlY|m>6G5HD40;qBYbf$na$7FD&D=ff381gkdVd!;6OP?tD{<$g4xBeGQ}^)o)~yT$3TF;3&_s+X^mJWys8X+{h!G8OS zbyR}WqA-uH(`wAYlhKU;Z8LNCxtS5!zA*XapxnjW#N;S91t;}q`B%GC&p7;W zjJ-}DGeCn}7^}%&r79csyWUq71>F>QakRmlbuGB^RnX%jzDb#Z)pw$Z%n!VBV{F@u zn^|>R1bYw3G`!*y$0K9MzzdOFEFC@e^;Ui3h>Nj#<-C7Mxp`tyVctOz;esMwYP@E1~cvDI`Q8HLa@%q!w2KLG%obCG0 z>HK09Jp-zW_S4?e*(W02@2NiQMgNxYY&)-!hbwb+%!TIOF3b3fOSAe8Z+w1PWF)vR zb`pozlDgvIRHPqi=5u`pVCwiNIRGapfmhi+^5GHym)aceQ7&(yqV*uky{c=I9lUcQ z8mLR)dtNnv)mz3Xib_GPS&HL}6Yci=@f-&S+;MA|_tGM4Fslxx8i~ez@D?c2>tu`b zIh?aW?`9wYB(+ieHcD0JQ74oA%8Hzuu{QUUMzX*j@BY2xnq`WLy(ziIMtlBr@1W+= zc9{h44Q3Rh0Q;qje^OB78Xcl9uWhcGb@`zX&#)FD^<|Q--PoVEg5`$vw+7H7E}Q4Q zgu&gZezp$@q1gGJaX{A|dCT`V5UZ4V>D?}8>nXJBP7&4eud=KGC z(!4H~{hUeqM&>D-VsqL0M}B91o2~(aFb$;?TS|(Q4-`J-lR5qXND;tn72K&HGpw-w zP+M|70~)b&ZuT0J_P0JmY_{aZA(!cU%mYR)bJa=mW`(YHbB0lo#`lp%@dG5Ebd0T@(vqOBfN0@lRT> zL(UaTmUIyyn{2H0L&-Lk;hT;lSu--70qeM|67%c}j_ZItxIRpRs@dwVel+LR_xn|E zEw#qu^req4p|l3hFgk@TF~Na`2IQT)x96Vr%VfJusE zoZw?)Gd+~Uzs4Z%@0T)_+vtaX&22EMRkXWr!QefN_>s5!P;lGW8@ABA6d*szr9Yjq z{mjS0Qh9D22m2@=p0^)wUpj{EQ=WDfIk$(Qrb@Kmm|dhWX*Vl5-4mgj%cNTK6%QT| z-@Pnnm={YBNx0+bBP14sw7sO`&_G{tvy8W?eV7V%y9)%Hn#l2&-Zc_2NsT;Z4D{(n z^y|8)d26|wov+UhY!9+GDLIfS(T{vp)kj*Z`u)I()-WV|SFEf*ZI>phr~iucK=l@Q zn*J-KSPigHOjb=tQ;1Q8#;vp6itawSZZ0x1C&ukc$rft<>HUgF1~VE1!;Aw>Z_g8j zra<+1UF}@a=2Df!htvB>Wiho#h4E$##Bh6IqQD}8%3Dt9TfYu2qp>JizXuEiEO2EB zmNm2BCfgXE?c>dvA+(w>5$cauea)(#V&`)~wqd8su;1?&7K9o2-@0#Ffvu0*W{vEWcfgV7PN2E84(R3RQ^M}_}?du zh;fzPZxFWTI!8zIqgHRLJsHAX-5eBT4=cZa*Z|2>;2xT|)d2*>ob9hgrDG|lGpE{9 z-=6w0MAKOKXQ31`iA ze);yuy?I=ArLwFjk1;LWKf+%{Z7eHK#;RFgh68K2K9M5A*o|US_Z~4UKK$)xZ2lII zSgMhMReXjpE<`W-xEmBYiGz?XG zdM}WG3X<_d{AbXS{?Z|`(HiOwAdqXpd_d$WF3=kg_}kd@`R8in17PPLW5;!_k&(3> zaq0JP1F`zO+ybHfkI3<$KvPOliX+kHs3>Mhz3*orBC!?Bc#;j@VRf7O3m_Tta;ix0 z@5IJG{#wed#d_xSo=F2bhJd#5kh6{aUXS}~u|gpbQT|9zty{BKZhdED_*xocQiU-^ zT^8@~>leNBNafJU{spt+&yZhmus;tEPv)FlOuIr)7 zn5rCRqUt>C^KY?dmAmgvh)DRah+lem0OnW39BFE6+mnm3^9ZsB$~2lU{V$1`|5bzN zj2T7WZ1;+x`9~_NUi(ifYYXTS{MV_he-e=RCx`ydOvC_5PstP--J7%Y6*QxckAYUu z-@+-s91n9rYypG1p;h1?veQ$`gk}*Q0Rjd#FK+|4d>kdt-LkS-(!E(y6=d}znAU(^ z|A!xnnv9NS#a!fVzN9$crqJ@BO3jnL1nFGD&FcjPuVnog9%#lzDFZ^?@i$8|6;KY; zvc>x9PxnuBR4nfLqUWxr6lB>9sH{Y}FAuvVkUdhi;(!*EBn;dyoo>JNzs3ZBC^KAHY+Y>qI-dR(O-ldAKrH(BF zQ*K=adIYY&l5S;|H6D|`DK`|Oi?F{hsi-4>oRfGL9U`D^vE!`df^$Q^yNORWQBsOQ zY+Ex^kUrYOcDgy-in$^eEFCrI$6H71*$usaH8ytu+_H+WnHs-Qm|CfD*tdd+Ik2rh zf*2AW>pG3umrjSgLjA~6Zr8MAX7vv_^<8PjzvnUJLIHgT9<`9?`&`<4l$24A=m~@N ze$K(;u^CQ}1{>AP?m#nlI`=4M0j2jTvDS2q25_`06SV#k8Uev_acAYC61~-Y4A}!{1}yc`79&g>dsrnV;1S_DP?%aHT-c^vS}%iw;nr=#Xy#@8VIv5kG5v)CNxlpP~J1bpY*m zkZSblY1bEIVO^+u{N+x^S!1?ht>nb3)lR;H##pK1i-9hMYxg9_4so!&K#zOUTf7^d zCt%$nVmCtpt-1>|gwmfux=DW)bsD~&P|;1czZ9Ws$?R@u8P}L)PgAC8ILu9e`AGlHoX?Eva+N%^v1z?~jj@@vkb9dEJN+Wqz$T=)qU~US539im)|P zvjO4uGR02QF%X%Kl-e7BGgJ(i>Cm75*x3K&9eTvJnl2r9Uaxs+0W04R{WB@F`WScW z`_eHV^z|xj>WgPPr|CmOAbA_9_ycmajAM%Ps{UY=A(^I|wDF8jq9MN` zyV%rA=q3NV9C)$HA3Lk2R(X^e&=czfS`sRFNoG!}Ub+J=%(~Pi-X^_4DM&Tk8)*YbUUA*S=IB_XmTQCkr%W}g7bWB%igaV~-qn{4w}fL!_$Ab7eM zu|2rIRR>6id49m>`731Jv*HKeL4N508CC<1BXt=_9zK3Aj0C_2vH#iji49VnzN0k# z;yol!27;%OT)H|7SUo%;>uxw%_N-qYEdGZplmEo_Nu$1OfbV6H$os+jId!>h2gn+T zdWou;YP9#Rzuf}t7k0Om^FR!LB5R*l?2jY#Udw)*W&)==^ZKWPAD}DrQGMDf=0<>S zQ&8By2clv?DJh4_nk)L(5BXcpY43dXWrD`w?<22{EV=ELf>nW3LoY0$;`QJ^=1H$l zZRl<2cPclw4+wQ-h5#jBZwvULQY3k2UbQgi{gC^poO4a?+2T?-S1rjhMP{44v!PWPr;kW9 zS6$`R#8`hj7OEGQj-Mq8lol_h4G)8sVpr%fO*=`WA@wmJ%WLXjf z?a>=5na#ITQnc3AQ}V@{P8u#@sHB{dHd0=lo_i=N_Wt1h1Ad@pBf$%!Bn1FiFTq!Q zH&H%~x1=8xSeg;rXku<+#IDV@-ts54Pir`edHOxbfedz3EpBS+Mg}ahQVByN5h*H{ zrFS2HBdqx7)-9QjpEkJ`Tvq>xK^11RBwBCL-x+I@zm;MxHowwEs2Q`}b07#A>t-F= z$au!MUW!-Mz|onNzNxU_6Equ@D2S@9! zOBa_$Mpbr#^vT)9rH3npi&*)Ei4I`S+sbd`?n(%EdeQ=6 z0Sj$9Ow#A^nQs8o+rT{44&SvF0DVszCZbt^xe@iB=f*#z;D0Yx#}eOf)ne#A9;mPe z5K)Epci4HP#m5TIHzONdQ50imbMrcEwAXR8*h6G(JU{0ThU+#NnBV_8cVlq$)!E=x z(a^{j9tGMs5d7|b#HatI>GMwp(!U@2|5(9xEnVhgJFE6=#7!-~Em#j{;+71Lp=PQ}S$g3vt zJ+(JZC*$uU+L`=JJ8dn$-<@R3{_q}Xh@8c*YGX*{s61)Mz?XBa_;d;|GXQ-8)dyGk zE=uqQKtH%kTO%&UL4Jk8Tkb(iYV)s^DqT(zDdQW?LxAE({@BuGI?lWjHvP0zh2cq3 z=9ksJx<4Sd^cY=a5Wi!od4@?TLL($OlfZd76^!z z&5qg5*1(c^^urQ!QLS}D-s0Kfa-_Tg{_H%moKS@RVI5obFK!M)?Ia13;Jj&=x=Sow z!re*Unu{pusVBL5rliKF#SxBz`cdQ;HCS?-C|Z6!i}_hm@uv)AKGzT+QSC<_u-f?e z$Fbg$&$T;&*qhz&NqZ>JSRyiXtFXSpC_2dc=aR9AcpEowm+NbO5sC_IC08uDVl+f+ zCvgv*s+<1Ai&o%o|M=RK&~55G{tArJ7dW~vaQYTYwPm)ssJ@-BSjqJS6HE_c zr?E(#tJKP0^r6FQa2>!Z7<5jvdE6ljVS|wHAxgpU7cMf0eVUu=KV_0-;rM=L`Qv>k$*~AI0uiB3NT(6|m zr_bYU89uPi+QSAL3ZPC(roSP#-1HlScn+D6lko!umTqN0;c?b@mov0lLp8n^(BE7~ zEM_#+`w~M_jU<7xs$zaqW*Y8m%4Ud-vKMca94-&b*YLu) z=hlR}T~mO{kNu#&WC)Nkp5(nqb@%f`u7&4Pb`pL4MYbsXO_Fid$E)wuU4^`4I~85N z1gf^5z@X0?x|A3&S*rN>PngaVSo5M@S){84F2TOv!&uwQyne8hTbHK(XH%p1P=pl+ z+Q$6&CcKR7u-dfar4Z@J#0w$p_9z<@Iv@onPSpH$5FNHD_+u4bvl`-Nv^#;X*_G+q zjFOWkdbrD#0NLqHT&-JRFQJ5cun7n$t#AcK26kDbeq8r^X!C7-H#)4SZs&XKA$rPN zLVf^d1w-q;NI@IpF}vMzaDSU+LR$a&IwyEYBXsXPZo79GYue|D(|5x%im?3rwW&G? zOV==yY!sm6DCt7O%Nj>&C9o|y8MR%%9IuM~z+h1LhT8N<3=Gy(dpJ^7gz|Bhfo~n&!8ru7)XKqu zCv4;2(rhjs$03me6Fw{x{*wJOyS_I-8O$Yg%Jqm6zrdyXz%*okTg&c=hn&|?Y@kwP zQ6Czyn<^0?_-gUl^{Y9?WitobY>+4cJY8!eldqh$AQdo@ZztZPx#eH6H?09h-DCDTz<}xZwWpah}T6%6CbB75`?h~=~Qxr3%M)3emc3LSi zE?hv?qH#WaZR)dJ1V;6&RNY}>RyHH9*CpplA|*ESq0uKSO6B8!tX1nVc<=c=9j{8l zTZ#DPg;EB$)6Ql7p79t<%^s$rt?}+7-7;4Bfb&HE`bB}md=AUzo||V|lTq%UyN^pv z@dxP;U~}C+Ha@$FpaZNs`a6HaLwhEIk7P&b5NI>&l61#;Cmtm z?~niZa_7JrCyUnOS3|EyE1f@ft93Hj?mm^s@MSHhV#jejY{O0CAT(4|$`E5*{h|A5QOPhV;i<-#Pd*YgP zFcjGNpk08nv-3hwhcBuCkwM<#V;uY$uon)wUTtizS+X0%&n$MJ=WXdw_vb`0Rm}|7 zSPk;FQ(|joV07Qw#wZUf(F}iG`#7E=RJbE%)4A^x`Xy39NvRUu*^? z>N2r&PH>SQw>|4oc<-+m2I|0!*-NeFSnTF>bHa2r8vTbf3%I<*M!hEWdm5wq3-gfG zJW8{HisXfBPTV3mf1Oa2g>W<)w%p z2}tLi<7pIzXMK5A8ctWwY#~C>hb*~d$Z7oWjoY2LJnocq?=xPbxAH}zAftf?`>;_1 zsWa`wPUngF3+JynpHDmP&+hbN7CUIfWF`p{2g>^zo7WfnU~@iEMK`jCeS6gpUu{@C zQ*sz{)+hFJl%M|bP<9n=`io-6&K#GP0LP(w#)uZzPi}IR#K=yQ?fgT!)A*Y*g1hW; z(sTGoy0glIDD6h9s>bHlC|0!sTR(q%t4~7}vgv4XH_Hu(z|er1AOY1u>Ye)9PPRHi zoIY~U(d}>sbE276srPTqL}4%+$8D$Pj7cOkUneMKLQ`Y2nD*P`E9Cl~P}D?@k-v=0 z6v>diuL0P+L{qz7GJQkp(BS3Y$(0RoR=t0XoA&U4%XW+$4D-p*#N}e*L$CbTCG7{( zMkd?D-s{@5DH7YhR0UJGzoIdZU^fHO>V2D~ngbLiusvk2)^8Tem0a_9rq8Ed;-sQr zSS{Tt8iAJ4;kudXWo6vv>o#LNWO&>Vfuf%nda~g9f3QB9`n8WxZu(h;R2prApT zfOJr#Clz*2+8+;&;8uj#oI)e9cI2Ci@hQ%SRcoxu5VT>+|r)@V;&M-`uah=*rC20 zpS0Ua5JZ%1nBi(*@NA3E+FsvnfaTs8;cb=SB^hSpht<%c^Ri81$zvGpZsd^C(0&u$^U=JS0uCF6=8rSxM!84L^$$-pDD4^GlzDrp#Rb0BqZ2QgD*qEDkl{_uurI8AG zqk1dZ2iNM}VJSb9JkNd*Aj{PbS@ErLS9Y`~trUbGzH_MCZ*+~4V19+{fm_E(kCU=<(s*|>#%_2R6L ze6GcP{k(;5X`$~OH^1uZs%Lft#l^6`JlPCIfQihy4dHV0+(IC_20;#y7ay8S0fCId z>Y%6<$N3op4oiby)cid7hSg(P;{68Uq=LIlOyzVQ8AYJ)1Xf3-nLt+sh{rI)+vFx$ zrs-plD{Up%K!&El5gX-NwaeWOh_hNh|JJFP`^N0!@6lXEmcgp)={Dy z^uUKIyCIOkimQ9Mt(Jgu0N&-fg!k>ZOLIX2z_=(?pAiE(TWMAb?c8>EC>6to^wiWr zg3jgY5^V{#hbNWOB+}U*rTXh@KW#sbx22%{wWTlr9RdX1UjO z?OHM5$$`^md#pHAAMBU&T zlnb*5pU_)QsOnaYk1s!{K>416T466L5P5E7rE0a^|4|0$fa-HCM+SAwN6M1w3=SqO zRrgXE+o@lFE3gt{J!vR3v*d`{Y)nF zA0j=52(`~N%3dh4VQcxSBC?(}u&bxFY)P?@Eg5vXsn}3s#^AEEVBu=6y9UFeN#y&t zgrx>qaqxyRNX(NNt*WS3lQqxkJhd!R20}YB$*ZG(5SNp?mAI%PR~lDyJ@8)x;nn1; z(x$8ea{*%F-4k!3c=K}feooh1va959P@;$FH{a@I`>Nh*IT_E_hm=>wpISCF_|4Zk z9ydu^Y=5Ltycn@Y+p%2}(7WS=m9ywc(3Z?2_b7#=L_)YVgM0n}5~=Z; z=1x$Ilg!I<4C6SI0r*0d;*VF|seV7J&Xtan7uy%DwH{>@-ElX}B*Y5ywTs(|Dx^mw zZ3mEnmv4#rG;VqM)KMh4ulw5(Yk!$xe1DQwkB<*Yo z%b5c$7AsRB{ekBMdDEA>(n{dr&P%P?LPCTe;Yba`il=xUuzT)U`ll88Do@Nd{xl2q0PRF> zZk5s}Umvx&gs%^Pazq+)IG|mpT;KVKF@{(S(8Wl6>AgDenWUyTSz0f?Bsifp6OQYit)PH65F>$c$6GS;_t; zMk;KNTQ+dkb5O1WAboLFc%>mHD1mE%zgJ7w7rUmalGMtFMd?#WOFDSK zS-reS9TcoZB-ds!l$Kqs(aX_ox>^;Wwse{z%}=qC5TtT*^~-tcuFFo?6;Vyaq=;S8 z+AM^-kdnITm%zm(9FbtPFg~`lDE>wIelWiuA-?tQiBrr+$ z?>nv}A=w6!-A9b@I& zPo6G`WUQy~_;z1L(<}4gYk9(TiPaZ|z^`YbDv3CmR4wh)e)=rYz0H4@_;^a3xdAB? z@_2ZC_hGh!K)EdN2K-J90$ITJn(Ks9*w}>fdpu8YSR5gX+R{gx z5ZAVxyRKm}9D8yi<-T?OG5TLlByAlN->9wamDI(m!{hmo4<_1CYWIZK1ml)nu^Fpl z+hb$75ZWXTO+h8uBV^8Bt!$h}M5ceM+KdC2^c5Ozr?)p1q3nuB5v&`hoq_KtsoCQL z7^1YSKMDUY6rF!~HZ>xH0Zb?)de*@@s9WQd0MEVK9jT;)%v3m5&<3opc{4udM5IdO z&!Z#b$vYNiVDnOt!oE2b8F6lOmY<<4uVU>Lt#<%l`1CQR|MQ)@&7jD#h!eiDSq1A& zizwjMn|v-A4)!@I3>MM0`9y;kj3fwXue5jgqfvk&4Bw>mlN%h4+lJ ziTf|0%5C^<3!=WEkBY3P%1xJAhUHnb?gmuWyO=9s)3vylu;n{F-k&jT1rtw}Gcx!@ zus7P}Zb%=dMM-O_aKvt}wY!-b*GXW25ftsTioSr|q(4C&`>MZJ2rt*mV=z5O(wv2- zRH5+7B@cP0B%L_%*v+#>&|9dy>W;H&iAzIYAFs153m(}#{`{GO$2A{Cu#J47=zGa&kd|oCXu;q2s*W5^ zWtDZy^3H=-oqY1*3>{hiG+z08uw~y@Ua+(PKjX<=95e8XF4Vl`VbkgU>RYC4x=wiW z-R7fRaG15EQ>PG|LktA^f3jwo@%N*uyTmIismW4C61)bhFmyAO6n)U6@HY2?RDqgl zb)O@FSXcoj_hZ!)?{V#!_8Imq75lX(*$J--)pIrg5f>@mDfAk7rAI9eH$$dh!q1SO zKMUuzrU!}~Oj-3JiM{NjD5Wjmjcz<)eYW8=9sjl36G1dse4pHZ<^wH_PRxQ;-{7Wq z+mGv`xRxa78ksppKwKPu4VqdWgEW@qIIG2;s-eVS$9~n)Xhs$#rX$vFeclwWlL#y}<+;-Uvh0VbCj{ zto^c@`%<^e0+IVX0+)N#rhFMiHwfRBP`ed`oW@|@8Wxr0%Uv_CybzRiqj%;}P<6ds zNN>q+?MX*`c~Yi-qE=a+8LaBvv)y&rwftQ4`mBu&x0w4-HJ>l}wduX1G5Gnw5&5#S@&bMx~D8DWZ0GsPos-?q>H z>}sr22#gceRIm5tqwa5kecgA#=yBkFW!V^{pgp{LxIJ-fIqM#zq6$lcU1bAXg372} z8qiu7Wv9RI{Aom@7#SIn5qaMaNmkh^>o?c;jiP$d_v!+}WOQwNAD}7C;87^Hu?Z9Q z8*OH7qbQ*6!78c==*6&I!C+%iA@s`8?x7NPE41*$E_nBHL_U}59dxunrZlJj?u5|y z1Om6lzwCLyawh;janas+oea#ti6vmOf&&qr4d^YFN^V+X0cv2-)Kh6B2xeoA2-!yh zqQi%_?>{8PA}}ZLBW^0bkZ)yBg5SPWEGI`ms%D=Fe2 zy|?ExdIzs@Wf0p-zxGf%wuG&#w>8VBuMlF73+k2htibJ&wQ=_6ps72`R2nCE;~X?{ zZpyAxd^a4q`gxBf!GoekdPD0{EbGIvg^2v={f?S5jC<%Sd%JUpB&P{e1;}L7+@rSh zY<|shvPMwYUMWL*EHGcC_n}idMjOrmt!d`YiBg6-Qp+&H4y8OZVIRufiVzO< zG3548jJmgznV8I>L0E$&pTS*SM-jrq^5(hg>ois_X5)<#(i6qg&Et{Di>AG%&K$oN z^rxo!OjGWXko^5?e9l<_0+&YV9+ z)Y{VQC^}HB{cFO4Fa7;nt88rX!OJ+BpTpg#C)Mo*bqnwj=nz`gJ;6d!f9rCfx1Qp} zWH`M+uBHqraB4I4O~`>}Zsww|fMU=M@ZPEPY`~-Z1wOO_#>3SLI}gN+2?4U#N@`I# zgw9UbLzigWZO)&(fj1kxdO_1)xp|;H2&|$9R`8h`Nk3r=fg>iwfcI_YAsufk!vKIO zs_C(pBO`rTaHFR+5G-_9e{kQjHMfzGDkT4c4h#)wQquLh+tqBkZC^ACj00qjTzb>3 zCzK*U8>8>P=rCjF#_}MS8S=#X$9YC7jbf_a^KAnM1FJcIw#D|VHW35Bz^+g(30MY76E zrEDr~1pU74uQ-i9Z17)FvmXTY1bm-O_9F8peQ}vetAS>x*gZ@6KBh&Hr3DL$d$d=74TX6h6H%%hDJPSUo8jITcidWJcery_DUal)-aZ5va1CAe zynHBye~h|~f#SZXU|Ec+v&loc6<3|D*~8~yw@i(TBrn#W)b1RQn&h?X^t~*D2N@hp z201r6xC59kVZlw$gl9)XT?E4Vy7M}6Ik`ha7x5dUM+HPT+dcRhH~pjUInW>3@XugC zk%m|t(AymUo&=}3F5K4YisFfpr z(Qkf0CLSo{!U;`)`JR||B82K^3OyqkZtkkERs8r@z(0sbOR z>+-IU<)8XzLZE+k%e-5S1rEb8G3o*DgiMpSvpiUFO5a5|t z9-ek_U$D1@p5jIh7xeA@imQcvNwR|uGP2ZvbL|HY`Mfcwp6tIVrt=Ayyi1ctPTh<0 zWm_%kNKarJdh%_nRi5X;LyQ`%)PeFK=;L$juU~?Hoht0HIr5%dv!A!}ksmVX1uvSB zm&%x_2wy%j-o`*;!TN(j|9ZLx9sZ$UvdT!WQ{s#RO>cW(g4X`z}g z=b6Z}N0uRcfG?V+S}*Bc@wrAekjQOB`m?HY-W;m(aJrCtqN*9kkd>Am}FGR{ru zndG05FCkQ@=zf4)e*+W!sl|YPPcbQH736%0z^hUy`LKr?QI4XhA&q527RpZ4^~~i0 zm(VZjPGLI%P6{30M$J+~ZTH@MJ>LIDmQA?c22M+K3WpN>-&Gd2j0 zVAswzG8u3>;rA$`Do%95aJ|fs{_>u6Vfc5R>Uok<7Scg``zbw%5LBN||xOR7pT?q=!tz zsP-Cot_!_uPq~l`Z?chsROt=$Y@d9iw6BEN71z2&YgRu)utbi z`!-IjZqAFjRYAnu()?}M@S_ehc*72I!X-P`p)sUG5-oE^jMlO$%HCdZ@>ouks3={S zADLCBUSgMGWfE8=2B}#cB&EoS!VZ%uptgIH%SWQjjTND%wfJ?FxhT%kF(e2mlARA{ z_~#xbhFj>Zf^zVNnWoZ|TKg#jUe`)O&er-q&7d|V>(%PG2=S{Kb!x(#IZ0XmrOeek kQ_4eCosRa$somqbhRAVxXm%O+w@;_;DrqQ|Dm-}dAM=%4!vFvP literal 0 HcmV?d00001 From c9463c0437470f089157a5aa292d059a79f2d8fe Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Fri, 9 Jul 2021 10:07:24 +0300 Subject: [PATCH 02/11] Update localization for Italian --- .../Commercial/Localization/Resources/it.json | 2 +- .../Community/Localization/Resources/it.json | 4 ++-- .../AbpIoLocalization/Www/Localization/Resources/it.json | 2 +- .../Volo/Abp/Account/Localization/Resources/it.json | 2 +- .../Volo/CmsKit/Localization/Resources/it.json | 2 +- .../Localization/Resources/Docs/ApplicationContracts/it.json | 2 +- .../Localization/Resources/AbpSettingManagement/it.json | 2 +- .../Volo/Abp/TenantManagement/Localization/Resources/it.json | 2 +- .../Localization/Resources/it.json | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json index c2573b2121..b8ae35dfad 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json @@ -98,7 +98,7 @@ "Details": "Dettagli", "LeptonTheme": "Tema Lepton", "ProfessionalModernUIThemes": "Temi dell'interfaccia utente moderni e professionali", - "LeptonThemeExplanation": "Lepton fornisce una gamma di temi di amministrazione Bootstrap che fungono da solida base per qualsiasi progetto che richieda dashboard di amministrazione.", + "LeptonThemeExplanation": "Lepton fornisce una gamma di temi di amministrazione Bootstrap che fungono da solida base per qualsiasi progetto che richieda cruscotto di amministrazione.", "DefaultTheme": "Tema predefinito", "MaterialTheme": "Tema Material", "Default2Theme": "Tema predefinito 2", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json index 6df3bd6ca4..513606bd70 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/it.json @@ -2,7 +2,7 @@ "culture": "it", "texts": { "Permission:CommunityArticle": "Articolo della comunità", - "Permission:Edit": "modifica", + "Permission:Edit": "Modifica", "Waiting": "In attesa", "Approved": "Approvato", "Rejected": "Respinto", @@ -80,7 +80,7 @@ "LatestGithubAnnouncements": "Ultimi annunci su GitHub", "SeeAllAnnouncements": "Vedi tutti gli annunci", "LatestBlogPost": "Ultimo post sul blog", - "Edit": "modifica", + "Edit": "Modifica", "ProfileImageChange": "Cambia l'immagine del profilo", "BlogItemErrorMessage": "Impossibile ottenere i dettagli più recenti del post del blog da ABP.", "PlannedReleaseDate": "Data di rilascio prevista", diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json index 1a55221f1f..bd230f9bec 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json @@ -117,7 +117,7 @@ "ABPCLIExplanation": "ABP CLI (Command Line Interface) è uno strumento a riga di comando per eseguire alcune operazioni comuni per soluzioni basate su ABP.", "ModularityExplanation": "ABP fornisce un'infrastruttura completa per creare i propri moduli applicativi che possono avere entità, servizi, integrazione di database, API, componenti dell'interfaccia utente e così via.", "MultiTenancyExplanation": "Il framework ABP non solo supporta lo sviluppo di applicazioni multi-tenant, ma rende anche il tuo codice per lo più inconsapevole del multi-tenancy.", - "MultiTenancyExplanation2": "Può determinare automaticamente il tenant corrente, isolare i dati di diversi inquilini l'uno dall'altro.", + "MultiTenancyExplanation2": "Può determinare automaticamente il tenant corrente, isolare i dati dei diversi tenant l'uno dall'altro.", "MultiTenancyExplanation3": "Supporta database singolo, database per tenant e approcci ibridi.", "MultiTenancyExplanation4": "Ti concentri sul tuo codice aziendale e lasci che il framework gestisca il multi-tenancy per tuo conto.", "BootstrapTagHelpersExplanation": "Invece di scrivere manualmente i dettagli ripetuti dei componenti bootstrap, usa gli helper tag di ABP per semplificarlo e sfruttare intellisense. Puoi sicuramente usare Bootstrap ogni volta che ne hai bisogno.", diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json index 8b12bfcbd9..b3a4dc4fef 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/it.json @@ -4,7 +4,7 @@ "UserName": "Nome utente", "EmailAddress": "Indirizzo e-mail", "UserNameOrEmailAddress": "Username o Indirizzo Email", - "Password": "Parola d'ordine", + "Password": "Password", "RememberMe": "Ricordati di me", "UseAnotherServiceToLogin": "Usa un altro servizio per accedere", "UserLockedOutMessage": "L'account utente è stato bloccato a causa di tentativi di accesso non validi. Attendi qualche istante e riprova.", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json index ed6bdcb832..c258ada7ff 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json @@ -37,7 +37,7 @@ "Detail": "Dettaglio", "Details": "Dettagli", "DoYouPreferAdditionalEmails": "Preferisci email aggiuntive?", - "Edit": "modifica", + "Edit": "Modifica", "EndDate": "Data di fine", "EntityId": "Id Entità", "EntityType": "Tipo di Entità", diff --git a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json index c60f6e2f73..1a4d8e3f4c 100644 --- a/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json +++ b/modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json @@ -28,7 +28,7 @@ "DisplayName:MinimumVersion": "Versione minima", "DisplayName:MainWebsiteUrl": "URL del sito web principale", "DisplayName:LatestVersionBranchName": "Nome del ramo della versione più recente", - "DisplayName:GitHubRootUrl": "URL radice di GitHub", + "DisplayName:GitHubRootUrl": "URL principale di GitHub", "DisplayName:GitHubAccessToken": "Token di accesso GitHub", "DisplayName:GitHubUserAgent": "GitHub user agent", "DisplayName:GithubVersionProviderSource": "GitHub version provider source", diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json index 3e1a443c92..eb99b57bdf 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json @@ -9,7 +9,7 @@ "SmtpHost": "Host", "SmtpPort": "Porta", "SmtpUserName": "Nome utente", - "SmtpPassword": "Parola d'ordine", + "SmtpPassword": "Password", "SmtpDomain": "Dominio", "SmtpEnableSsl": "Abilita SSL", "SmtpUseDefaultCredentials": "Usa credenziali predefinite", diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json index d55876e5eb..c80b7974ab 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain.Shared/Volo/Abp/TenantManagement/Localization/Resources/it.json @@ -11,7 +11,7 @@ "DisplayName:DefaultConnectionString": "Stringa di connessione predefinita", "DisplayName:UseSharedDatabase": "Usa il database condiviso", "ManageHostFeatures": "Gestisci le funzionalità dell'host", - "Permission:TenantManagement": "Gestione inquilini", + "Permission:TenantManagement": "Gestione Tenant", "Permission:Create": "Crea", "Permission:Edit": "Modifica", "Permission:Delete": "Elimina", diff --git a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/it.json b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/it.json index 2615bab475..7f51b3ad72 100644 --- a/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/it.json +++ b/modules/virtual-file-explorer/src/Volo.Abp.VirtualFileExplorer.Web/Localization/Resources/it.json @@ -8,7 +8,7 @@ "VirtualFileName": "Nome del file virtuale", "FileContent": "Contenuto del file", "Size": "Dimensione", - "BackToRoot": "Torna alla radice", + "BackToRoot": "Torna al principale", "EmptyFileInfoList": "Non ci sono file virtuali" } } \ No newline at end of file From e722d4e944e2d09e1fde3c840ea6c7f9eea37c82 Mon Sep 17 00:00:00 2001 From: Berkan Sasmaz Date: Fri, 9 Jul 2021 10:27:28 +0300 Subject: [PATCH 03/11] Add missing localizations for Italian --- .../Admin/Localization/Resources/it.json | 28 ++++++- .../Base/Localization/Resources/it.json | 5 +- .../Commercial/Localization/Resources/it.json | 69 +++++++++++++++- .../Www/Localization/Resources/it.json | 78 ++++++++++++++++++- .../ExceptionHandling/Localization/it.json | 1 + .../CmsKit/Localization/Resources/it.json | 28 +++++++ .../Localization/Resources/it.json | 1 + .../Resources/AbpSettingManagement/it.json | 5 +- 8 files changed, 210 insertions(+), 5 deletions(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/it.json index 8a4cb2aa47..04f82726ba 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Admin/Localization/Resources/it.json @@ -277,6 +277,32 @@ "ThisExtensionIsNotAllowed": "Questa estensione non è consentita.", "TheFileIsTooLarge": "Il file è troppo grande!", "ArticleDeletionConfirmationMessage": "Sei sicuro di voler eliminare definitivamente questo articolo?", - "ChooseCoverImage": "Scegli un'immagine di copertina..." + "ChooseCoverImage": "Scegli un'immagine di copertina...", + "Menu:Quotation": "Quotation", + "Menu:Invoice": "Fattura", + "Menu:PaymentRequests": "Richieste Pagamento", + "Permission:PaymentRequests": "Richieste Pagamento", + "PaymentRequests": "Richieste Pagamento", + "Creator": "Creatore", + "ExtraProperties": "Proprietà Extra", + "Organization": "Organizzazione", + "Waiting": "In attesa", + "Completed": "Completato", + "Failed": "Fallito", + "PaymentRequestDeletionWarningMessage": "Questa richiesta pagamento sarà cancellata. Confermi?", + "Payment": "Pagamento", + "AddPayment": "Aggiungi Pagamento", + "Enum:PurchaseType:1": "Nuova Licenza", + "Enum:PurchaseType:2": "Estendi Licenza", + "Enum:PurchaseType:3": "Aggiornamento Licenza", + "Enum:PurchaseType:4": "Sviluppatore Aggiuntivo", + "LicenceType": "Tipo Licenza", + "PurchaseType": "Tipo Acquisto", + "ReceiptNo": "Ricevuta n.", + "PaymentTime": "Tipo Pagamento", + "ProductPrice": "Prezzo Prodotto", + "AdditionalDeveloper": "Sviluppatore aggiuntivo", + "ThisPaymentHasBeenAlreadyUsed": "Questo pagamento è già stato utilizzato", + "PaymentTimeCannotBeFutureTime": "Orario di pagamento non può essere nel futuro" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json index 755ea4ae46..abc3ce28ec 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/it.json @@ -32,6 +32,9 @@ "SeeDocuments": "Vedi Documenti", "Samples": "Campioni", "Framework": "Framework", - "Support": "Supporto" + "Support": "Supporto", + "FreeDDDBook": "DDD E-Book Gratuito", + "New": "Nuovo", + "Volo.AbpIo.Domain:020005": "Estensione Licenza non può essere inferiore a {MinExtendLicenseYear} anno e maggiore di {MaxExtendLicenseYear} anni " } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json index b8ae35dfad..722c10275f 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Commercial/Localization/Resources/it.json @@ -291,6 +291,73 @@ "PayViaAmexCard": "Come posso pagare tramite la mia carta AMEX?", "PayViaAmexCardDescription": "Il gateway di pagamento predefinito \"Iyzico\" potrebbe rifiutare alcune carte di credito AMEX a causa delle misure di sicurezza. In questo caso, puoi pagare tramite il gateway di pagamento alternativo \"2Checkout\".", "ThankYou": "Grazie", - "InvalidReCaptchaErrorMessage": "Si è verificato un errore durante la verifica di reCAPTCHA. Per favore riprova." + "InvalidReCaptchaErrorMessage": "Si è verificato un errore durante la verifica di reCAPTCHA. Per favore riprova.", + "CompanyName": "Nome Azienda", + "YourCompanyName": "Il nome della tua azienda", + "FirstName": "Nome", + "LastName": "Cognome", + "Optional": "Facoltativo", + "YourFirstName": "Il tuo nome", + "YourLastName": "Il tuo cognome", + "SpecialOffer": "Offerta Speciale", + "SpecialOfferMessage": "Fai presto! I prezzi sono validi per un periodo limitato.", + "DiscountRequest": "Richiesta Sconto", + "DiscountRequestDescribeCustomerQuestion": "Quale delle seguenti ti descrive?", + "DiscountRequestStudentEmailMessage": "L'indirizzo email deve contenere 'edu'.", + "DiscountRequestDeveloperCount": "Quanti sviluppatori ci sono?", + "DiscountRequestDeveloperCountExceedMessage": "Non concediamo sconti per le aziende con più di {0} sviluppatori.", + "DiscountRequestOrganizationName": "Nome Azienda/Organizzazione/Istituto Scolastico", + "Website": "Sito web", + "GithubUsername": "Nome utente GitHub", + "PhoneNumber": "Numero Telefono", + "Country": "Nazione", + "DescribeABPCommercialUsage": "Descrivi il progetto che stai pianificando di sviluppare su ABP Commercial", + "DiscountRequestCertifyInformationMessage": "Dichiaro che tutte le informazioni fornite corrispondono al vero e sono corrette", + "DiscountRequestReceived": "Abbiamo ricevuto la tua richiesta di sconto.", + "DiscountRequestStatusMessage": "Risponderemo dopo aver verificato le informazioni fornite.", + "MVCOrRazorPages": "MVC (Razor Pages)", + "Angular": "Angular", + "Blazor": "Blazor", + "New": "Nuovo", + "MongoDB": "MongoDB", + "EBookDDD": "E-Book Domain Driven Design", + "PracticalGuideForImplementingDDD": "Questo libro è una guida pratica per implementare il Domain Driven Design con ABP Framework.", + "IntroducingDDD": "Introduzione al Domain Driven Design", + "DDDLayersAndCleanArchitecture": "DDD Strati e Architettura Pulita", + "LayeringOfADotnetSolution": "Stratificazione di una Soluzione .NET", + "ImplementingDDDBuildingBlocks": "Implementazione delle Fondamenta del DDD", + "DomainVsApplicationLogic": "Logica di Dominio contro Logica Applicazione", + "SamplesAndDiscussions": "Esempi e Discussioni", + "Free": "Gratuito", + "Download": "Download", + "DDDEBook": "DDD E-book", + "ImplementingDDD": "Implementazione Domain Driven Design", + "DDDBookExplanation": "Una guida pratica per implementare il Domain Driven Design con ABP Framework.", + "Overview": "Panoramica", + "DDDBookPracticalGuide": "Questa a una guida pratica per implementare Domain Driven Design (DDD). Mentre i dettagli per l'implementazione sono basati sull'infrastruttura di ABP Framework, i concetti base, principi e modelli possono essere applicati a qualsiasi soluzione, anche se non è una soluzione .NET.", + "TableOfContents": "Sommario", + "IntroductionToImplementingDDD": "Introduzione all'Implementazione Domain Driven Design", + "WhatIsDDD": "Cos'è il Domain Driven Design?", + "Implementation": "Implementazione", + "TheBigPicture": "Il Quadro Generale", + "TheBuildingBlock": "Le Fondamenta", + "ExampleUseCase": "Esempio d'uso", + "DomainAndApplicationLogic": "Logica di Dominio e Logica Applicazione", + "Author": "Autore", + "PublishedOn": "Pubblicato il", + "Page": "Pagina", + "FreeEBook": "E-Book Gratuito", + "EBookSignInForDownload": "Accedi per scaricare l'e-book", + "SignIn": "Accedi", + "Or": "O", + "TellUsAboutYourself": "Dicci qualcosa di te", + "Surname": "Cognome", + "DoYouAgreePrivacyPolicy": "Acconsento ai Termini e Condizioni ed alla Politica Privacy.", + "VolosoftMarketingInformationMessage": "Vorrei informazioni, suggerimenti e offerte sulle Soluzioni per Aziende e Organizzazioni e altri prodotti e servizi Volosoft", + "VolosoftSharingInformationMessage": "Vorrei che Volosoft condividesse le mie informazioni con partner selezionati in modo da poter ricevere informazioni rilevanti sui loro prodotti e servizi", + "WeWillSendYouADownloadLink": "Un link per scaricare il libro e-book è stato spedito a {0}.
Controlla nella posta in arrivo / indesiderata / spam!", + "InvalidFormInputs": "Per favore, digita le informazioni valide specificate nel modulo", + "DDDBookEmailBody": "Grazie.
Per scaricare il tuo libro, clicca qui.", + "FreeDDDEBook": "E-Book Gratuito DDD" } } \ No newline at end of file diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json index bd230f9bec..6b56b785ca 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Www/Localization/Resources/it.json @@ -197,6 +197,82 @@ "SelectLanguage": "Seleziona la lingua", "LatestArticleOnCommunity": "Ultimo articolo sulla comunità ABP", "Register": "Registrati", - "IsDownloadable": "È scaricabile" + "IsDownloadable": "È scaricabile", + "DatabaseOptions": "Opzioni Database", + "BackToPackagesPage": "Torna alla Pagina Pacchetti", + "HowToInstall": "Come Installare", + "SeeOnNpm": "Vedi su NPM", + "SeeOnNuget": "Vedi su Nuget", + "MVCGulpCommandExplanation": "Se stai usando UI MVC (Razor Pages), esegui il comando \"gulp\" dopo l'installazione del pacchetto.", + "UsingABPCLI": "Usa Abp CLI", + "WithoutABPCLI": "Senza ABP CLI", + "ABPCLIModuleDependency": "ABP CLI aggiunge automaticamente le dipendenze del modulo.", + "AddModuleDependency": "Quindi aggiunge le dipendenze del modulo", + "Packages": "Pacchetti", + "NugetPackages": "Pacchetti Nuget", + "NPMPackages": "Pacchetti NPM", + "SeeDocs": "Vedi Documentazione", + "None": "Nessuno", + "Application": "Applicazione", + "Module": "Moduli", + "PackageName": "Nome Pacchetto", + "LicenseURL": "URL Licenza", + "License": "Licenza", + "ProjectCreationSuccessMessage": "Il tuo progetto è stato creato con successo", + "HowToRunSolution": "Come Eseguire la Tua Soluzione?", + "GettingStartedMessage": "Guarda la documentazione su come iniziare per imparare a configurare ed eseguire la tua soluzione.", + "WebAppDevTutorial": "Tutorial Sviluppo Web App", + "WebAppDevTutorialMessage": "Guarda tutorial sviluppo applicazione web per un esempio di sviluppo passo passo.", + "CommunityArticles": "Articoli Comunità", + "CommunityArticleMessage": "Verifica la piattaforma Comunità ABP per leggere articoli utili su ABP Framework.", + "InvestigateSolutionDetails": "Vedi Dettagli della Soluzione", + "StartupTemplateDocumentationMessage": "Guarda il modello di avvio dell'applicazione per imparare l'architettura e la struttura della tua soluzione.", + "ClientSideDevelopment": "Sviluppo Lato Client", + "ClientSideDevelopmentDocumentationMessage": "Guarda il documento {0} per imparare i punti chiave dello sviluppo dell'interfaccia utente (lato client).", + "DatabaseProviderDocumentationMessage": "Guarda il documento {0} per imparare i punti chiave dello sviluppo dello strato database", + "ABPCommercialExplanationMessage": "ABP Commercial fornisce moduli premium, temi, strumenti e supporto per ABP Framework.", + "ImplementingDDD": "Implementazione Domain Driven Design", + "DDDBookExplanation": "Una guida pratica per l'implementazione del Domain Driven Design con ABP Framework.", + "Overview": "Panoramica", + "DDDBookPracticalGuide": "Questa a una guida pratica per implementare Domain Driven Design (DDD). Mentre i dettagli per l'implementazione sono basati sull'infrastruttura di ABP Framework, i concetti base, principi e modelli possono essere applicati a qualsiasi soluzione, anche se non è una soluzione .NET.", + "TableOfContents": "Sommario", + "IntroductionToImplementingDDD": "Introduzione all'implementazione del Domain Driven Design", + "WhatIsDDD": "Cos'è il Domain Driven Design?", + "Implementation": "Implementazione", + "TheBigPicture": "Il Quadro Generale", + "TheBuildingBlock": "Le Fondamenta", + "ExampleUseCase": "Esempio d'uso", + "DomainAndApplicationLogic": "Logica di Dominio e Logica Applicazione", + "Author": "Autore", + "Pages": "Pagine", + "PublishedOn": "Pubblicato il", + "FreeEBook": "E-Book Gratuito", + "Download": "Scarica", + "EBookSignInForDownload": "Accedi per scaricare l'e-book", + "SignIn": "Accedi", + "Or": "O", + "TellUsAboutYourself": "Dicci qualcosa di te", + "Name": "Nome", + "Surname": "Cognome", + "CompanyName": "Nome Azienda", + "DoYouAgreePrivacyPolicy": "Acconsento ai Termini e Condizioni ed alla Politica Privacy.", + "Free": "Gratuito", + "DDDEBook": "DDD E-Book", + "PracticalGuideForImplementingDDD": "Questo libro è una guida pratica per l'implementazione del Domain Driven Design con ABP Framework.", + "IntroducingDDD": "Introduzione al Domain Driven Design", + "DDDLayersAndCleanArchitecture": "DDD Strati e Architettura Pulita", + "LayeringOfADotnetSolution": "Stratificazione di una Soluzione .NET", + "ImplementingDDDBuildingBlocks": "Implementazione delle Fondamenta del DDD", + "DomainVsApplicationLogic": "Logica di Dominio contro Logica Applicazione", + "SamplesAndDiscussions": "Esempi e Discussioni", + "EmailNotValid": "Per favore inserisci un indirizzo email valido.", + "WeWillSendYouADownloadLink": "Un link per scaricare il libro e-book è stato spedito a {0}.
Controlla nella posta in arrivo, indesiderata o spam!", + "GoHome": "Vai alla Home", + "InvalidFormInputs": "Per favore, digita le informazioni valide specificate nel modulo", + "DDDBookEmailBody": "Grazie.
Per scaricare il tuo libro, clicca qui.", + "SubscribeToNewsletter": "Sottiscrivi la nostra newsletter per ricevere informazione su cosa accade nella Piattaforma ABP.IO, come nuove versioni, articoli, offerte ed altro ancora.", + "FirstEdition": "Prima Edizione", + "ThankYou": "Grazie!", + "CheckboxMandatory": "Devi mettere la spunta su questo per procedere!" } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/it.json b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/it.json index b2025559fe..c70e01cfd4 100644 --- a/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/it.json +++ b/framework/src/Volo.Abp.ExceptionHandling/Volo/Abp/ExceptionHandling/Localization/it.json @@ -13,6 +13,7 @@ "DefaultErrorMessage404": "Risorsa non trovata!", "DefaultErrorMessage404Detail": "La risorsa richiesta non è stata trovata sul server!", "EntityNotFoundErrorMessage": "Non esiste un'entità {0} con id = {1}!", + "AbpDbConcurrencyErrorMessage": "I dati che hai inviato sono già stati modificati da un altro utente/cliente. Per favore scarta le modifiche che hai fatto e riprova dall'inizio.", "Error": "Errore", "UnhandledException": "Eccezione non gestita!", "401Message": "Non autorizzato", diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json index c258ada7ff..f5bb342dc6 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json +++ b/modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Localization/Resources/it.json @@ -1,6 +1,8 @@ { "culture": "it", "texts": { + "AddSubMenuItem": "Aggiungi voce sottomenu", + "AreYouSure": "Sei Sicuro?", "BlogDeletionConfirmationMessage": "Il blog '{0}' verrà eliminato. Sei sicuro?", "BlogFeatureNotAvailable": "Questa funzione non è ora disponibile. Abilita con 'GlobalFeatureManager' per usarlo.", "BlogId": "Blog", @@ -36,6 +38,7 @@ "Delete": "Elimina", "Detail": "Dettaglio", "Details": "Dettagli", + "DisplayName": "Nome Visualizzato", "DoYouPreferAdditionalEmails": "Preferisci email aggiuntive?", "Edit": "Modifica", "EndDate": "Data di fine", @@ -44,21 +47,33 @@ "ExportCSV": "Esporta CSV", "Features": "Funzionalità", "GenericDeletionConfirmationMessage": "Sei sicuro di eliminare '{0}'?", + "IsActive": "Attivo", "LastModification": "Ultima modifica", "LastModificationTime": "Ora ultima modifica", "LoginToAddComment": "Accedi per aggiungere un commento", "LoginToRate": "Accedi per votare", "LoginToReact": "Accedi per reagire", "LoginToReply": "Accedi per rispondere", + "MainMenu": "Menu Principale", + "MakeMainMenu": "Rendi Menu Principale", "Menu:CMS": "CMS", + "Menus": "I menu", + "MenuDeletionConfirmationMessage": "Il menu '{0}' sarà cancellato. Sei sicuro?", + "MenuItemDeletionConfirmationMessage": "Sei sicuro di cancellare questa voce dal menu?", + "MenuItemMoveConfirmMessage": "Sei sicuro di voler spostare '{0}' sotto '{1}'?", + "MenuItems": "Voci Menu", "Message": "Messaggio", "MessageDeletionConfirmationMessage": "Questo commento verrà completamente cancellato.", "NewBlog": "Nuovo blog", "NewBlogPost": "Nuovo post sul blog", + "NewMenu": "Nuovo Menu", + "NewMenuItem": "Nuova Voce Menu Principale", "NewPage": "Nuova pagina", "NewTag": "Nuovo tag", + "NoMenuItems": "Non c'è ancora nessuna voce di menu!", "OK": "OK", "PageDeletionConfirmationMessage": "Sei sicuro di cancellare questa pagina?", + "PageId": "Pagina", "Pages": "Pagine", "PageSlugInformation": "Lo slug viene utilizzato sull'URL. Il tuo URL sarà '/pages/{{slug}}'.", "Permission:BlogManagement": "Gestione del blog", @@ -80,6 +95,18 @@ "Permission:MediaDescriptorManagement": "Gestione dei media", "Permission:MediaDescriptorManagement:Create": "Crea", "Permission:MediaDescriptorManagement:Delete": "Elimina", + "Permission:MenuItemManagement": "Gestione Voci Menu", + "Permission:MenuItemManagement.Create": "Crea", + "Permission:MenuItemManagement.Delete": "Cancella", + "Permission:MenuItemManagement.Update": "Aggiorna", + "Permission:MenuManagement": "Gestione Menu", + "Permission:MenuManagement.Create": "Crea", + "Permission:MenuManagement.Delete": "Cancella", + "Permission:MenuManagement.Update": "Aggiorna", + "Permission:Menus": "Gestione Menu", + "Permission:Menus.Create": "Crea", + "Permission:Menus.Delete": "Cancella", + "Permission:Menus.Update": "Aggiorna", "Permission:PageManagement": "Gestione della pagina", "Permission:PageManagement:Create": "Crea", "Permission:PageManagement:Delete": "Elimina", @@ -123,6 +150,7 @@ "Update": "Aggiorna", "UpdatePreferenceSuccessMessage": "Le tue preferenze sono state salvate.", "UpdateYourEmailPreferences": "Aggiorna le tue preferenze email", + "UnMakeMainMenu": "Annulla Menu Principale", "UploadFailedMessage": "Caricamento fallito.", "UserId": "ID utente", "Username": "Nome utente", diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/it.json b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/it.json index 127f7a12c3..2b564f3af7 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/it.json +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Localization/Resources/it.json @@ -9,6 +9,7 @@ "InvalidUserNameOrPassword": "Username o password non validi!", "LoginIsNotAllowed": "Non sei autorizzato ad accedere! Devi confermare la tua email/numero di telefono.", "InvalidUsername": "Username o password non validi!", + "InvalidAuthenticatorCode": "Codice autenticatore non valido!", "TheTargetUserIsNotLinkedToYou": "L'utente di destinazione non è collegato a te!" } } \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json index eb99b57bdf..7d8e538f65 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Domain.Shared/Volo/Abp/SettingManagement/Localization/Resources/AbpSettingManagement/it.json @@ -14,6 +14,9 @@ "SmtpEnableSsl": "Abilita SSL", "SmtpUseDefaultCredentials": "Usa credenziali predefinite", "DefaultFromAddress": "Indirizzo mittente predefinito", - "DefaultFromDisplayName": "Nome mittente visualizzato predefinito" + "DefaultFromDisplayName": "Nome mittente visualizzato predefinito", + "Feature:SettingManagementGroup": "Gestione Impostazioni", + "Feature:SettingManagementEnable": "Abilita gestione impostazioni", + "Feature:SettingManagementEnableDescription": "Abilita sistema gestione impostazioni nell'applicazione" } } \ No newline at end of file From 8e88fa69d3d35e2716565c2c969dce9c03a5a17c Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 12 Jul 2021 16:38:43 +0300 Subject: [PATCH 04/11] feat: remove tenantId from reset-password request --- .../components/reset-password/reset-password.component.ts | 5 +---- .../packages/account/src/lib/proxy/account/models.ts | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts b/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts index b84c6db3a3..5e311e7b83 100644 --- a/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/reset-password/reset-password.component.ts @@ -18,7 +18,6 @@ export class ResetPasswordComponent implements OnInit { inProgress = false; isPasswordReset = false; - tenantId = ''; mapErrorsFn: Validation.MapErrorsFn = (errors, groupErrors, control) => { if (PASSWORD_FIELDS.indexOf(String(control.name)) < 0) return errors; @@ -35,8 +34,7 @@ export class ResetPasswordComponent implements OnInit { ) {} ngOnInit(): void { - this.route.queryParams.subscribe(({ userId, resetToken, tenantId }) => { - this.tenantId = tenantId; + this.route.queryParams.subscribe(({ userId, resetToken }) => { if (!userId || !resetToken) this.router.navigateByUrl('/account/login'); this.form = this.fb.group( @@ -63,7 +61,6 @@ export class ResetPasswordComponent implements OnInit { userId: this.form.get('userId').value, resetToken: this.form.get('resetToken').value, password: this.form.get('password').value, - tenantId: this.tenantId || undefined, // if this.tenantId is empty, we should not send it at all }) .pipe(finalize(() => (this.inProgress = false))) .subscribe(() => { diff --git a/npm/ng-packs/packages/account/src/lib/proxy/account/models.ts b/npm/ng-packs/packages/account/src/lib/proxy/account/models.ts index 0c4fe0c03d..f186b52977 100644 --- a/npm/ng-packs/packages/account/src/lib/proxy/account/models.ts +++ b/npm/ng-packs/packages/account/src/lib/proxy/account/models.ts @@ -9,7 +9,6 @@ export interface RegisterDto extends ExtensibleObject { export interface ResetPasswordDto { userId?: string; - tenantId?: string; resetToken: string; password: string; } From c137353976095dd403d55ca490277d50e2a6fd81 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 12 Jul 2021 16:39:20 +0300 Subject: [PATCH 05/11] feat: run generate-proxy for account --- .../account/src/lib/proxy/generate-proxy.json | 1219 +++++++++-------- 1 file changed, 613 insertions(+), 606 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/proxy/generate-proxy.json b/npm/ng-packs/packages/account/src/lib/proxy/generate-proxy.json index f9703aad8a..ff7a22c89b 100644 --- a/npm/ng-packs/packages/account/src/lib/proxy/generate-proxy.json +++ b/npm/ng-packs/packages/account/src/lib/proxy/generate-proxy.json @@ -3,99 +3,16 @@ "account" ], "modules": { - "abp": { - "rootPath": "abp", - "remoteServiceName": "abp", + "settingManagement": { + "rootPath": "settingManagement", + "remoteServiceName": "SettingManagement", "controllers": { - "Pages.Abp.MultiTenancy.AbpTenantController": { - "controllerName": "AbpTenant", - "type": "Pages.Abp.MultiTenancy.AbpTenantController", - "interfaces": [ - { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" - } - ], - "actions": { - "FindTenantByNameAsyncByName": { - "uniqueName": "FindTenantByNameAsyncByName", - "name": "FindTenantByNameAsync", - "httpMethod": "GET", - "url": "api/abp/multi-tenancy/tenants/by-name/{name}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "name", - "name": "name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" - }, - "allowAnonymous": null - }, - "FindTenantByIdAsyncById": { - "uniqueName": "FindTenantByIdAsyncById", - "name": "FindTenantByIdAsync", - "httpMethod": "GET", - "url": "api/abp/multi-tenancy/tenants/by-id/{id}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" - }, - "allowAnonymous": null - } - } - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { - "controllerName": "AbpApplicationConfiguration", - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "Volo.Abp.SettingManagement.EmailSettingsController": { + "controllerName": "EmailSettings", + "type": "Volo.Abp.SettingManagement.EmailSettingsController", "interfaces": [ { - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + "type": "Volo.Abp.SettingManagement.IEmailSettingsAppService" } ], "actions": { @@ -103,56 +20,49 @@ "uniqueName": "GetAsync", "name": "GetAsync", "httpMethod": "GET", - "url": "api/abp/application-configuration", + "url": "api/setting-management/emailing", "supportedVersions": [], "parametersOnMethod": [], "parameters": [], "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + "type": "Volo.Abp.SettingManagement.EmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.EmailSettingsDto" }, "allowAnonymous": null - } - } - }, - "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { - "controllerName": "AbpApiDefinition", - "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", - "interfaces": [], - "actions": { - "GetByModel": { - "uniqueName": "GetByModel", - "name": "Get", - "httpMethod": "GET", - "url": "api/abp/api-definition", + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "POST", + "url": "api/setting-management/emailing", "supportedVersions": [], "parametersOnMethod": [ { - "name": "model", - "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", - "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", - "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "name": "input", + "typeAsString": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto, Volo.Abp.SettingManagement.Application.Contracts", + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "model", - "name": "IncludeTypes", + "nameOnMethod": "input", + "name": "input", "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", + "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "model" + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", - "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + "type": "System.Void", + "typeSimple": "System.Void" }, "allowAnonymous": null } @@ -160,308 +70,28 @@ } } }, - "multi-tenancy": { - "rootPath": "multi-tenancy", - "remoteServiceName": "AbpTenantManagement", + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", "controllers": { - "Volo.Abp.TenantManagement.TenantController": { - "controllerName": "Tenant", - "type": "Volo.Abp.TenantManagement.TenantController", + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", "interfaces": [ { - "type": "Volo.Abp.TenantManagement.ITenantAppService" + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" } ], "actions": { - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/multi-tenancy/tenants/{id}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.TenantManagement.TenantDto", - "typeSimple": "Volo.Abp.TenantManagement.TenantDto" - }, - "allowAnonymous": null - }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/multi-tenancy/tenants", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.TenantManagement.GetTenantsInput, Volo.Abp.TenantManagement.Application.Contracts", - "type": "Volo.Abp.TenantManagement.GetTenantsInput", - "typeSimple": "Volo.Abp.TenantManagement.GetTenantsInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Sorting", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "SkipCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - }, - "allowAnonymous": null - }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/multi-tenancy/tenants", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.TenantManagement.TenantCreateDto, Volo.Abp.TenantManagement.Application.Contracts", - "type": "Volo.Abp.TenantManagement.TenantCreateDto", - "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "input", - "jsonName": null, - "type": "Volo.Abp.TenantManagement.TenantCreateDto", - "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.TenantManagement.TenantDto", - "typeSimple": "Volo.Abp.TenantManagement.TenantDto" - }, - "allowAnonymous": null - }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/multi-tenancy/tenants/{id}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.Abp.TenantManagement.TenantUpdateDto, Volo.Abp.TenantManagement.Application.Contracts", - "type": "Volo.Abp.TenantManagement.TenantUpdateDto", - "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, - { - "nameOnMethod": "input", - "name": "input", - "jsonName": null, - "type": "Volo.Abp.TenantManagement.TenantUpdateDto", - "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.TenantManagement.TenantDto", - "typeSimple": "Volo.Abp.TenantManagement.TenantDto" - }, - "allowAnonymous": null - }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/multi-tenancy/tenants/{id}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": null - }, - "GetDefaultConnectionStringAsyncById": { - "uniqueName": "GetDefaultConnectionStringAsyncById", - "name": "GetDefaultConnectionStringAsync", - "httpMethod": "GET", - "url": "api/multi-tenancy/tenants/{id}/default-connection-string", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "jsonName": null, - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.String", - "typeSimple": "string" - }, - "allowAnonymous": null - }, - "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { - "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", - "name": "UpdateDefaultConnectionStringAsync", - "httpMethod": "PUT", - "url": "api/multi-tenancy/tenants/{id}/default-connection-string", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", + "supportedVersions": [], + "parametersOnMethod": [ { - "name": "defaultConnectionString", + "name": "name", "typeAsString": "System.String, System.Private.CoreLib", "type": "System.String", "typeSimple": "string", @@ -471,41 +101,29 @@ ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", + "nameOnMethod": "name", + "name": "name", "jsonName": null, - "type": "System.Guid", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, - { - "nameOnMethod": "defaultConnectionString", - "name": "defaultConnectionString", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" }, "allowAnonymous": null }, - "DeleteDefaultConnectionStringAsyncById": { - "uniqueName": "DeleteDefaultConnectionStringAsyncById", - "name": "DeleteDefaultConnectionStringAsync", - "httpMethod": "DELETE", - "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", + "httpMethod": "GET", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -532,25 +150,19 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" }, "allowAnonymous": null } } - } - } - }, - "settingManagement": { - "rootPath": "settingManagement", - "remoteServiceName": "SettingManagement", - "controllers": { - "Volo.Abp.SettingManagement.EmailSettingsController": { - "controllerName": "EmailSettings", - "type": "Volo.Abp.SettingManagement.EmailSettingsController", + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", "interfaces": [ { - "type": "Volo.Abp.SettingManagement.IEmailSettingsAppService" + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" } ], "actions": { @@ -558,49 +170,56 @@ "uniqueName": "GetAsync", "name": "GetAsync", "httpMethod": "GET", - "url": "api/setting-management/emailing", + "url": "api/abp/application-configuration", "supportedVersions": [], "parametersOnMethod": [], "parameters": [], "returnValue": { - "type": "Volo.Abp.SettingManagement.EmailSettingsDto", - "typeSimple": "Volo.Abp.SettingManagement.EmailSettingsDto" + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" }, "allowAnonymous": null - }, - "UpdateAsyncByInput": { - "uniqueName": "UpdateAsyncByInput", - "name": "UpdateAsync", - "httpMethod": "POST", - "url": "api/setting-management/emailing", + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto, Volo.Abp.SettingManagement.Application.Contracts", - "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", - "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "input", + "nameOnMethod": "model", + "name": "IncludeTypes", "jsonName": null, - "type": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", - "typeSimple": "Volo.Abp.SettingManagement.UpdateEmailSettingsDto", + "type": "System.Boolean", + "typeSimple": "boolean", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "model" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" }, "allowAnonymous": null } @@ -807,8 +426,157 @@ "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.Abp.Account.ResetPasswordDto", - "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -1806,16 +1574,16 @@ } } }, - "permissionManagement": { - "rootPath": "permissionManagement", - "remoteServiceName": "AbpPermissionManagement", + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", "controllers": { - "Volo.Abp.PermissionManagement.PermissionsController": { - "controllerName": "Permissions", - "type": "Volo.Abp.PermissionManagement.PermissionsController", + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", "interfaces": [ { - "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" } ], "actions": { @@ -1823,7 +1591,63 @@ "uniqueName": "GetAsyncByProviderNameAndProviderKey", "name": "GetAsync", "httpMethod": "GET", - "url": "api/permission-management/permissions", + "url": "api/feature-management/features", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + }, + "allowAnonymous": null + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/feature-management/features", "supportedVersions": [], "parametersOnMethod": [ { @@ -1841,6 +1665,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -1860,84 +1692,237 @@ "nameOnMethod": "providerKey", "name": "providerKey", "jsonName": null, - "type": "System.String", - "typeSimple": "string", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + } + } + } + } + }, + "multi-tenancy": { + "rootPath": "multi-tenancy", + "remoteServiceName": "AbpTenantManagement", + "controllers": { + "Volo.Abp.TenantManagement.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Abp.TenantManagement.TenantController", + "interfaces": [ + { + "type": "Volo.Abp.TenantManagement.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" + }, + "allowAnonymous": null + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.GetTenantsInput, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.GetTenantsInput", + "typeSimple": "Volo.Abp.TenantManagement.GetTenantsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/multi-tenancy/tenants", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.TenantManagement.TenantCreateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "Volo.Abp.TenantManagement.TenantCreateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantCreateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "bindingSourceId": "Body", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", - "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" }, "allowAnonymous": null }, - "UpdateAsyncByProviderNameAndProviderKeyAndInput": { - "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/permission-management/permissions", + "url": "api/multi-tenancy/tenants/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null }, { "name": "input", - "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", - "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", - "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeAsString": "Volo.Abp.TenantManagement.TenantUpdateDto, Volo.Abp.TenantManagement.Application.Contracts", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "providerKey", - "name": "providerKey", + "nameOnMethod": "id", + "name": "id", "jsonName": null, - "type": "System.String", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" }, { "nameOnMethod": "input", "name": "input", "jsonName": null, - "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", - "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "type": "Volo.Abp.TenantManagement.TenantUpdateDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantUpdateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -1946,47 +1931,22 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.TenantManagement.TenantDto", + "typeSimple": "Volo.Abp.TenantManagement.TenantDto" }, "allowAnonymous": null - } - } - } - } - }, - "featureManagement": { - "rootPath": "featureManagement", - "remoteServiceName": "AbpFeatureManagement", - "controllers": { - "Volo.Abp.FeatureManagement.FeaturesController": { - "controllerName": "Features", - "type": "Volo.Abp.FeatureManagement.FeaturesController", - "interfaces": [ - { - "type": "Volo.Abp.FeatureManagement.IFeatureAppService" - } - ], - "actions": { - "GetAsyncByProviderNameAndProviderKey": { - "uniqueName": "GetAsyncByProviderNameAndProviderKey", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/feature-management/features", + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null @@ -1994,84 +1954,100 @@ ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", + "nameOnMethod": "id", + "name": "id", "jsonName": null, - "type": "System.String", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" - }, + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + }, + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", + "httpMethod": "GET", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "providerKey", - "name": "providerKey", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", "jsonName": null, - "type": "System.String", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", - "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + "type": "System.String", + "typeSimple": "string" }, "allowAnonymous": null }, - "UpdateAsyncByProviderNameAndProviderKeyAndInput": { - "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", - "name": "UpdateAsync", + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", "httpMethod": "PUT", - "url": "api/feature-management/features", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", "supportedVersions": [], "parametersOnMethod": [ { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null }, { - "name": "providerKey", + "name": "defaultConnectionString", "typeAsString": "System.String, System.Private.CoreLib", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", - "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", - "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", - "isOptional": false, - "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", + "nameOnMethod": "id", + "name": "id", "jsonName": null, - "type": "System.String", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" }, { - "nameOnMethod": "providerKey", - "name": "providerKey", + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", "jsonName": null, "type": "System.String", "typeSimple": "string", @@ -2080,17 +2056,41 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "" - }, + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/multi-tenancy/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "input", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", "jsonName": null, - "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", - "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], @@ -2469,13 +2469,6 @@ "typeSimple": "string", "isRequired": false }, - { - "name": "TenantId", - "jsonName": null, - "type": "System.Guid?", - "typeSimple": "string?", - "isRequired": false - }, { "name": "ResetToken", "jsonName": null, @@ -4125,6 +4118,20 @@ "typeSimple": "string?", "isRequired": false }, + { + "name": "ImpersonatorUserId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, + { + "name": "ImpersonatorTenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false + }, { "name": "UserName", "jsonName": null, From 553a9578e0094c2265401f726d29ccd4752dd258 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 12 Jul 2021 18:47:12 +0300 Subject: [PATCH 06/11] feat: add token for tenant key and resolve it from url --- .../packages/core/src/lib/core.module.ts | 2 + .../src/lib/interceptors/api.interceptor.ts | 8 +-- .../packages/core/src/lib/models/common.ts | 6 +-- .../abp/multi-tenancy/abp-tenant.service.ts | 3 +- .../src/lib/services/config-state.service.ts | 9 +++- .../src/lib/services/multi-tenancy.service.ts | 47 ++++++++++------- .../src/lib/strategies/auth-flow.strategy.ts | 5 +- .../packages/core/src/lib/tokens/index.ts | 1 + .../core/src/lib/tokens/tenant-key.token.ts | 3 ++ .../core/src/lib/utils/multi-tenancy-utils.ts | 51 ++++++++++++------- 10 files changed, 90 insertions(+), 45 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/tokens/tenant-key.token.ts diff --git a/npm/ng-packs/packages/core/src/lib/core.module.ts b/npm/ng-packs/packages/core/src/lib/core.module.ts index 986cb98f3b..5f986789f3 100644 --- a/npm/ng-packs/packages/core/src/lib/core.module.ts +++ b/npm/ng-packs/packages/core/src/lib/core.module.ts @@ -33,6 +33,7 @@ import { coreOptionsFactory, CORE_OPTIONS } from './tokens/options.token'; import { noop } from './utils/common-utils'; import './utils/date-extensions'; import { getInitialData, localeInitializer } from './utils/initial-utils'; +import { TENANT_KEY } from './tokens/tenant-key.token'; export function storageFactory(): OAuthStorage { return oAuthStorage; @@ -178,6 +179,7 @@ export class CoreModule { useFactory: noop, }, { provide: OAuthStorage, useFactory: storageFactory }, + { provide: TENANT_KEY, useValue: options.tenantKey || '__tenant' }, ], }; } diff --git a/npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts b/npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts index ad60178a98..da73b1ba55 100644 --- a/npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts +++ b/npm/ng-packs/packages/core/src/lib/interceptors/api.interceptor.ts @@ -1,9 +1,10 @@ import { HttpHandler, HttpHeaders, HttpInterceptor, HttpRequest } from '@angular/common/http'; -import { Injectable } from '@angular/core'; +import { Injectable, Inject } from '@angular/core'; import { OAuthService } from 'angular-oauth2-oidc'; import { finalize } from 'rxjs/operators'; import { SessionStateService } from '../services/session-state.service'; import { HttpWaitService } from '../services/http-wait.service'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; @Injectable({ providedIn: 'root', @@ -13,6 +14,7 @@ export class ApiInterceptor implements HttpInterceptor { private oAuthService: OAuthService, private sessionState: SessionStateService, private httpWaitService: HttpWaitService, + @Inject(TENANT_KEY) private tenantKey: string, ) {} intercept(request: HttpRequest, next: HttpHandler) { @@ -40,8 +42,8 @@ export class ApiInterceptor implements HttpInterceptor { } const tenant = this.sessionState.getTenant(); - if (!existingHeaders?.has('__tenant') && tenant?.id) { - headers['__tenant'] = tenant.id; + if (!existingHeaders?.has(this.tenantKey) && tenant?.id) { + headers[this.tenantKey] = tenant.id; } return headers; diff --git a/npm/ng-packs/packages/core/src/lib/models/common.ts b/npm/ng-packs/packages/core/src/lib/models/common.ts index db03b1cea7..d99d591ad4 100644 --- a/npm/ng-packs/packages/core/src/lib/models/common.ts +++ b/npm/ng-packs/packages/core/src/lib/models/common.ts @@ -10,6 +10,7 @@ export namespace ABP { registerLocaleFn: (locale: string) => Promise; skipGetAppConfiguration?: boolean; sendNullsAsQueryParam?: boolean; + tenantKey?: string; } export interface HasPolicy { @@ -74,7 +75,6 @@ export namespace ABP { [key: string]: T; } - export type ExtractFromOutput< - T extends EventEmitter | Subject - > = T extends EventEmitter ? X : T extends Subject ? Y : never; + export type ExtractFromOutput | Subject> = + T extends EventEmitter ? X : T extends Subject ? Y : never; } diff --git a/npm/ng-packs/packages/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts b/npm/ng-packs/packages/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts index a1c4d4bb9b..99aa704ed1 100644 --- a/npm/ng-packs/packages/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts +++ b/npm/ng-packs/packages/core/src/lib/proxy/pages/abp/multi-tenancy/abp-tenant.service.ts @@ -8,11 +8,12 @@ import type { FindTenantResultDto } from '../../../volo/abp/asp-net-core/mvc/mul export class AbpTenantService { apiName = 'abp'; - findTenantById = (id: string) => + findTenantById = (id: string, headers: Record) => this.restService.request( { method: 'GET', url: `/api/abp/multi-tenancy/tenants/by-id/${id}`, + headers, }, { apiName: this.apiName }, ); diff --git a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts index 0ab66059a8..eb2a0d30b6 100644 --- a/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/config-state.service.ts @@ -1,8 +1,9 @@ import { Injectable } from '@angular/core'; import { Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { map, tap } from 'rxjs/operators'; import { ApplicationConfigurationDto } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; import { InternalStore } from '../utils/internal-store-utils'; +import { AbpApplicationConfigurationService } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/abp-application-configuration.service'; @Injectable({ providedIn: 'root', @@ -14,10 +15,16 @@ export class ConfigStateService { return this.store.sliceUpdate; } + constructor(private abpConfigService: AbpApplicationConfigurationService) {} + setState(state: ApplicationConfigurationDto) { this.store.set(state); } + refreshAppState() { + return this.abpConfigService.get().pipe(tap(res => this.setState(res))); + } + getOne$(key: string) { return this.store.sliceState(state => state[key]); } diff --git a/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts b/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts index 3789eb0847..7724106cfe 100644 --- a/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts @@ -1,31 +1,32 @@ -import { Injectable } from '@angular/core'; +import { Injectable, Inject } from '@angular/core'; +import { switchMap, map } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { ABP } from '../models/common'; -import { - CurrentTenantDto, - FindTenantResultDto, -} from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; +import { FindTenantResultDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; import { RestService } from './rest.service'; +import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy'; +import { ConfigStateService } from './config-state.service'; import { SessionStateService } from './session-state.service'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; @Injectable({ providedIn: 'root' }) export class MultiTenancyService { - private _domainTenant: CurrentTenantDto = null; - - set domainTenant(value: CurrentTenantDto) { - this._domainTenant = value; - this.sessionState.setTenant(value); - } - - get domainTenant() { - return this._domainTenant; - } - isTenantBoxVisible = true; apiName = 'abp'; - constructor(private restService: RestService, private sessionState: SessionStateService) {} + private setTenantToState = (tenant: FindTenantResultDto) => { + this.sessionState.setTenant({ id: tenant.tenantId, name: tenant.name, isAvailable: true }); + return this.configStateService.refreshAppState().pipe(map(_ => tenant)); + }; + + constructor( + private restService: RestService, + private sessionState: SessionStateService, + private tenantService: AbpTenantService, + private configStateService: ConfigStateService, + @Inject(TENANT_KEY) public tenantKey: string, + ) {} /** * @deprecated Use AbpTenantService.findTenantByName method instead. To be deleted in v5.0. @@ -50,4 +51,16 @@ export class MultiTenancyService { { apiName: this.apiName }, ); } + + setTenantByName(tenantName: string) { + return this.tenantService + .findTenantByName(tenantName, { [this.tenantKey]: '' }) + .pipe(switchMap(this.setTenantToState)); + } + + setTenantById(tenantId: string) { + return this.tenantService + .findTenantById(tenantId, { [this.tenantKey]: '' }) + .pipe(switchMap(this.setTenantToState)); + } } diff --git a/npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts index b9de17bf50..4cb959ac45 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts @@ -19,6 +19,7 @@ import { EnvironmentService } from '../services/environment.service'; import { SessionStateService } from '../services/session-state.service'; import { removeRememberMe, setRememberMe } from '../utils/auth-utils'; import { noop } from '../utils/common-utils'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; export const oAuthStorage = localStorage; @@ -32,6 +33,7 @@ export abstract class AuthFlowStrategy { protected oAuthConfig: AuthConfig; protected sessionState: SessionStateService; protected appConfigService: AbpApplicationConfigurationService; + protected tenantKey: string; abstract checkIfInternalAuth(queryParams?: Params): boolean; abstract navigateToLogin(queryParams?: Params): void; @@ -48,6 +50,7 @@ export abstract class AuthFlowStrategy { this.appConfigService = injector.get(AbpApplicationConfigurationService); this.sessionState = injector.get(SessionStateService); this.oAuthConfig = this.environment.getEnvironment().oAuthConfig; + this.tenantKey = injector.get(TENANT_KEY); this.listenToOauthErrors(); } @@ -176,7 +179,7 @@ export class AuthPasswordFlowStrategy extends AuthFlowStrategy { this.oAuthService.fetchTokenUsingPasswordFlow( params.username, params.password, - new HttpHeaders({ ...(tenant && tenant.id && { __tenant: tenant.id }) }), + new HttpHeaders({ ...(tenant && tenant.id && { [this.tenantKey]: tenant.id }) }), ), ).pipe(this.pipeToLogin(params)); } diff --git a/npm/ng-packs/packages/core/src/lib/tokens/index.ts b/npm/ng-packs/packages/core/src/lib/tokens/index.ts index c40fbc1bc0..4d102ee8b4 100644 --- a/npm/ng-packs/packages/core/src/lib/tokens/index.ts +++ b/npm/ng-packs/packages/core/src/lib/tokens/index.ts @@ -3,3 +3,4 @@ export * from './lodaer-delay.token'; export * from './manage-profile.token'; export * from './options.token'; export * from './app-config.token'; +export * from './tenant-key.token'; diff --git a/npm/ng-packs/packages/core/src/lib/tokens/tenant-key.token.ts b/npm/ng-packs/packages/core/src/lib/tokens/tenant-key.token.ts new file mode 100644 index 0000000000..1999b3b9f7 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tokens/tenant-key.token.ts @@ -0,0 +1,3 @@ +import { InjectionToken } from '@angular/core'; + +export const TENANT_KEY = new InjectionToken('TENANT_KEY'); diff --git a/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts index dbcb2c8517..87e4d68c9e 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts @@ -1,10 +1,10 @@ import { Injector } from '@angular/core'; import clone from 'just-clone'; -import { of } from 'rxjs'; -import { switchMap, tap } from 'rxjs/operators'; + +import { tap } from 'rxjs/operators'; import { Environment } from '../models/environment'; -import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy/abp-tenant.service'; -import { CurrentTenantDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; + +import { FindTenantResultDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; import { EnvironmentService } from '../services/environment.service'; import { MultiTenancyService } from '../services/multi-tenancy.service'; import { createTokenParser } from './string-utils'; @@ -19,39 +19,52 @@ function getCurrentTenancyName(appBaseUrl: string): string { return parseTokens(window.location.href)[token]?.[0]; } +function getCurrentTenancyNameFromUrl(tenantKey: string) { + const urlParams = new URLSearchParams(window.location.search); + return urlParams.get(tenantKey); +} + export async function parseTenantFromUrl(injector: Injector) { const environmentService = injector.get(EnvironmentService); const multiTenancyService = injector.get(MultiTenancyService); - const abpTenantService = injector.get(AbpTenantService); const baseUrl = environmentService.getEnvironment()?.application?.baseUrl || ''; const tenancyName = getCurrentTenancyName(baseUrl); - if (tenancyName) { + const hideTenantBox = () => { multiTenancyService.isTenantBoxVisible = false; - setEnvironment(injector, tenancyName); - - return of(null) - .pipe( - switchMap(() => abpTenantService.findTenantByName(tenancyName, { __tenant: '' })), - tap(res => { - multiTenancyService.domainTenant = res.success - ? ({ id: res.tenantId, name: res.name } as CurrentTenantDto) - : null; - }), - ) + }; + + const setEnvironmentWithTenant = (tenant: FindTenantResultDto) => { + hideTenantBox(); + replaceTenantNameWithinEnvironment(injector, tenant.name); + }; + + if (tenancyName) { + return multiTenancyService + .setTenantByName(tenancyName) + .pipe(tap(setEnvironmentWithTenant)) .toPromise(); } else { /** * If there is no tenant, we still have to clean up {0}. from baseUrl to avoid incorrect http requests. */ - setEnvironment(injector, '', tenancyPlaceholder + '.'); + replaceTenantNameWithinEnvironment(injector, '', tenancyPlaceholder + '.'); + + const tenantIdFromQueryParams = getCurrentTenancyNameFromUrl(multiTenancyService.tenantKey); + if (tenantIdFromQueryParams) { + return multiTenancyService.setTenantById(tenantIdFromQueryParams).toPromise(); + } } return Promise.resolve(); } -function setEnvironment(injector: Injector, tenancyName: string, placeholder = tenancyPlaceholder) { +function replaceTenantNameWithinEnvironment( + injector: Injector, + tenancyName: string, + placeholder = tenancyPlaceholder, +) { const environmentService = injector.get(EnvironmentService); const environment = clone(environmentService.getEnvironment()) as Environment; From 8d8917870781bb0ced3e00bb64f3af7ffe30e4bf Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 12 Jul 2021 18:47:52 +0300 Subject: [PATCH 07/11] docs: update multi-tenancy docs with tenantKey in angular client --- docs/en/Multi-Tenancy.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/docs/en/Multi-Tenancy.md b/docs/en/Multi-Tenancy.md index 5db646b7a7..f8098a4875 100644 --- a/docs/en/Multi-Tenancy.md +++ b/docs/en/Multi-Tenancy.md @@ -296,6 +296,32 @@ services.Configure(options => }); ```` +If you change the `TenantKey`, make sure to pass it to `CoreModule` in the Angular client as follows: + +```js +@NgModule({ + imports: [ + CoreModule.forRoot({ + // ... + tenantKey: 'MyTenantKey' + }), + ], + // ... +}) +export class AppModule {} +``` + +If you need to access it, you can inject it as follows: + +```js +import { Inject } from '@angular/core'; +import { TENANT_KEY } from '@abp/ng.core'; + +class SomeComponent { + constructor(@Inject(TENANT_KEY) private tenantKey: string) {} +} +``` + > However, we don't suggest to change this value since some clients may assume the the `__tenant` as the parameter name and they might need to manually configure then. ##### Domain/Subdomain Tenant Resolver From 79655e1fbe9b933d250e5c0f985e23839d050508 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 12 Jul 2021 18:48:40 +0300 Subject: [PATCH 08/11] fix: reading wrong data for tenantBoxVisible from route config --- .../src/lib/auth-wrapper.service.ts | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/npm/ng-packs/packages/account-core/src/lib/auth-wrapper.service.ts b/npm/ng-packs/packages/account-core/src/lib/auth-wrapper.service.ts index 44f53c7eef..7bad8ef96a 100644 --- a/npm/ng-packs/packages/account-core/src/lib/auth-wrapper.service.ts +++ b/npm/ng-packs/packages/account-core/src/lib/auth-wrapper.service.ts @@ -17,14 +17,12 @@ export class AuthWrapperService { tenantBoxKey = 'Account.TenantBoxComponent'; route: ActivatedRoute; - private _tenantBoxVisible = true; - - private setTenantBoxVisibility = () => { - this._tenantBoxVisible = this.route.snapshot.firstChild.data.tenantBoxVisible ?? true; - }; + get isTenantBoxVisibleForCurrentRoute() { + return this.getMostInnerChild().data.tenantBoxVisible ?? true; + } get isTenantBoxVisible() { - return this._tenantBoxVisible && this.multiTenancy.isTenantBoxVisible; + return this.isTenantBoxVisibleForCurrentRoute && this.multiTenancy.isTenantBoxVisible; } constructor( @@ -33,6 +31,16 @@ export class AuthWrapperService { injector: Injector, ) { this.route = injector.get(ActivatedRoute); - this.setTenantBoxVisibility(); + } + + private getMostInnerChild() { + let child = this.route.snapshot; + let depth = 0; + const depthLimit = 10; + while (child.firstChild && depth < depthLimit) { + child = child.firstChild; + depth++; + } + return child; } } From 7a33df11c21b354fe922e7ca78f638fed72d43ac Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Tue, 13 Jul 2021 15:07:45 +0300 Subject: [PATCH 09/11] fix: add domainTenant back to MultiTenancyService --- .../core/src/lib/services/multi-tenancy.service.ts | 7 ++++++- .../core/src/lib/utils/multi-tenancy-utils.ts | 13 +++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts b/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts index 7724106cfe..99371f91e7 100644 --- a/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/multi-tenancy.service.ts @@ -2,7 +2,10 @@ import { Injectable, Inject } from '@angular/core'; import { switchMap, map } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { ABP } from '../models/common'; -import { FindTenantResultDto } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; +import { + FindTenantResultDto, + CurrentTenantDto, +} from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; import { RestService } from './rest.service'; import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy'; import { ConfigStateService } from './config-state.service'; @@ -11,6 +14,8 @@ import { TENANT_KEY } from '../tokens/tenant-key.token'; @Injectable({ providedIn: 'root' }) export class MultiTenancyService { + domainTenant: CurrentTenantDto = null; + isTenantBoxVisible = true; apiName = 'abp'; diff --git a/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts index 87e4d68c9e..ea2b3d9765 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/multi-tenancy-utils.ts @@ -35,15 +35,24 @@ export async function parseTenantFromUrl(injector: Injector) { multiTenancyService.isTenantBoxVisible = false; }; - const setEnvironmentWithTenant = (tenant: FindTenantResultDto) => { + const setDomainTenant = (tenant: FindTenantResultDto) => { + multiTenancyService.domainTenant = { + id: tenant.tenantId, + name: tenant.name, + isAvailable: true, + }; + }; + + const setEnvironmentWithDomainTenant = (tenant: FindTenantResultDto) => { hideTenantBox(); + setDomainTenant(tenant); replaceTenantNameWithinEnvironment(injector, tenant.name); }; if (tenancyName) { return multiTenancyService .setTenantByName(tenancyName) - .pipe(tap(setEnvironmentWithTenant)) + .pipe(tap(setEnvironmentWithDomainTenant)) .toPromise(); } else { /** From 92848ff399b1fcac9c32f3d5ae84228afa4b2016 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Tue, 13 Jul 2021 15:08:17 +0300 Subject: [PATCH 10/11] test: fix broken tests --- .../src/lib/tests/api.interceptor.spec.ts | 6 +++- .../lib/tests/config-state.service.spec.ts | 6 ++-- .../core/src/lib/tests/date-utils.spec.ts | 2 +- .../src/lib/tests/multi-tenancy-utils.spec.ts | 32 +++++++++++-------- 4 files changed, 29 insertions(+), 17 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts index ab289ddd9a..f731e4e7e5 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/api.interceptor.spec.ts @@ -5,6 +5,7 @@ import { OAuthService } from 'angular-oauth2-oidc'; import { Subject, timer } from 'rxjs'; import { ApiInterceptor } from '../interceptors'; import { HttpWaitService, SessionStateService } from '../services'; +import { TENANT_KEY } from '../tokens/tenant-key.token'; describe('ApiInterceptor', () => { let spectator: SpectatorService; @@ -13,9 +14,12 @@ describe('ApiInterceptor', () => { let sessionState: SpyObject; let httpWaitService: SpyObject; + const testTenantKey = 'TEST_TENANT_KEY'; + const createService = createServiceFactory({ service: ApiInterceptor, mocks: [OAuthService, SessionStateService], + providers: [{ provide: TENANT_KEY, useValue: testTenantKey }], }); beforeEach(() => { @@ -38,7 +42,7 @@ describe('ApiInterceptor', () => { handle: (req: HttpRequest) => { expect(req.headers.get('Authorization')).toEqual('Bearer ey892mkwa8^2jk'); expect(req.headers.get('Accept-Language')).toEqual('tr'); - expect(req.headers.get('__tenant')).toEqual('Volosoft'); + expect(req.headers.get(testTenantKey)).toEqual('Volosoft'); done(); return handleRes$; }, diff --git a/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts index 8f13beddf3..dad7a2c524 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/config-state.service.spec.ts @@ -5,8 +5,9 @@ import { CurrentUserDto, } from '../proxy/volo/abp/asp-net-core/mvc/application-configurations/models'; import { ConfigStateService } from '../services'; +import { CoreTestingModule } from '@abp/ng.core/testing'; -export const CONFIG_STATE_DATA = ({ +export const CONFIG_STATE_DATA = { environment: { production: false, application: { @@ -97,7 +98,7 @@ export const CONFIG_STATE_DATA = ({ }, }, registerLocaleFn: () => Promise.resolve(), -} as any) as ApplicationConfigurationDto; +} as any as ApplicationConfigurationDto; describe('ConfigState', () => { let spectator: SpectatorService; @@ -105,6 +106,7 @@ describe('ConfigState', () => { const createService = createServiceFactory({ service: ConfigStateService, + imports: [CoreTestingModule.withConfig()], }); beforeEach(() => { diff --git a/npm/ng-packs/packages/core/src/lib/tests/date-utils.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/date-utils.spec.ts index 764882847b..0bfebd2bcb 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/date-utils.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/date-utils.spec.ts @@ -15,7 +15,7 @@ describe('Date Utils', () => { let config: ConfigStateService; beforeEach(() => { - config = new ConfigStateService(); + config = new ConfigStateService(null); }); describe('#getShortDateFormat', () => { diff --git a/npm/ng-packs/packages/core/src/lib/tests/multi-tenancy-utils.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/multi-tenancy-utils.spec.ts index 66188f0bb3..5e49b64d22 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/multi-tenancy-utils.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/multi-tenancy-utils.spec.ts @@ -1,14 +1,15 @@ import { Component } from '@angular/core'; import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; import clone from 'just-clone'; -import { BehaviorSubject } from 'rxjs'; -import { AbpTenantService } from '../proxy/pages/abp/multi-tenancy/abp-tenant.service'; +import { of } from 'rxjs'; + import { CurrentTenantDto, FindTenantResultDto, } from '../proxy/volo/abp/asp-net-core/mvc/multi-tenancy/models'; import { EnvironmentService, MultiTenancyService } from '../services'; import { parseTenantFromUrl } from '../utils'; +import { TENANT_KEY } from '../tokens'; const environment = { production: false, @@ -45,6 +46,8 @@ const setHref = url => { }); }; +const testTenantKey = 'TEST_TENANT_KEY'; + @Component({ selector: 'abp-dummy', template: '', @@ -56,7 +59,7 @@ describe('MultiTenancyUtils', () => { const createComponent = createComponentFactory({ component: DummyComponent, mocks: [EnvironmentService, MultiTenancyService], - providers: [{ provide: AbpTenantService, useValue: { findTenantByName: () => {} } }], + providers: [{ provide: TENANT_KEY, useValue: testTenantKey }], }); beforeEach(() => (spectator = createComponent())); @@ -65,27 +68,30 @@ describe('MultiTenancyUtils', () => { test('should get the tenancyName, set replaced environment and call the findTenantByName method of AbpTenantService', async () => { const environmentService = spectator.inject(EnvironmentService); const multiTenancyService = spectator.inject(MultiTenancyService); - const abpTenantService = spectator.inject(AbpTenantService); - const findTenantByNameSpy = jest.spyOn(abpTenantService, 'findTenantByName'); + const setTenantByName = jest.spyOn(multiTenancyService, 'setTenantByName'); const getEnvironmentSpy = jest.spyOn(environmentService, 'getEnvironment'); const setStateSpy = jest.spyOn(environmentService, 'setState'); getEnvironmentSpy.mockReturnValue(clone(environment)); + const testTenant: FindTenantResultDto = { + name: 'abp', + tenantId: '1', + isActive: true, + success: true, + }; + setHref('https://abp.volosoft.com/'); - findTenantByNameSpy.mockReturnValue( - new BehaviorSubject({ name: 'abp', tenantId: '1', success: true } as FindTenantResultDto), - ); + setTenantByName.mockReturnValue(of(testTenant)); const mockInjector = { get: arg => { if (arg === EnvironmentService) return environmentService; - if (arg === AbpTenantService) return abpTenantService; if (arg === MultiTenancyService) return multiTenancyService; }, }; - parseTenantFromUrl(mockInjector); + await parseTenantFromUrl(mockInjector); const replacedEnv = { ...environment, @@ -106,10 +112,10 @@ describe('MultiTenancyUtils', () => { }; expect(setStateSpy).toHaveBeenCalledWith(replacedEnv); - expect(findTenantByNameSpy).toHaveBeenCalledWith('abp', { __tenant: '' }); expect(multiTenancyService.domainTenant).toEqual({ - id: '1', - name: 'abp', + id: testTenant.tenantId, + name: testTenant.name, + isAvailable: true, } as CurrentTenantDto); }); }); From 5cd73066861507f207fc1da1cec88959b62cb7de Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 14 Jul 2021 11:13:19 +0800 Subject: [PATCH 11/11] Use AddAppSettingsSecretsJson extension method --- .../Extensions/Hosting/AbpHostingHostBuilderExtensions.cs} | 7 +++---- .../Program.cs | 5 +---- .../MyCompanyName.MyProjectName.Blazor.Server/Program.cs | 5 +---- .../src/MyCompanyName.MyProjectName.DbMigrator/Program.cs | 5 +---- .../MyCompanyName.MyProjectName.HttpApi.Host/Program.cs | 5 +---- .../Program.cs | 5 +---- .../MyCompanyName.MyProjectName.IdentityServer/Program.cs | 5 +---- .../src/MyCompanyName.MyProjectName.Web.Host/Program.cs | 5 +---- .../src/MyCompanyName.MyProjectName.Web/Program.cs | 5 +---- .../Program.cs | 5 +---- .../Program.cs | 5 +---- .../MyCompanyName.MyProjectName.HttpApi.Host/Program.cs | 5 +---- .../MyCompanyName.MyProjectName.IdentityServer/Program.cs | 5 +---- .../host/MyCompanyName.MyProjectName.Web.Host/Program.cs | 5 +---- .../MyCompanyName.MyProjectName.Web.Unified/Program.cs | 5 +---- .../Program.cs | 5 +---- 16 files changed, 18 insertions(+), 64 deletions(-) rename framework/src/{Volo.Abp.AspNetCore/Microsoft/Extensions/Hosting/AbpAspNetCoreHostBuilderExtensions.cs => Volo.Abp.Core/Microsoft/Extensions/Hosting/AbpHostingHostBuilderExtensions.cs} (74%) diff --git a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/Hosting/AbpAspNetCoreHostBuilderExtensions.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Hosting/AbpHostingHostBuilderExtensions.cs similarity index 74% rename from framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/Hosting/AbpAspNetCoreHostBuilderExtensions.cs rename to framework/src/Volo.Abp.Core/Microsoft/Extensions/Hosting/AbpHostingHostBuilderExtensions.cs index 8f73215efa..e2f55142e7 100644 --- a/framework/src/Volo.Abp.AspNetCore/Microsoft/Extensions/Hosting/AbpAspNetCoreHostBuilderExtensions.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Hosting/AbpHostingHostBuilderExtensions.cs @@ -1,9 +1,8 @@ using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; namespace Microsoft.Extensions.Hosting { - public static class AbpAspNetCoreHostBuilderExtensions + public static class AbpHostingHostBuilderExtensions { public const string AppSettingsSecretJsonPath = "appsettings.secrets.json"; @@ -13,9 +12,9 @@ namespace Microsoft.Extensions.Hosting bool reloadOnChange = true, string path = AppSettingsSecretJsonPath) { - return hostBuilder.ConfigureAppConfiguration(appConfig => + return hostBuilder.ConfigureAppConfiguration((_, builder) => { - appConfig.AddJsonFile( + builder.AddJsonFile( path: AppSettingsSecretJsonPath, optional: optional, reloadOnChange: reloadOnChange diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Program.cs index 5b9b0d2617..5ec3416569 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server.Tiered/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Tiered public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Program.cs index 0c1f77c869..636f823d17 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor.Server/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs index 0bc45f3f34..e6f095308c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.DbMigrator/Program.cs @@ -32,10 +32,7 @@ namespace MyCompanyName.MyProjectName.DbMigrator public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureLogging((context, logging) => logging.ClearProviders()) .ConfigureServices((hostContext, services) => { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs index 75cea3c4d9..e16edddb92 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/Program.cs index 75cea3c4d9..e16edddb92 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs index 5ffee2ba95..8a57ded111 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs index 7ef69fa2b3..e6d0635c7c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName.Web internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Program.cs index 7ef69fa2b3..e6d0635c7c 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName.Web internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs index e296ed9a11..2055438bc5 100644 --- a/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/templates/app/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs @@ -14,10 +14,7 @@ namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureServices((hostContext, services) => { services.AddHostedService(); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Program.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Program.cs index 80a6d4b8b7..14ab96b609 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Program.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Blazor.Server.Host/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Server.Host public static IHostBuilder CreateHostBuilder(string[] args) => Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs index 0c22a68c1d..b2811a98ba 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Program.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Program.cs index 0c22a68c1d..b2811a98ba 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Program.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Program.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Program.cs index 0c22a68c1d..b2811a98ba 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Program.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/Program.cs @@ -45,10 +45,7 @@ namespace MyCompanyName.MyProjectName internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Program.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Program.cs index 1a36da255f..9e4d072019 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Program.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/Program.cs @@ -41,10 +41,7 @@ namespace MyCompanyName.MyProjectName internal static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs index e296ed9a11..2055438bc5 100644 --- a/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs +++ b/templates/module/aspnet-core/test/MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp/Program.cs @@ -14,10 +14,7 @@ namespace MyCompanyName.MyProjectName.HttpApi.Client.ConsoleTestApp public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) - .ConfigureAppConfiguration(build => - { - build.AddJsonFile("appsettings.secrets.json", optional: true); - }) + .AddAppSettingsSecretsJson() .ConfigureServices((hostContext, services) => { services.AddHostedService();