From be6b897fb6bfd18eaa4039e6724ae1c2f5b54a32 Mon Sep 17 00:00:00 2001 From: John Barrett <40014477+274188A@users.noreply.github.com> Date: Fri, 28 Sep 2018 15:19:50 +0800 Subject: [PATCH 01/13] grammar, readability --- docs/Best-Practices/Index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/Best-Practices/Index.md b/docs/Best-Practices/Index.md index bf2592c1cf..93d6409909 100644 --- a/docs/Best-Practices/Index.md +++ b/docs/Best-Practices/Index.md @@ -2,13 +2,13 @@ ### Introduction -This document describes the **best practices** and **conventions** for who want to develop **modules** that satisfies the following specifications: +This document describes the **best practices** and **conventions** for those who want to develop **modules** that satisfy the following specifications: -* Develop the module that applies the **Domain Driven Design** patterns & best practices. -* Develop the module as **DBMS and ORM independent**. -* Develop the module that can be used as a **remote service / microservice** as well as can be integrated to a **monolithic** application. +* Develop modules that conform to the **Domain Driven Design** patterns & best practices. +* Develop modules with **DBMS and ORM independence**. +* Develop modules that can be used as a **remote service / microservice** as well as being compatible with a **monolithic** application. -Also, this guide is mostly usable for the **application development**. +Also, this guide is mostly usable for general **application development**. ### Guides From 00d914b13e3eea86cfa397c191a37ce4ceb86015 Mon Sep 17 00:00:00 2001 From: John Barrett <40014477+274188A@users.noreply.github.com> Date: Tue, 2 Oct 2018 10:51:40 +0800 Subject: [PATCH 02/13] improved the grammar and readability. I had a second read of this and made further refinements now that I understand the content a little better. (ps fantastic feature!) --- docs/Virtual-File-System.md | 38 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/Virtual-File-System.md b/docs/Virtual-File-System.md index 97892d89b0..c41c443290 100644 --- a/docs/Virtual-File-System.md +++ b/docs/Virtual-File-System.md @@ -1,16 +1,16 @@ ## Virtual File System -The Virtual File System makes it possible to manage files that do not physically exist on the file system (disk). It's mainly used to embed (js, css, image, cshtml...) files into assemblies and use them like physical files on runtime. +The Virtual File System makes it possible to manage files that do not physically exist on the file system (disk). It's mainly used to embed (js, css, image, cshtml...) files into assemblies and use them like physical files at runtime. ### Volo.Abp.VirtualFileSystem Package -Volo.Abp.VirtualFileSystem is the core package of the virtual file system. Install it to your project using the package manager console (PMC): +Volo.Abp.VirtualFileSystem is the core package of the virtual file system. Install it in your project using the package manager console (PMC): ``` Install-Package Volo.Abp.VirtualFileSystem ``` -> This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually. +> This package is already installed by default with the startup template. So, most of the time, you will not need to install it manually. Then you can add **AbpVirtualFileSystemModule** dependency to your module: @@ -30,7 +30,7 @@ namespace MyCompany.MyProject #### Registering Embedded Files -A file should be first marked as embedded resource to embed the file into the assembly. The easiest way to do it is to select the file from the **Solution Explorer** and set **Build Action** to **Embedded Resource** from the **Properties** window. Example: +A file should be first marked as an embedded resource to embed the file into the assembly. The easiest way to do it is to select the file from the **Solution Explorer** and set **Build Action** to **Embedded Resource** from the **Properties** window. Example: ![build-action-embedded-resource-sample](images/build-action-embedded-resource-sample.png) @@ -44,7 +44,7 @@ If you want to add multiple files, this can be tedious. Alternatively, you can d This configuration recursively adds all files under the **MyResources** folder of the project (including the files you will add in the future). -Then the module should be configured using `VirtualFileSystemOptions` to register the embedded files to the virtual file system. Example: +Then the module needs to be configured using `VirtualFileSystemOptions` to register the embedded files to the virtual file system. Example: ````C# using Microsoft.Extensions.DependencyInjection; @@ -70,7 +70,7 @@ namespace MyCompany.MyProject } ```` -The `AddEmbedded` extension method takes a class, finds all embedded files from the assembly of the given class and registers them to the virtual file system. More concisely it could be written as shown below: +The `AddEmbedded` extension method takes a class, finds all embedded files from the assembly of the given class and registers them to the virtual file system. More concisely it could be written as follows: ````C# options.FileSets.Add(new EmbeddedFileSet(typeof(MyModule).Assembly)); @@ -78,7 +78,7 @@ options.FileSets.Add(new EmbeddedFileSet(typeof(MyModule).Assembly)); #### Getting Virtual Files: IVirtualFileProvider -After embedding a file into an assembly and registering to the virtual file system, `IVirtualFileProvider` can be used to get files or directory contents: +After embedding a file into an assembly and registering it to the virtual file system, the `IVirtualFileProvider` interface can be used to get files or directory contents: ````C# public class MyService @@ -104,13 +104,13 @@ public class MyService #### Dealing With Embedded Files During Development -Embedding a file into a module assembly and using it from another project by just referencing the assembly (or adding a nuget package) is very valuable for creating a re-usable module. However, it makes it a bit hard to develop the module itself. +Embedding a file into a module assembly and being able to use it from another project just by referencing the assembly (or adding a nuget package) is invaluable for creating a re-usable module. However, it does make it a little bit harder to develop the module itself. -Assume that you are developing a module that contains an embedded JavaScript file. Whenever you change the file you must re-compile the project, re-start the application and refresh the browser page to take the change. Obviously, it is very time consuming and tedious. +Let's assume that you're developing a module that contains an embedded JavaScript file. Whenever you change this file you must re-compile the project, re-start the application and refresh the browser page to take the change. Obviously, this is very time consuming and tedious. -What is needed is the ability for the application to directly use the physical file at development time and a browser refresh shows any change in the JavaScript file. `ReplaceEmbeddedByPyhsical` method makes that possible. +What is needed is the ability for the application to directly use the physical file at development time and a have a browser refresh refect any change in the JavaScript file. The `ReplaceEmbeddedByPyhsical` method makes all this possible. -The example below shows an application depends on a module (`MyModule`) that contains embedded files and the application can reach the source code of the module on the development time. +The example below shows an application that depends on a module (`MyModule`) that itself contains embedded files. The application can reach the source code of the module at development time. ````C# [DependsOn(typeof(MyModule))] @@ -140,26 +140,26 @@ The code above assumes that `MyWebAppModule` and `MyModule` are two different pr ### ASP.NET Core Integration -Virtual File System is well integrated to ASP.NET Core: +The Virtual File System is well integrated to ASP.NET Core: -* Virtual files can be used just like physical (static) files on a web application. -* Razor Views, Razor Pages, js, css, image files and all other web contents can be embedded into assemblies and used just like the physical files. +* Virtual files can be used just like physical (static) files in a web application. +* Razor Views, Razor Pages, js, css, image files and all other web content types can be embedded into assemblies and used just like the physical files. * An application (or another module) can override a virtual file of a module just like placing a file with the same name and extension into the same folder of the virtual file. #### Virtual Files Middleware -Virtual Files Middleware is used to serve embedded (js, css, image...) files to clients/browsers just like physical files in the **wwwroot** folder. Add it just after the static file middleware as shown below: +The Virtual Files Middleware is used to serve embedded (js, css, image...) files to clients/browsers just like physical files in the **wwwroot** folder. Add it just after the static file middleware as shown below: ````C# app.UseVirtualFiles(); ```` -Adding virtual files middleware after the static files middleware makes it possible to override a virtual file by a physical file by placing in the same location. +Adding virtual files middleware after the static files middleware makes it possible to override a virtual file with a real physical file simply by placing it in the same location as the virtual file. -> Virtual Files Middleware only serves the virtual wwwroot folder contents just like the static files. +>The Virtual File Middleware only serves the virtual wwwroot folder contents - just like the other static files. #### Views & Pages -Embedded razor views/pages are available in the application without any configuration. Just place them into standard Views/Pages virtual folders in the module development. +Embedded razor views/pages are available in the application without any configuration. Simply place them into the standard Views/Pages virtual folders of the module being developed. -An embedded view/page can be overrided if a module/application locates a new file into the same location. +An embedded view/page can be overrided if a module/application locates a new file into the same location as mentioned above. From 13fff38fc3c4a9b2af3179ed111d939882d7822f Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 3 Oct 2018 14:14:34 +0300 Subject: [PATCH 03/13] Remove old [Display] usage doc. --- docs/Tutorials/AspNetCore-Mvc/Part-I.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/Tutorials/AspNetCore-Mvc/Part-I.md b/docs/Tutorials/AspNetCore-Mvc/Part-I.md index 649ac03de6..5ed244a53c 100644 --- a/docs/Tutorials/AspNetCore-Mvc/Part-I.md +++ b/docs/Tutorials/AspNetCore-Mvc/Part-I.md @@ -173,7 +173,6 @@ namespace Acme.BookStore * This DTO class is used to get book information from the user interface while creating or updating a book. * It defines data annotation attributes (like `[Required]`) to define validations for the properties. DTOs are automatically validated by ABP. -* Each property has a `[Display]` property which set the label text on UI forms for the related input (it's also integrated to the localization system). The same DTO will be used as a View Model. That's why it defines that attribute. You may be inclined to think it's incorrect to use DTOs as View Models. There is nothing stopping you from using a separated view model class, but we thought it's practical and makes the sample project less complex. #### IBookAppService From 10a29da80325c51f62f8453c8a12df9b367924bb Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Wed, 3 Oct 2018 15:06:41 +0300 Subject: [PATCH 04/13] Update screenshot --- modules/docs/screenshot.png | Bin 88877 -> 120637 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/modules/docs/screenshot.png b/modules/docs/screenshot.png index 60368b08b276292598624ccc96dad0983a00833d..55ff411f0c3821e3b5ae0c906fa02203b29321ff 100644 GIT binary patch literal 120637 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
  • ;{9x4|sZH1>?Up5()pDuK*OFiS*@GQ9=*?#n zh<9|>_Ly#GnmVi^^v8F1*5`%p}jOD}9nmyzro zD<)TtCh3o)m9#sHHF#M=QM7GA`x}cAhKlW|QW~>3LU9409F%2>h8yXJnh^8cmZwKS zpi;E4NnAdS=L7iVr4ztLX2rcwjN@5Gqq>utL13cpGf4n^N%FF?vR1ip9r}}6E~VFk zlAJ(@vUM{5f#}xTk3Wn%QP~9hr4rTNJ<52E-9?-Y5M2eZYQrmOB4N>_?KF`arjp5@ zGdeD^XnW~tm-BL@faujyCb zO8YhtW&}(AMXnTw?inWe;1Cm=!YeSX{vTTGHWzmQ0FiJZ=%}*M18L@Qa16vahXd51 z-s;oO8@`SPzNj5a-p}vI;^66f0T*_7E+5nV1PrPx5s2)?$@v_QQYg(Lo192J^nZnc zT&gO9zl@{2j2qreB+-eY!BpECRI&^wH0q|j1HDPTDaa8p^)8py4QMVm$Ay=f-XSYS zH|-L}b?um|tu~TAUvmS2JjF^h_(mqZ&K}SZt+&66 zq%vwA5+_xFhx!v;Ph`rr2I((zqO5uY@GGiy7Xgy>P07nd&nO3R>5+v%{5Wq3W0y5q=0AUjLOa;3=OC29v&1ROOm zAo&uDXiJAiL9jiNH&&EhC7wjb?PFpR%VvE-YFXFjQS_|1G1o-hQ?-$DgNMzZCS1yH ztnfd(FJpnd8={)2PUHsw#*58>YQyPtW4ZF-1iT0*kOxZmxb{AaJgCWueGMVR)T}oQ zvZ8Q^P`EJwE-ToZg=t~5&(NyV2|7tJDe*RQ!6)D(M`&SwGZ!>+*Pt`i9C##D@(x~Sk0M=e(I=yP zAo`(A^9JLJy6(@{!@qP8^gM-sOxBT2F)=YwBljrLW-yU6mZLB~zux=OQBzY>MMcFb z_a6v$Pj!r{Y$%1_%frJ3J{+y$QJMC~kKY2AHV2cq&4!4Se{%?KL^2fwt1yeww*$W2 zUZ0EKqViRd2zmm<#pnKKu~b?gKDqhtV(CZPDmWtaPt#|YjcX5nox#DuhN+1NbrZ6+Z_{p( zQEDFuh{LsGl5ga8Us}B|u-ad3)`^MKo2V{szrAD&)6W~>1Gt&VDfuCOea=(i?V^#- zcC7{;o$zXEbcuTUXJutpL~R%G<`GcHWFCVbaYY|v87eQH-PbP{Vv1r&C-zyTcrn2T zPFJek$PW0jwU##f`vPH#cUIYFt;Kv)N68CddbA{Zt59^-Cv^>xjC$Oq1r@52h%|Vy zJcI4ppYnAx^95g38B2b%U8c^Ya%xF5KrlR55W>O1xxBp8aQq7i+l_pHb=2?Fy(LqF zX>Jn>ewKd#A&T;1Vv4^cpkKqHlL|MHjP8u*hvQx291wNZpPImHCAyzzzm(GU_Ax7A z^;RlTHKlK1b|!aZhe{IJO@NR@+;Lf$j8U`Qv{P!}sKs}J2ZOYAo~n5Au5g$^zF^;C z#F*IBgph_A8Ko7PjLIV`WEca3y~E14iXug~PtDHjE1hIh=~U96LDOo027V_AI!G6f zVMDAb@A*-QOM+IdDi-UcIqv?Frg>eo!mV#%&TCwuI5syEwTAGtLY-B~M@qR^m|6#C z`6VU$Np>wBH%C1k9Uaxk?Ck6qq(V)$3w$&*G=%Uf_wQ!o&+r24MF4>;AUOP#%Heqs`f5}LWnuc4T;@|+Dl7t;AceT$uo(OHFW<@0 zGX*Fo&^tl@v4gUBfCua*#d;uz1|u6zAFa)Y`~i<-+Aq?89Dk<(?2G_F0TCYu~0Y}LSJ>W1apG!%l^d%!2T>t=Z3;bkN!gbh`nqfEKM(x6B+M3mQng1GDe+-nW!#{ z9Jhfpj?x{N*Pt~&5;Qg8t6{@`6SCrnS&5WW_z4Z{L*skcl~u=yH*OcH7E!~uPIZja z)8&&6t)LfLi{-HmEf_0!naTRKvjv+}lvmQBph0b|VC}*fPb|A%nnRd|j(PucLAJSy zu~-sbTNQn!+d4lJ3IV}4ota1t<&Z$JMDLrd-ZM%gn@nzTSy?(77gk2|UaSN3D|abV zoDk5*`#yvBr+ zs2nNIEC}jCllzCU{l}Sto#Zru0@}=BW46q(M}E`X2^y}A36<}CB283heONV1%$qVs z$h&uFLg8P?5t<&%CfXSMe9(p3t3`!yjKrV+3lIZWjE(dY2QploM|DyY=5XEog$0x2 zQlj4#tnu{y?H|C+FOe)-y3*AnT4DLVDQgWA?H-HcqX?<&QLtHwpNPyVebTy2z^E|u zATP6<3X_7e&5#LODo5^vhv>Qyw@y4rWh7j543LO{bM5$8MG%i|bZTd#D;YJ5-dd0d zE3GJ7r&|L4{b7j(gU-Wo2l7y+!e%0~!jyH3)JFSgnQ7wgX2s>$K5J;06i4#NF*iJB zmLtk;su&{WYT#5d zY?0;9Dfs;T&O{tun{L5O3Ys47y7uf0o}&$q4UK7-fB&+&T;kfZex0oIsD(sHM!TM> zgA>O$zjdnPv^gLL6!+XaE~h5lXr!C2g#>YLs`pp14*e|8`W?hV6~%CU8IJ1VyvDEy zRH$+Ya)HD$-BB3fcVnn;Y${gK6=(>%Gm-R9t&rB#jP`NQzwjS!mpX?~0cj9h{iPK& zKWi1t^@eB+8A)LtG5 zIhqVSoay#JGR&tkXpS-KJ7;N|dDL?C;b~CadOek3xOtRnRgm&kfg}(zf84NJ&{I#) zq1M9Uu=F-Dam_Bklw>=wgLpLKTRu|q*LFcAgVB_#sP@Gm`k7iQ?s-Fi!0%_k!KeE# zKi(KBRXOw}QwB*3mW5n?8px1UVAY~`KAhP8IFU&*!A(W$`NT@RP){w;U=ZuI z$xSpn^&)p9Na0bV{T?p95W{E@DxKAeBDoqBA(N3Y_|^8#huY3!PMEa3$ytd^B4Np* zWdHcSHj&5$)}W#xw$1Z%JF1DG_iXiV%M%iA=@SS`&}sXJ8XI5H^7XFcaDyYrnao`BF&D_IyJ9 zIUXv8L#h?~&a-+p{W> zR}Ybo@&W(g1l;m`Kw4nO1;;nPKGNu@KyMRb)}mdlf-OA{xO&9NGA&x}Qnl~mLaEB+ zHxiH>%)RQP7NK@I>@Z8*7}WoPynFKWy`fsbn)f$D?OHYuQHs^vWY(h$H^b7R5$iyf zQEQ$_>gn@MLxHEGYe>3CG_Q3uL-0G^dXssvN6{q?^bmkQ+knGOJOd7Vhn$9j_Ey%Z zft5H+9=={OT_)tQz}eu)NmAS*p=2rYVETU^>RtrSIUlq8|G63uTH!N92l6_>&Vpapu0|+GUD;>y!G=W!O+%6B|0k%r2p7o&T zV>HNUXBo!~VvY8%Y=T|_Y#2v(&9Wfb5tjFi4gyZYbYjxoTvTHGHWu6~tkZ*lW`CTW zMacrckQ#G?upcch(jz&vHd3;?cbSWbVl2w=yJq9@bHLo9Jz+Flwn*3``}4^yzSb`o zzdi@}a699fTMEBgU9bJQB|K z)itFCRT;9Fo^Gx7!BiWA=ODbw`Q-8StEv7QsXX1n7MuZ8>*FzF?}*pi`TM*SRJX%n zm@_x%{786RbzV-9efi$~L>PVtqv5cn9D)Udg}A;8wwaTuM$rXQoj?k+)sOK=Mi+}-VM?!6z`-_P$j`o}QS z%yd_+u3ELu>+1gd3*J*`R8HlQ)aX^E`r35GZYMZlgpC0XjDO6t?pue)#3Cv5#I7^6@4b_3@nQKjGUH{TPJ8GSOY)FUx` z8Q*(0V|AupuuXr_^#z(F)i#YEbJ5oZbCq-&$Gqm1)U0RiwA_~*Ta@iOCG5}qvYu1& z50Q{pS%zy<_3K*#LxN?iFd%U}&PbBdb0RdB(aMy+rrHeTz&jrLj(nw2*4kJSXV0B~ z3qsD$lUZhNCkwg%cpof#GyK#y)8((2QpJJU*|UXP0|1yIOM=6tn1}+bs^1TPrQ(6@ zIu1tl@R|5}{h(LBKZT?}H2MBxc*=(z68Fk363R|st7os|5qv(?mRI9o9C0kAl-S;w zz^WwtM2}WZ=j+o{=2^CTg9d}Ot3*wv6o<;2U{dnRS^39OVs_hIuJNf~lN#MzF^|?! z`o-~n-6F;?H~m`yUS7*na-r@L&aMa`jf$j~pwT{2?KF-)kkyGVkD-zC8H$(jA4xD| zfwN6jimUff{P?los+~j~U*dDxAZ7>8J*vlJe1TfSmT>#?g<}~G(ITGQ5aR)|QoECA zt!my*Gx^7GHmL}9X`=Lco#lCsbSz*HN~O)lAxS^9m>L@rAN0`5GtX>YA@;9_=x7|( zuLwZ19>#9JeXYB7sj)U%%sr9hV&)(x*0{8bWwie55_yzIyW?~(yL>#}UXWoC8NZ)g z#*hyW+ak`cH%Qz4JNEN?vY+N#ly)4k_5|^92qm;`vYvMDAuDaVDxvDh<|?979sr0p-=BEO%~1Wo92 zb*2njL$Uk*rUHp^6hY&xIxYRq9!z>4n#OoUx;)`jm}F>**b^g!Uz85sA)RTF5&U%v zT-ay^Qg3GI@g2dSP-^@{kBOi4)&wEe&-cjT(`LUH$Kav<2*X| zLRNH)=G2p1Y>qPuK69?sX6YIxY)IIsq==+L`8mM}HM$Ts)no-tQ}(Uo&xr7mpUm)s z3wiGT=;fZYe*ETP%LSRxeqUbK0yo#v#qJ_EI?z6&TvV=I)S$Vd_4%mM807aP4oOFW zAwt)=`bbCsd%?8n9$L3X{K;Kn!3GsGfWY&eJ*BRRkRUq9?-=&Jz)SG=i7My9?RT*=mIyZCvK!fVr?Nh7I`>E1cZVwweC4h zjUQudRf{{DPCte+jj`)>k-_6?Ly`@kx0YLiHM_Zgh}v3Nk7(1s`>pjr`Mqg_i%w7Hf0@wf$D7_nHt5AeyC1<4+IMq#5hWw`p z9ja{F+e19m3t|Uch{gKx13?|uND#=cN#>S9&Zp=-$ZxjR;yaWizJd2TAJ#>wZ5g~{ z=b+ztaQlr@)NomWInLR`BN{Rin+q9<%+>sIqIML?LDMBm?h<5oU;hm;`e z7At6a=PENj-s0$cqbUUr@3Qvz)#5KZRs~yQWuljG%|HiPEpL)I&;<6j<)n};!Z>lO zyo$Ov$-S(`C?8%!ltCal7Bjq3lqlGk6Jbn=u`F$c{A;Jy3SBvz9}-8co!X|HSn8Ab z>bh>uj_Hp-tOH&-4JnS)V>8WEOL3@93GJ0An$j@xUNnLwil)DIx!Q&v8?FE8Fx-g` z=OeW@bwT<^3wyzYgICvzJG71s$3X&$hicl-c=W93m3`}0Dhp*>D8-JwSei#zU}~xU z<)W2ZReXuuacKr=zKCF)Px1@*tq|RvJ*gVK5aqT3vZtp=JMm*w2S@1T2ClRt=?&KR z<8K|&zG7v||c zWe&1EJe65nmxjtIyP-_;w(~O>%n>oJ_R1yp=J$U+i5^+3 z%v_MT->qEwxEJ9k%(P1plZZ>2*qii-aBcbl0nD3QPjWvjrq#}G(pd)+;<+^n@t z!gv^(WT^d0eG z@?%|>L6}B~^QJI0wfYD9&N0*PlBn>J@ejnDI6OmJ7_~;Pl9##>*Ts?GgOQvY#THJh zD~rNJmdFs4lnY}nmR`o6KXJExfg5FjK<8NQ{vUzC7O%=8C`y}N1!051IS0y11;4aI z(RPMqPeA0n#`(6fW1pmqT60j)tXw}bM5i_hyCLcmJUdATc`&C{hMd&ZCN!O5`Dm&r zTO9nFembX3yV9se@Z4J<;O%aI_WoKgh>?6D@a}|_yg*`s9dq*o0nMnn4O8+g=Z_K< zj%>7}L$<>@23&eElOp1ronEFN%#A|dnVb(7lCN!}Lrj80bV$#oOa}y|t{i(enEp6T zaCFoH1Em~Q)dwkeCTT4(ajL4y<1QcurK)ruQ}hY`3m3jzdn~HV5chry8Ot zTgsdBy0#~c9|j{~-Y$RRz9aW}GWrk()V3H6ap>Y@o5wGissDgWw%9hDUL(20^$ zUaKQ%il)z+smyZOKM@g_l<15YpG(mhd)~`2wc?Hnk&qSJMJ$N9?;Ef?FtQHa<_Ied66r(nduru4FHMf;#9>}s5x^MPv}zasL?lz&fIT1@ zUfNe6T-aO-&L@UeI&lFb&2tTZT79W#p+F7lIgV>5wu zccds#7YCIl*Jy^7P$F4_>$G&NCSig(f1r6WAk2^|tVKbp)WGYr)Jeo(e_zB-@pFomvZ4=OV>pIe6^yhPYieKxnL4ft~96Lsa zp&w{2S!k`871#_x#o ztud0+q$2I8S`N-XAv~h$aMFxmq){H|pxx5? zys&U>&M{ln7>t#kP41i2@IGBM(k^W)Any}%;&%qP5sL38TZ;}|^KyLO7?Z57eohkM zBfD*aP_Q$w5)WV^?SCN1oS*x#pODy{-v2BfNQQJcqhaP?+rp98d0zQK&Yi*;c_TVVcuI#B2QsH{#$ryNK~=x=}w5nBBd-o%GqBDjqygYQRH)WHK` zjawg%BO8(wGJTYxO&D+*K0``^$L1OH$2}U-vuBaa^i;l)@4pYm8jTLQqZMX3#M!gM zs^Xn;pWx`MU09beQMjNiqQ3Z8f)BQuk2>4y&hPZIqN{_AY3P7k`mbKAH^$xx-*m!rC7?uMr=xOz|(NTkVu<|Tp?a8D`SpWrE5XDH&Fyrb25R`(k7}*bG z)m2?D51f1c1l+?179AC9AAwz<-TP69c%6_0byA8y{j+CE)I&>mHm~Q+v90eTXGs77 zci+6OulKWuwFbf4KM3lWFL^QKktNrPiEQte``y=vs@K+Ost$*i?ze;d=OBXJa~=FER?)t+ z{&`)u1MmM5Rd1tS0aM{?z35eUD8C+~vfow~OAHCuv|=AP+2L=mnV0cdzSFZrT+HWK z`gn2M_4=GZF6W|w25mnsyW1%CuWuGaf!FepdQ9BKJGobjvT|BL&({2!jUO$o2ORmo zH+rl?YIfTsHqeUg$cb!(Ytp0IsXg*}1SGo>J97K{l#R7bUSx|Tml#z(OG;OvQdz*b zw=}H@?6jtDwbH`b<*6HJ&SoO{W^u3Dg`B!2pyy`pIw_-x4T*9V%c4nXz&p|R7coYO zPh7=AV9!ldTLa?Mk&TM=;&cui!vD0uKTWS1+n`XoZG8eYyJ&tq&dV`;>oJEtnmbupzJl>w z*3>_~u|m_*pslcJ0$({H@?>8}$)qf=Ulbm!`(${|J3gr?yH(HmRBKqcXI#cEfomH^ z!kL=pc}_cfA&hU9a&Yp@o7?{;)7q0+FK+&Sjua(jMESWti#5iITm!6ve;6BYOn@YOta0>C|$7*K|1bCSJbxz{ArLs`!*}5<28R9X3cUez<}3 zr^CTf#Vrq7$i_CHf>z3scRj>&mbK)kf79WRxpM=^s=m2=_}J;B8pDr&#roZUVgg#w z1u15^L*9cTl%leVr@R%Z8O`vU^m_k+P5Iy(wzAc+#O$3lco`8# zt_zY`m4(;RHD$y41e0b>hq-iB3F|&A_p8NO^J-#<3+XM_-n;)k%8~E8Zg!5P4AgJ8 zOuAjh9WoIy4zqpdH`gnMtlUL0n(QYTyT*c4DBu5m{|o}8p-nscyXf^>#iGQB*v;8gB$#M@KdiD0tgTqa0__i$m&$nE}2a^5!NZ!6{ixfsi??0da|2>cwvnI5E2GajMgGJ7{lMl$+r@nU0 zvsc90N8!L#G;M@-TQ&@HEB}&JRFDeS$=gN)?{Xj5gF{}`%CJiaD(i}kY|W0{>dbC2!Sx@_7}ffrPj0%E)tx} z2PjF?h*Cx1!}X{mBh)6;mbNX3)l1m8-PNXvt^w=(o{?$D0}u8pB7w2j6woSUKs(6D zklR5nm;T3&ZHlb>mnJIU1f+OQSp2s8mAFOF_pK5~qV}PJ5h$0$%H3`uk_>W#ae3IN7I)_yG&GDpU>aW9J=Y zXLu$6f?UI(8NBZJNrTi)SqC;!4>pnL1rhNHP((mo6IQXXJe#XA* z%j9+w>g)JIuIt^fvGrM>aw2H_$1zYA(-}>r+?o|o8$Lv~+blFFRKneL6~o`^|25w@ za+>v5q0@>(iFx89w0($LGhy&JnH+|tIn$dgN_ocIhnuCnwbeV7x zs3}>z>XVS_#u+J=!-nvD(t)7BLN9*g@O5qr*u!(v+_|H%8nLMO5ZQt>w>2{h z?L%QyR21UlP3Nb7MhNbgjq$9myO9{*hx?@9{tW)-r{N#2nRa^b67a8^{RK@b1$dXk zOBJ~$kgj(vfotzLBQYm)KYw~}4-#lVUOClQ33+ zgwFMMhAp`%hX=D3;2v1oNKBhEFOBNt{E?YwfDr>r^PEs*zo1A&@^C6>qODKn-6HlQwt;h}7+e7)Rifc_um&abBW(^HX<`s>(q6v{B3&IxFG`n5r z!^6PPB8)_UQG8WEFJU1RU+5SA4ac;=Nl2tBO=j0rLOX(@EDaqav9N-622~mx@YH)n4jVXV8|iq{<@;-v_1P)oaBHs+N{j&pKGl6%K2#q%df9(qQOc zdaBEK(mwW>K-5$%*>UH8up~BXDN|#aE2mCWEa!?1`k*n2Qmw(V1^Q}zu=Fq)9xPJI zJyJ38Y9!K-2|Rm=Ai9 zRs-4f?6l>}$y9f@ifW_@fhE#ckJ^saKUu{Rs0-|C2Xap&Q?GOEO{zFRwFf(`t4(~l zz4O6hv-pQ@4Zn!A+;%D|9t}|H8QP-fVu-Gu0s~`%D8^S3gvUqb&H`*>g8u6XQ^)Y& zXyDo^{~l5h?o-wEI)!z;S)BgSx|CLmBr$%YMOak>TF-Dka*+_90ew-lmeF>NgjsT& zD%v?A|EK9T1lLy2$#yJa_KX-itd#p6lExEN2L3s@!!XRnXLu6KAQL)$H_ceO>p|N_ z5JSr3AOF%I;g)8y7IebA&ZcSQuu{cg&3e+mWjfrYItXFmVNNmZvYf@@2~VZeorm>1+t~1Z0mP-K1Wi?NarPePq0Fbf}}ktHp;!hM7GO)2++G= z1^d~AKyCdMHLMvzlboP1zgVHPpp!`0-I`X#->;g~YR_$!XLP0#ko$7{V66vHgHDuy zACA*8Vdg)~T`e16pOhiKP$hCzm=$^Jl*ObjH54x!J`@uR=D@j}Gc)s&MFW0WF6#pSh873>ZAU?sABBzNMSpT7-wuJ1$S@_9-;1u!m4L{YHOk? zzzh5k)0+!wrY=8{`JO9H3~HH;E`Yfl?3pN34a>*QI6LMs8|s@!X8y#FW1eyF8=h0wM4sA@>|3;OW{XKu=27be2Hz)6Z8b{^;myYT@PCVow?tN% zqm^Z!jp7pDXzrjVlu7I6>EM65^L%_gd^z=g$~P(3gW;Dha3nPoH^6kD2{FHjsIYjzu2HcA1S~U41)rQF)~9dXQI^Bda!fZ^(~ApfD1{Z(47-sC zYJ5rYUPKY4dF@p39@{DS$JAL;c;a?MU=2jj;KWY=EF{I2s9_^Gp!_*dX?gIGT0anq){9NP$U-6nLO}M*uPD@p-6Dnk5iB^+Aah5mWb9n< zjMzjENeJ&b=l? zf6e-A2kKMs=dC2xGoV}WB}D!Wa6rfDC|fW^3YGn_lz$N+4mYYoh|Zlf24Y_n zwQ597-qJYm&z)MMLrN{D`+*(pdfo$6O{BkDR*+cP8X$0G;3zA%uuq|#Wbu>~q zBIX$}_jd`zF8k_PnxFil#=(m6Y(xkdqn9)-(HtFmM%lin87%;fvO9knw#6cIR#A)$pM=vixDeKK#=FMh8u5K$ zY-;@hnJgMm`6Z36-C<|@J+P1#OOk}8-O7ks0-4;qd#7XAeL!dEAte;M+T+Nxx7IH9 zdwC5=(`buVh!+3C7bbrVJ^V$`_=V2{Rx((fko)oTC?w&mmY&mlZ$;zi1{BVbjF)_u zHlD^t-?Qw;eOk`@=Y-@NmB?us=X@lK`D|^Vw>6i?ZdjE0P`DVCH}$*hj5Lgt(aO zz{VZ5c#h513)s&9VxXZ5mv8JL&z^NigUc$Gd#hoF&nklyB@U*QD}=ay6g|Y)gJVe6 zh6>C{TXi3?4qd;3Kzx|dazls{=nkXd<;KWCld4oV!j^78VZ4%T9L0aUCNKd%O5X{3z%y9XENd~OsP&h zB~_)il|jaxL)sPMWERdrqB|D^G8ZorAYG$@zvMO@zYvWz&pY;6DRn&M)w&19gP6{J zPKC|N3)=sL#gJ0$K0so%=D2XO=n(sIIh6YL;Wu-z@Y+5{m;WFqn@7OGgOww3do^;a zm;Jy-D0Gj@NM27b&1@POLkgSK@Nuu?(pn|ZV{kqt`B^L*tu+m9xa!^K3olF01c=xf zxFRp5$!pO-3YBb!kZk1N2NuNeVGStPOOvL2kf7F%;SV{j1JymKqr&P67!U!4m*tfo zjL#FRoVJMt&r>s`+@9fNrs+ir2cE+C86X8ra`pxNJpSlMa6;Wp$4R+gN9W%~5B)X* z=;`D2FQXfWtkv*H-8oLVWAwTpr@t0h1)Lro?-HbHPlEFeuj7o=-1aS}y_C(vTIC?; zntVWqBE2s($5;Q1g@0_`>djJ+XG@6%C%T=3(o@5=#5CJ!lPuST&587(6I#kY5@eYY z*gqJIK5$CV&`7RAT@J$mGY6UOB)=M5?>P_PkO`Ml6yz?ZvZ%ut*>Lo#Vl*>%PGM{# zB^<1r@@Nj^x8m7z54}wFE{IX|ZEA#RaRI66wzykf`stdAFoi+-sW=ku1Y5?GIQvX4 z+f+5mvM&cFH?$M67()i?dfS^rjw4*NnZ4t_(-&f+S?&7N(O&+A_j%QW+~>C9`9>^T zOG>ngQ@M*yECzFy$K#G`Z)c#c9^D0_cm@Y_7 z4$MvMIl89cXkf?c%|EiZ`>mvRFaORU%^*V~pJnI~BT6*W>boj02a^`F?PdhTxS!Ew zba6W~4zeb@ktNGyn&_QUKUhO;IIXig3Y$9)DAmBq zK9HKM6!F+GFICYtftiV!2j2%Iq7-LL!v~{bumP0gAB`{*NHA-k*)hPezi(%yQ5{vQ zu@_uW3FluHvd`eNIh^~sQmPN7;^Dek)ezu({fX$D;d?j;-9f0f zL_h8i{XTy~NpfrECcVP5$U(?d%8BR+nCrUrJmcx$<-yl!&C&-}&7kdxT6t%dU~!^f z2qslxs>J?r!mYjgF0nhks`HwEup`^P-_ybg>L>wA|36e8UqLCa-rT3OMz+75xSrmk zz~JV`>*g)!3^DX$oLC#zE!5tzF6eA)$#|IZV9(s}Xag7yIXLZoO?k3pz1*sA!uT}4 zCEGugppS|NGnT=i;(u|*HEi~}zo-o-V?B>AqfidbFP`3a`r9j;;5fDnR%Ozj=L;j? zmfQ_TrhD45g*pzsJ$8IvZ2RT=Qa1s0%-WS@1`F>f$%Bo@EF_{ic^-&PFAt!0K0~Vj zpgKT!LhI|xh8Nf&x$`UWR9kUL$}MLo zaeOh;=K!kgBa}J_n<7htqE!mHzM_utPabPo%V9+t&BmoAB)$-X1Hi(s z8{_20KYbc-|C8u{*Puv?m5jVW1pJfE0!a(hVyNMVB(e$zN5I4thLfH!@4&_-7pj9z zY&Vqj`wX1_l2VGdJ1+*q)sgmCG0VXG}DTIdIoV?OT>H-2BPHYQO=Nt{0ov2L*Da~QgtQBss_ zwt;#Z=S(Hf1pm4hM>ngfk@z@jy5jxr=_G{druvw2!SBvBL|EvMnSx8L>Nx2jXtFHM zUgB@%;8pUXNmX8(SCj_MuiLOdL*GefN&P)M6Vqd5mCMkfZ9^`@569AGHX}ZXsKtbU z*rY03B8NvPN7lN?!K^lY3`|$XeM1^$(?(oBzvZVzMU4(kRkf}X9_q1s-B5Sk2WoW; z<-ZL`kQhucMLTIwgcD3e z;(Pt*B71t~Uu}E7{P8TO`Iy3I9|D;a83f32SRR9|cD{{t^n5EqXX8RiE_rG&`e6$e z#zC*YFS){hI4EbgH83<4`jm966V?Z^fobC8AW^+QGQ8E<+LpiJ-{PnSG-c%!mU{ z@LgRVFcb8>NKFTx?GaMx>!b=!<=gEejxWfaT9Tq(Z@+Aj3-M|_X8n{POYS*_p!(E! zV02&~t*-(`8!^GKkmK#;G0lg%h(`4eiMqjlOCC9b9)-tCM3O%i(jCsojv15>8i8e; zorDA#xG5}+8VRVuLBEk7+-1x=)J-Dc#yacYmQS4 z@=N`~Ch^mzWXXwfis}@03L`Ag7y|S?3V56txxWcIBA%0qBHD7F{toO989zSMl4=H3 zN3jx#adCc`H0$F05l;@>Vg+=Cwy$%&4tG|ktZc{*Dy~?O>IJ?BsMEZSIHmy3v%=A2 z^oQ`e7B4(D|X2;X==Msa?tn^v1qeQD#U_cxWTYDGVdwV~b zzjaFJcq(}IwMRdyvIw5x-3n$AYp|5TmTnI<6nG^c)r)*)0pAWa7%2%Vr+pI9NN8{T z=253 zDR%U_Uj8mIL07$7NGsPsD)@0BeG$( z@H5&CMU7o2@@qWhU12KxI(jCua_W+pBzAC5%%+= zcXQEdPSP8N`}-#^4V>ezVARtDB|-c6J2ITJNw--UDNwie-OstP`6;1mpwO zN#y8f94E) z(>ZMSIb#8%qPxz#MW+c%tbGbY{tU*E^K$Louq0!Rq!6HG&$OC?lewK^&0`kS(yG?i zkSenL4C4*ITZN3$tntp8MwUmC$(g*|xQ@&?>G;K(9@J>>@~})H*)dcYP_1d?$ePli_v--;4*`mvq9ID`%(RjBb%~BZ zc<%=ViZC#l-ncGP90LNCm-8kKmr9-hfx7)OoF-p?T$EZZy?E`Lk~=e$D{2^A!uDA+IK;jL!1fj7!SE&6lTdubSI}x31X9;RJ&^e!>bY zofV$|+H+w*fFP!)#fDgtTT6x{JV-5e;~@GWs^jj4{*5brFM=e@sP={EPO!Xx1c4s8 zH;e8YvXx!|)Dj((Xp8J~mrIAX@WRi?B{Tb_M%7=b=C$JV3v~5j-ud1>7gl$ohw)F zjwLf2hCk9=v$?1Dg+*KhJiU7N7fHl@`DM)6C*{u`K7>vMj{MKZ&(!lEBk-h8d^TS_ zLwfs7pW7Bbo`v1(i@ri*kHwfgy*c-Vj=WpN>D zU85Z;z84~Zh%xCcu)YDXBlGkN$j94PURK7(kzZX_gD=48j--rTw5@ds5kdUWk~-)j zF(C)3b(R+u!+?pA&?YUKefz0qpDw&Rj!fb6C9Cr~|B%mDQV?a+exI8jEU8oWG$;K* ztJULm2Yd0eCn_Z(=~E}{F`HLe0F*z$Ad--Z=QVyM+n^L|%3@pv6#&~@f@uqSeK+JU zrVR7kjky1d0Jd`-*#Htb^8l0SjjobZt6n$$n77V)BXs|4u_W z?2Zts90*7PtjIB8|MmVL80x(c5k0ObYt(<>FzPos3{=##m6AC5)#0Ec}xy(NtQU}w287^*( zx&CsSs;sTrM5g9jUBK4&%ywI8O8s;6A6>$56qA>ur;Gb^``7fIOQa^K1NL|S2Xwl_ znendl;J+`a`RaZ9%EH-Pq|y172W#lqyVf6C@xA>@cI(=1V8zz-Fm|_N&35@J+CS(A z&!HdLrOY73@^T~4Ip)ty!%I&6zQeJwa~m?y0Du70$WX^uPSWbHwEhA<<~SrU`JGsZ zhiSV5f9^?YdSSr15esdW9Si|f0LUViYjf~~q_aM_J@3$>5hd%U5vAB}eclQ#n6gBv zA;MV>>4yk~0$R%5-prbR>yMj8MHIdho?TO!@e=PL^}7unG&V_HBh%Az2vGTIHd^i0 z+A1r^5Q2*)?m?6L(8bzseJKlo)Oyw0;Ja$EXUR%S7jt86*9fonY9Y_I3Vt=BU$kF| zH8pasz7_v`815*06o{l6m=tIrw4{D#h-wv6g#$mC8<+S(&5b=6t^+{ZBWOVC===VC z-F*I$4LBf`h-MoCl+#WH*{&BzLNf{h61cBHT@4o3GqU;REc8Etq{F6x+?;D?3HL{_ zqgP`&Ff-DDRMYp&Y0Yz`twJCG#^Mqv60LIwOdnvTEh2 ze<%00`9{UBfqPNYRf{Afj;|9y;piay4UINMiU!=n=8;7(-))0!9gv2plDd3hvr_$cMpA^1{t1|C%PJ#M<7wSI@{ojbP9(Y*Ba!l&U zd3IiA`JGas6Ki8Ajo^w~DMwer&DTm|z#reqMxKO{Qlp4&V?KccO#A?(wB?x8u1Rqw zr!F)g?X`}4Z_sKQ>NV^l%k&pz^Y0m?z3xkn5yS<>3vf z+-p0SSD+qMfn7yi(QV(~x5>E|GA2`eA~i=k&(1d1rAD39?WfZpCJW;R0_`NkYh^C%te(dH_&g zA@uKX;Op&aouyp18`78WFLq{Yoe!e!Z`h`2;^9H8C}@EV3oq6>1W>>h8>6MvbU>z1 zvT=bib(e2u>FKsdmdTIr#YO+=QuiSSl4{*HY91@CLEyBk;DFmiu$lfPc?YUE#=mOp zeHb3o{HfYtzCRCKRlk3qa*yV0yN3q03Avzmzo~5qYG!94b=5N$e&;FL1DcMUhMVSy zB`%QNJ#A29BfbNC-$$zoCCJyuFH7!Yf>7G%V~t!okx4Jh$Zw}&@QZ(?|m(i#IJC#2r(bpe$Wg2vV3LMq)zcBfzSnO2!p{yww=++w<$#3IV?@EA& zfwEEfc7t#235Kd?pyjm9Jf#whw?j5v43`kvOinsC>TflAD7O`Mg8D2BgNk^~EW^Ke zr8_jXKOqhRKvC@B?uxeogU!)E9xXVUGcXw9NM z3((~c)mqcYEaU72>PJ={gmT2JIlwX(TA3E?&nW-YH$=Nu;Z4ZL&)U zp@Kz?0_sksKI=|+BJ?&!i!&1n49_Z*Ib#rC-OD080?j-u8BQ4kjT|r{Ctb6@MAiZE z5}Vb#?fc_&`|gj2CLPedmu+RrU$r)ujx}eYPVI$%)`+g8@SNIt(YqofTVCq4Xf>b> zVS4>i8i`AiOIzaVOsQM^BkuwYwuf+B=mwCoB2Mz`xkjevgmu#H?mL(DZvR~sjDVSo ze?&AJ!6cWi80H!Cs=C%sSC`aN_(+SHL`49v2&aJu^(2gL_16#1!tWX8t5Wv>O76cy zSghFcm^b7Ot3$)i(Xht{@J`;G75(qWNzp|klMn>hcA@}XHUW=D`PtTHaVbF@@tXst zkO&NWB-u13wzzO@Al4c>@qAV zgp~e65yq%uKC1AgHNhlW3V?F@$FPM2@08`WElCKUP03a)0j=*(Dxt|c z?EuyKfG#)wc~`xK%NCjntJ1|@twB{Iy&aP%0>V%HK~N_h(880C7Y1I+qXT05cHA_| z0W}ax2r*fFpVNkn2rnR>=S;EztLOANO^CZQXhzfmd=U}Ke)n_8GaRO}D#@j@+&(n( zwRlvS(VIjD4n@II`;5{WF!!8iC#q@}4W~(wC$?f^B7uWP@}v-<*x`mfU>8%H=+DG0 zxwrlfM_7bBQ~=e&t9MK&*wkp87mRTyvD{iG6A@nUuxG^tp1i~9NCs?0tm@Lp7)PF? zHjEfUebm~@A%5jT=(KOCO*XP+6Fg36QvDSU4vveB%-irxCQ<&s+O>^2l{!ee6iY+H zKsSfd`Y$(arYUu)(xYztU|S}`k=zytsSh>q zUs?dbLiJtrmsF-zm44zgVr|WLXiz7tyX6?rdF_exVKeaD%moXIef2cBvPM#>>i=k< zAhwdB*EzL$ik_4Knx)lC?_(UE`UG%#9^`MG@+gM#i(Ik!SMoEtEYO&$kKY*Q-uCxT z9oUNpG3b66exGI2|Cbp3bM65;iovkxqSg0>E{clZV5=F~TH5rGMNC^pmR8Q#j+H)G zg$mS=$6-)0bWD^<{R#VhqS{5 z3LAipL^Y{rbHMbA>ou*0i{h;t>xybo-|W$*fDM&3eI!kqB+~Kg7p~5vX69?A4DElpWHtGq~B?#OLzg z&;pDq`5oX%JCrRujK2Zw))BhN{+zjV4Gv=JSE;K8NIy+c1(16dPb6Bk-_n_rb8f2+ zhqM6gWMG3R`9xbsWztWK#YJO{SI{J>sjdBVqCO^AsUMgHqP6gW``$U00BR@P`})be>^& z|Dtg)$FeB!>;;pHhr@xUeKz*D2ilG>-TQNY=e5Wj;`a5zi59*JNFx_~c+ z^5;UN^{Un;^RulZ}X z7GMHlmQT)+#u3ZmF46dkdsARTkcz5=I@ZVsnEOz;4i_{eD?Yt(sTP1_Ja;^kT9ej~ zRbQo6i9GEO7QTG+UC*od`0Z5FG!GdFfExOZYdH~M>qEl(JM#ve~YWx5I|LDx;6n30yq*(DT>Ub_Vt~lXKbYy>N2=f+cwbfka-($Tmo2~Z; zfnfd|v&v6iHB&`Z#=T^e8G9FkXjvaWS>dF@1F~)Imxt-DJpPmA-G`prV;y@y_;+DL zOwK}x)mh|X?%4(;UZ-6j(<=e7pn|;>d=;ue>n|xGL&<(gz)U;C8+dp`w?+{LBB0r( z6bnBN!5U2tQ@P;3U;QqpEZKkb&Arb&pyIt6ZAOt5eU$~JW2Q9=oWa588s9g*G(4*J z?6brXU0;_suw_mU^2XvW|iW^PQ`hfH(Ng+OMuStB84B-(9sKj}3#%L^TzTpEk ztn2-0vV+A=XSq3=PiHr@*_nhLi3s!jy$~w!^MCxX(&r`+4eVI(gaP|h`6z;<5?!N- zCk+cwO*>xdL4TX9bZ`M7JO7FuzS9=Z+~+sBXD!$g;(AxVYs(`ApG<$i zELr-($^&+>@AS!l7V4YCc_Dp63LDN>fs6_AZTPFlEC9_|v_l;cVl`uX)meBZ#L1{S zZA;xV;oQU&#Eakr+6C@rPTcg0Xaal^+v^rmQeroKdC2Npi~3WEnre!vnhDvd3F~6T zFzZY6;dv1%OSqoTFs(c515*7*vG(>*1jIPl;9V1n-eRi4{jed)cavMKFgdysB_{F8 zs~anJY`E9xbe7WZWz~i=xZ&8Oj#tHE771#n?iK9IGxkj84U;1|AK%xl!v9kWYNse) z9UA|zrJFnBP(CksQCswnNZR?X=l0(6=i2LZ$1?xxBJi9B-yvK3_m0Roc;BQMti%S% zWwerYbrYS$C0p1r4=Pflkb(*&vX|J;R)kyRb<5a($T13Ff(>JYGAKm2aCqP%rS^qn;bAP_19HzevI+CXPh~D_Zt;|+pRWG6_iac? ziyX06SRpJL5diNgE@5uC2KTtAO|<~)C5+h0a78WFFeqe@t6lZiGbn$EB$1|Cwm zCW@NKR4|Rull^4=*Rn_nd!1ax*|ao%ksVW`!$W(^&a9CqV1>L-%91X3Pfj5aQ4LeF z99YhTcarp9wZOq7ld*X;;yBpP4#{J>@B}wUql}X7jUk36*|X3fX^Fw^6wSym;8Chb zv8fb$c36Mk2{v6s*@k4FydlefZq=(hQUCcPdXhT4GL36PsE^BP@!n32PU{*l8l|-a zxl9=w5<5zwT(JR`x=ATIKZbHEK27d011^=#NYh0_mq<>#tkyr%B=8?2@s!@oHb(Pj z?S`FQ1+(WKf1|<6Di_=quaIwg_*(CUIetV3z-LaEOJI^#cpKU&R4wToDnt6K#~(6~ZAm~T=^ zjX3RuNY|*yrUNO|1WXKIPwar}pZVjPjiU-P=cP3^#`fYs+1@`^tEePvo8F1*htR{w z%5u|Esj=ETJ(8D2xn>O-*?NF-m;vuh>*#HsF_0<>)QF>V(OSymEc+4{m=we#-u6YC zH=U^G=}I__85v4gKdbLmXZS~l_IhlTRh8QCUJdA%W4%s`mYvCUl$LLp1ePquiTNEN z>8}DE(UN-$>BZSRcKko}qIKjIn_HVhKLUEF=3PpK$o8R*-gPpdgSM1~!b(DzfdwT- z{Oi;4X`}p7Ro9=VP1^>md;#dvH`fDD@Pq~I_%6*N1aC#@2tvRQx?J{FfPuZh{YQ{K zI35dN03p*Us5fs91fcXsn~L`?1iXo(>*Sh|3PAnRJ?S3sT>w_Fi@)b$Z51FO-5Cje zOH;cs(pnA|$+3J!9W2RbOL|Asqkhp}07xZfoggaK-!$ z{hwm#+ra>~2^Mq6#~sb*@E;@(YY#g&7JWTjfTLF~c z{vU5|85P$OvRybdvJHR;O_1Y!5xwi+}$C#yL*B=!5tFZ9R{Df$vNk}_kL^L zzhAHUF*Dn`dv{k?JylQj|2|=mu&Bi4)&^4jc((Tw@_ansS@ZWS0SM7_*Q4EPd{maa zzf12?_=84na&o#-9s>~R*UJm;sSBLkYM|1g{=c5rKFEgs?yiiHL2mT<(*KbV)LGNh z`8PIjdcQXq#=Z3Q{|VT-0dy)jt&6Ja+LN=4w(c<)q>&}qq471XJmiY1m5f!wp{Dr* zY*AAH{(eKO&cww!bGU$Qd*_sJ>os&@IG)jk^b$%kR{Bn%k|J+DO#uI85&Gv7ll-M& zxo+f)W5C-@=F34m`x$jZl|~spsFEK3y1nOEJ3wD7jpK`O1?CYrIUb@=vz~7PMGLXf2u5*|0xT2Ug%dV!?B zq`AefW~}`))^5rLE4p8~m&NDW6ey1@1I(0;!&ei$E6kiPOqJf;dbi!RLcxWR^A1TJ z=@DzX?f$|;&C`eA@2bUwzrEK5w@L*{5anG6cxIG+rRBA}TlWRNw|;H_)IM+S&Sc&> zWv}lU%}PsLfA6q5yS>~9qgL<0iNRgk?a(t_D)q*IyYctio3W;Q|EqKGjsF{vAA|_P z$LqKsZeW+L{cU?>(jv(A8b*-(OKj~aHnaBe=@E~YTzF|doJ#jz@y88Dx2-`XO+N|D zMF>^BEtGH?K;MzrDV_krfrFOW?c9irnjPYB>BlcYpzbOAvVfyk-+(A~%ra>J_ak!P>7td@!pc$YqDe6&0Z0PDGZ0bCFn|T694bl~^9F zEl7s-&7Ldti&NSUyp@=+NN;uiR8rpF966~~>IqB&hLIBOQax|6mHuT#;U@spb>BDY zfbM)`JAB)CdBdo(HDfq|wG$e7FeLbVfeZTKzLG|?@YL>kMk-aFEnhT^rK8df#6`RT zaa}0kv7V6)V(rPR1G;O8CJjZ8bLg>4*`L1@8+cRpe-nQAZ?N$bOto=I-ak6-&am-e9-(2%u{6q*U|Mnk7+zJp5XKI8 zZwcM?q&tW{cUHqtHx&*|kI91H>>B-#{SVt#j8Px4<6SEJ%1xw$3cS zhFM*I1#0%E@H`H^_?bX8A2(TSOs-NY9-{&5z2m&g_dgIe{_eTIvQpFbtXOT^5ya>rv;cyZ$xXtYw>{SMp3 zU2us^(|2FDH7Q|bl=bP~!i-2NHqLe@Unt>vgp{+SeLYqX?& z)8S!7^eOYNG{z=hYv2NckY+hj4*=*-T~ijU*kL4aHDf!I?eT$LIe@f`q_FMr2^aQ- zFkx`>mQ~h4ZyI4hp+LN%>ZtCaWa%bf%*zXBJQq*gotK|945{9@6dQlmM^r;4j_j)( zeo5UP>LR@7$zQ4e3S?;q`OOcW)_Gx^jl(HuFX_C}Mt%SU!clolrY~F=%-oV52`?>% zG<`5q(`#n$#LgFD+N&P`OI8LTaGF{qb3REf<2QVM1%PQypASEuh)oE)UuWsVfIcC4jtBrDCs?l;8mauSlZ1pP1{@Bg@6H~#c6 zR2dDL$l`yaNUxw!3VB_f4Mi3767jo(Eh5PS?um__+K)~UvDP)!b19nrzHEgC`u*%X z3LDgZVETMQYIk{mP!J=b&9i0wXb5GpaKWBf~ z6${ksf_w@fx_$dB&Y>kAe~SG9=n50TvqyTdI7%^Ucqg^pbi3-5Yj&wB~%1DDPBa>{vK{ zX^Jxt;sh-zs)v^lcJQbpMaaU|Aix;kuRw{JE5FAH)|Val=mkszoG+#Yy{}^Ke!a17 zl8N^*X43gkyG5%Nx#vUkv6SOj>LtAjd}Lx}DeJWNLCqW{;LaH}0{)cB=cV(K(qsPi z(J-Ge=F2b5l0n=FU?#%i(5r9Ra1gtNS5(-@LFbR zA^t)?l14>isk1DzMtKs{mk-i87jm#3WPM=R=or$3}lunVZ*tJzDRgcQx?F%#CnT>cGDc|=mx=+661!FqT=o^x2 zLvj<5D~>E$lK62?!VkfG*1pVK#DQ9uWa*!OBAy z(RSBY53wl-7psko+F9P-hZ#DJ#<1Oig$ z)F^*25B33>A2*~OfL4AGvvMY)^{E=8CHS!-@Z-z%X|mvpnpk6>7hSIs;;9^~u&eaF zXX&u0PsNo%Vri}XRk{g{V6gu#dRPSDCib5xamxT)vQ{7fsmxDJE3y8Y&5B3R8{
      7*T4MJlQ?4yy)>!R4T9CiH62XpEo;)GiYxS_{5E!;jwoC_sVmuc5yzq(V z68FVw@N!%S#u56mX=jF1(mtBSsA~x8QW&@)TViP%!=g^>`Nk_(G~d7L*%Ip$Xwar~ z-I9F#g4&>ZSCa!zU&MoAvQD}_j|^~&IA&51_(9B=`?RkORpZO8nSfXdj%?%$33gd1 zyh6?wUz$K^F{>=qH1oYwLA5r+v<(uCCmQG_WdDim`A1*QzUPuOSM2Yn_@IIzCO0GT zTB8faZ6X=P@$0uNS3m8ECC+5q*LhJ{++D@~u0kczC3)(sYdVxs4pkg&h5!n-^>(95 z@Tu%)ouKN!K;oett)-Qr6VglLUpx+fz32FiKAL+!%);Koj$BYRicYKswKutskk|qX z=fr8FG~?T_x5JM>$^dnSzKFNL&tZ+8q1AbClM1N!b+Mx)O0CN6b*+zYR+>H%bn zC-M`41HZb3$}mWFlljHJhyZBwUG5_EJ(0;=Xia;OBOG2Y0`71ADCx7jI&1m}U7ynK z`0q16Ley~oF{Mm7Ejduogkv-U{vSvlvO}<8Baq{%7%l0dloxPL{v5@GLc!Ycp$aHG z-2te!C`4s$us5#Rb_)dfZTjUY!8;8dCDHBi(f1KK&c;Sc)>HA~!bFc|vSi`|tm^6& z@56h$bHya@xO3$vc=HsuD z&U9d4d~O<}#88R`I1{WSm+({a-vRn_>cc0y%q5aJpqs+9M6YP^GZ`@xzsnmLMMW*o z<|NCeQUb`7oma{ai7IvJp=!H-duogOZ+?Pm%x!5IDH z+kcX^m8G}A#-<2;Edof&nAAWXsDvJi#^3Bc*-=c}vLcfbvf1gs=qUe5>qL1-jG)7d zUQ_iDVxd@pV$CQ|=IXVE+8>2Boo$}~ORGW#;4!4MzFBX99kw?v(bP*F|25*^baXrI zbWz2%IIkcdsUT18St7J{$ol&lY*8OYm97MR3oA*<#JrjZRWnQ#*YP&-Lw&%GH@vo- z>xR}GKZ*&k&$mXH(O#bm9Yq|qxHZRzY5kxBeD31zt{+jQjoi&Ckwg}p_4>(?Z zv@!s;h-FB$ja?g4{on}Cw|;Zzf=+Q~W*=)?8e$7aW9We(A2Lt5kc`{%#)500Z-b(Y z6ISWXd}1dX!==4w^fJ;Sja^N7dZ@cvYD@so-OeSBU0a8P$G|IKttR%o;nm1kbmj2R z=uyL)(GLcKD9VlutTur;aPXr=ttddyMhq`+#aIb{CsH$6BM!(tfCM>Z!qDysxJij@mTf8kho({l3M^Jx%4+xYHTVvti8a- zm=M{;U-u1fS{Ij~2xjFoZO7FP0}JzP-}cu>AzFNaS`wL-ek=Tzh5@F0DhBKEnsPZo zrU^6S{$W$sX?$p?B3~}OGYk3o`w(~b#Dng1`-7+d_*_GYOd#&G>GH>tz%fcvQl~^% zZ)Jf^U>_9_=-VvjqPv;)C_V5fo-pt6$-^hgooha7IM( ze4jsOQPS1hdbX;uo$Uf%V!~ZR$@0AVz`;PMG-kzbl#$@0|%K((6Sp4pv15B3JdT`jJqiURYz80gHsstf5g%0?Q{ zP*F{!_KnC;$CHXwwioY3$vQ@p%4Q2RKS3kN%R08o7aTKM(3ofyOCt~H%hitl7Yoob zsHyx-CpY-n3v=12fhSQt+1LmeNr`js3sD{p5qo!;-~PUyN5_Eo9Jp^zd6jZITQXk$}o+{&Ht!6r0 znc+AVDkW{DO&()x#W?NeBsleBB|p}RV#mzMq%!*Aq|VBrMeP85(3QKaqt_Q!3!6GA z1+fTr4ZaAvZBdDt?UY-cocsX(@Twx)`Cb{_XE}3L;?%gm#y~x#g zuFlO6cr83T%^XN;W;gwA?ONNbN9Y~q>(%Jo~V1IWGKukwQZXP=<)SFmW1QP$EdHCc?XU*K^wAs!RW$*8VWda>CggPT4v+4Z%8 zx8A&8S~yk*RQZm^N1p$zBb-RX5WZQgolJ2mE9sHGwe7% zNn^Q9Y?ITG3E1@}N6*)o#Fede;PdBVR&5GcDAUms(ua*xpNCCFVK`9gpKu((?reKu zXG8D9O@?@Zy`~jg5ilnhPTnWk*;dY8p6niez#_nAEb}1PD{6P3fT30Jku)flZelut z&o=0@R=0vL4K2NF!QSpM6bFatmhHW6N-Ib%8pw}PKNk`&Xe-XQaa#pB0A}<>JI&k9 zysvF_L(x{zC$@2VAC^D)ji21{}fdwjH)5r*$)w?dcZr zM_5EeUjuf~QGO)PH6k&8 z3M@oFx-E0AsMyV~3TZL0<@d=a5@F&=JT>wbB+%;{!&e8EF$jf zM%f=zi=2DUZdF?$7de(ymk7u}3bQm)w~GFTlB2Rl#L8_ECe_v%ja=dEW}(d`J;rU!U|8khYuC<4Y7zGHd+0h(zk($H8Z76P94}38oS|Lk-sQt9lU!N2dwcn_Q`)AHCcA!W_3#o3 z=%Q`;--Rz1Taz482~wl+w>GEt z5RmI+jUNt?Ri`Do1#+$SI{_`|9FZy%bWXxb2${E_qlp`u)TNNQwfze5Jvp>j$(%4a z#av9|f18_;u*ar3Svx#0f8#W5IK(L0S0^LLsdZf6cIp^mrqV#^UC^#RzFR@8&=hu? z6h5=^jB36Ux8hfTBNNuV_`c!S_ZroXMkyCs6#qcCBwR4%#aOE}934Up#aW=0n3cG+ zM$If;r-tkTb@uW2JmHT0Q6Kb$6LzA@v6lHB1U;sUMoN&b{j_+8v|;av;$WILJ)}E` zwQs*wta*Mr-m*pCdo@#=gr*sYR%;eN>EE_| zsIcdMm}G2OD1e@(BL0llnNgi1zT`J^U( z5#cA(FdrOu7UWN&4K}qXiO!5IKIZ98;&=N+O&XTTOy9csu4zNxi02V?3Dxc>T(ZqR zt!K=?>b><5!sg5$s+%Ef^_lxu*hapRF2-klS+USGOrW!Z^UY{}{kz^>yixr&nfQ!i zs*A@o46YmaL^bN%nRNZpSdK*PL0=0d^KC0rLAZUYjux@OPq=Z)L;Dvz93p!y9(j84 zb!xXF#?(f;fz0L3F!9YoqT|y795N32v2TQylO}aIBvY8r#62+WVACn-|5joT8 zbFj-sva)3JL+0-2R^r_b*+H)2kJ@AO^6odn813Go3fxls!hJBh8)mPOO=_xXuR<@` zhn4270A5l!OJ&=)^a!Dl;9Pf4Myb0XL9@RF^36l{F54%>yaUg9EnN*w}24k zl(T2}z3a6Ee2=DjG8$2-ooIRYC@V#fBwb&pJmD*^-(Dqj4sfSl*DO z9Agdc>^sz~(z?@&EO7mBtjs}_KQt7V>8WchL*}!(YBqP-qCuLw)!=hKtJv*Jivv4h*dJFVWq&AXL;yx8q?FYAHL4b8olY#J55+VJs+xl-Oo^Q_I_XN= zQL=tcpPZSzQh<$0D3E|MD`y9b3e|BPKTtM4qN*)Yf@}G@Fj%F;t17ZtF@7G-1~)vg zH->aO9eV!DBa13u8_+G{^C7p5r#puq%;^rnA#bowmg7=e#G2qamkU{n_TpyJ!^XTC zg7FPUQW*(3%Lsi-D6q^mS2C%jl5sRCb=^>fhgZ>$SO;U-gKHHRcU! zwySd)Y5KZZTt@PHuVU8@aMPeJ1Q(tvF#O>=_v*R2N&l=dYK3jJv2klYPqUWvm{rhi zG@DK+p9rDmc54@YhJ6>1<&9J&4z1*9a3p)v*Bgpns~Ob-uK?&S%fzsBuNnL(i0m| zcS2%`#l+~TG7sKfR5{V*$QoLOuE(pl$^6Uz_V z^qc22ukj}V^ALY@@Zy?PtL-(2Bnb_p+{)8P$h+oqV-dLv@L`MbYOhXOm++7cm-*PX zr>dQKn;PUb?d+*)u1k6!^drMb*(q+IeVm>F`&&Bal%$mlbKv&pTPKO2;R*n4fb=#LiF1qlyjaj=HdN{BLre9-}T4!odBKN_84-vbfYCbGV9I`YaX0uaIYL;(V&t+naSi821S&iQJVKeIGh1#e;|70}0Gh(&?VdMAugr zeP9keZ}8BkUw_0vi>*Q)`ytSBwKSt2ywquohZ^*Y88Wb84JpQs{SD;Y;7P!d6{I0Lm6Ijw=Wqz!TqtKrc z0yKR#mP03b%nmCJXC)R$yl>*JyQ;luQbs$P3Z6lDRle?sR3DaJ5e`c^`l?VyflQ)> z5B!NeI$==Dil#!@8qSZZ99BF^It=^9c~mhXz|;y=5pkDPmWIyV$%o19rT z&{06d)V`^&!wsCP^>%)z-NrN$)ZTbag5WSeQ(HZ^V`oDu>^H{9B%_+`b|SjkpVNR} zYuHV*C$SI?^D(7xTD)F=zN>RYR(bj=Im3g)4B=*-Vd67HQ2~f7%MXt9Q*OKUFlt9=Y3VB^8BLEtH}aeBLHg^m1w!g#T^EjjIDFL5h7n|j8XH}viMi|jxjHAmrbVPicXEW{bdgx4Yk8j;kCtm{;NA0buQKZuV0H{^=Zqz>-er>XrNH~=&)iL$XUsFKQS}V2`l{Z4OaTH zh&4RvIDdF#V&k#Dpwk{>Ro4M4r0;p@g913jJalS8PMueV)46L}b1ZIH?8zh2GK{ve zP>7A_@jzLl+N5M-Cby(8f7P?Zm)IVUaq@Axk*_ZD%F!B(?b?5l4-xrDIz`3sy|p9h z{(vwdIwod@VBx|vFoppv))isqN@L(_$o_Cg%Vsj9hG$5!$Ql>Wje!lN+HInlRe?J8 zm2OQht{->A`gGP#056u2n=`fd5(<8~PgD8g*os!xtFiHG=2IGN9U8w3^F+6TEqPYU zViN8BL*1T_VHo`I%H8XIDcZRn^o0@OSPp`F+5*PVtcU*D&YDH^CoYbHEk9E7*!CF3 z-!)9xPR2H#hpmJFZjCR!aBIT8EJeKYj{Syk^ny|cQ-jVcg(TBZr; z-DJ9nVk?@=+xj!b;N4SAd}U z=&=w!;hk62Ry?0p8>2g4OCYX(`C-32!Png)KHi>7r;*W*&8TzL8Sf|Y?cEmIwHbTW zQl6?t*<$!|qsLCXa^TRXyY)ry1V%4wotWCl{ z`LiWAl+xkpw={;$>#hig3zCVB>mLuXR6PV(N09AF5juILNXP}%l0-V8}5OwmG`sqU5oz7D+x&6}3G-q$AU*5iW1- zn;g^9u1;bhg1Z87oPtf@6zotIpwXR%QCW!_Zj%FpK9KkK>=i&y!w;V?yr2?##ebC7 zIwncRGPPNtJr&n0Fk~;48lU}XUQwC)k*AXLxON8xqS{-~HXG^{eWJP~hb|^57q7x) zM3xPeV>>yXkXdic&-Wz}Ijnv=#(>5sLA_VfhAv4zCl_{A1%5j)rZ%uZC9w$ej+#() zSB)B>H~~urO)xorO_zf9ySzRvU%P@sDJrJs5O3m)w^y?E!Vxodt)x5tz7=s-+ptH6 z)veXs=Ft?@coDzb1;?M{sxnQ7%B6!&K^xb@S)XCism!T84XZi{@AnUZD~eNlogLK_ zXI~Jxt|h#xJmTQ`!1_HrCq}(l4nw!i;ZB}d1+6WLz|dIM7N|&6Z@S*jl*3AO=`o`c zeT7LQKuP+kQ?Mm&zS5HUg4LqML6}9l3-*@p7f!F zKPlx9KD!T4L1v;JgF-q51dZ2^dvpY-j4ur?pINV@N$=-&PuC6gd=f8~&TWuR^l>HW z@v%O#7}O@W5UqQ;9KF%8+CMz58YS~OoP1j;=~fj%MtXvHo+frR7lc@vC_;8J9~!bk z09O%NA?@IAMhL-bNq20br<2>@Z0{%2U#QcQ!Wmwsg~x=>y1BXe6byPoGSS+jf5Iq5 zQf~K^`S!~&Y&!Ww{w9_TgroRrdXHPDvhj1fnJje5PcMtQv{)V3enWl*VjOHnU)=7w z=gZSd2LoQdZ-}ow;OsFL)L_)31YDotfMyKBA89g4Js%G4eQ>y|8euubbWgHeqpf13 zhy(U}uh8B1g;HM`UOoEoewGa8&P8oy_!AvzND`CZRZ z1I(=^kVS59J>kRCD-iLw7|2%vlp|fkhu|Yji=TMoA1@5TE0Kud-#0nA|El}bb-lL$ zfZGE1Sg5Ea_EA*Y_s&KrbHHENwkQhwo0_aL)D5QdsmTn|0)6a|@eXO-_ja1ZHt8Gl zeBF_#ms8&)`E-bWL9NNlC32&!*H#Ne9x_J1DgE zua2b7H5sIAq6ivnhfCdp140_rTkwBdTyMm=X32T<=MB2!6JPWp{%yK)?mM%^QvK&6^OYAXhox zxQ7>1Q`UEK@^=BC3#9cBKnV^0E=1)radhrY;zyd})gdREUSranKnI0b^5eYi-{}9U zhg*AY;3(xjpz>ov&BbSmPFt!LD;d%Ia8k?WecX)ZkLG@>HL}O%@>_PB*JFNtB~;MZ z&>DvpymISj(32S{cj2R1Q;#o!@w(Y&U%&lb($T@cLh|n=LLOKD zr*{YR4jx0~^?%3y|ESsj*?8Ss6+_V=1X%a~oJ}B=_$;3LCS6b02YvCe(ErmT z`c7(^-Ws?pekiW&lNn}|OU8?SN6Lm}6sB4%n|+L2!*c2PUSvW<#w>6wCGFL<6$-7x zL?+;dP*|;`QGAQ>_hx6^6r~2mf9QdL!Aq`J*71xY!EW)yIw| zxztUecdU;dvM|8b&E4B>Pr-q=_(%oqh z0QcUq`%|3%=;8JUIK^CDq-O^@j!qV+lB{u^;ZKgZ>?^I7l9;i0Gci}LlTlfz;;m_g zp>w3Rq1^=CurWA{fb+e2r@9i+gzLC+2K`#%uFto0DW`t_RrJ2<6SfE%Dq?E;LjBQA zaarhImt10%Et~*^A}%IQtYLeFxD+~=%=#h$hm`c7oPNWZ1ChNU^ZXq475$2$%Ce`4 z3j%7NZ0h^%>dT%wJZo#-Hz$*;A4Q~<6Y?^U^DAm=h2I68cK@NO%bzJf9RnZD=qxj< zP|76HRZ;la_<;Y}n;Vd=(Sg1g3o%3Caw9vv`l7baW%W0*(P^QnEZn7+np8>{N~+48 z6jB~V@wA$c=lr6f@dBrIrb|JAOz&Dpllr4ma2s}x} z?ruA(LK&f7XY0bX!-4GI7xd#Z<{E}($c4e<@6v9LTAOG|1PyVgqreR;(l~e zBEPvB{725Vq~HPK(=5!sky9~sQr%01(nmE}Lz*of^W_YIvUmV0qzU!kdlHj=YeKnL zVpih(MhrwEMi)O@cAgaOQ_feKNm#b6E-VDT`!+|D>W&GcdvzupR8~ zS2<;NeDuJ{O#!3+p=D1zHsP`-xLf!f>C_{n?X-Mtzm!fwfKhsfz1SPo6o|=g%Mive zXn}oFPG5B_d$XFCEYS<^K8K}-hRV+MJ~j0`>SFBYQ2=OZ_p8!D{m(yxqg&bUXv){r zwKN6#@LZSkA6e}r=mGC8%tb2X9FU@dv}d2u0v_0x05mjEGeZ|`Q& ze`f^Qi{f&E0{S{ll=Tjl8F%PBb3ow8vCl|W!l`|oO6os>h@fudPr7B890PP9cA_~n z4P_p&AWhhylD!D@eq#{OfZ65m`g0YUN6UC2=EN$sQs6 zccA~+7J)-BWZJ9r^eL1sQ(3M1iF=~h9lB^3F~7=p7+UJDr_ZZi2ON3i1l5seYiv(+ zYVpo$_TL(C)Gw^2SX|z8(pRmYDDNPHW!2=;I$94dKS};m;V&9Bjew}Nql)F#<#ov?DiW? zuJv*dUdr3#oQonK1Pt>83%8(74WVd4*1EWK<>B&MBxf zy#aSE*>Ll*X00+6D_2g1%#J@S{KzFB)}Hq!F%@eprF81RKFbSyz!~k1it6gG z{nXuYX}(fETS7V3d??ANnw>;()GFw%iX~WUIu}s_cykIm)C5nTi&|WtplMv_DG(o$ zaQDH_Q*JCjp31&I^dw`K*0<_h+QvPtoF_xl^Hngpx9k6l1&|wAocrTTVp>j=LNP*l1`K@VeY5qBx|gd0@R;Gw7sQ&TQn%ly0j|$q6qygq#h=ee)=wSln#R zAC(dtXCdSD6zn2u=R2uB%+pKC=&M_-REsxXXMURqkCCAr>` zL0g+-v{*!1oRMw;xPAje6*r|VTY zcC*5VDRnLWI?(RT&T72g&Hmovr3zYZ)e%q4@z6uv^PcH23wFx7B@rvD-DG*FD1-0P znf3{Cb{yZ2Sel1P$tFHe$ds!rv9MQMa3xg8onuc4!wC~p)f0vHG;^4Zk{`FMrQ?dj(HlHgpk*wrce9696*OFI#rfMCw8O~|O zCs&QllVeHk7I2&3qsdN2TlS*U(b3+}WkmSSzU1@e;GD&Yl#)m8HYB3}Oh0_LN|Kh5 zU?iJ{CvFjC>udf;w=Qz^oNV?I%M1tI0Z&Sd%pt9bx~G}Chf9)wcp1xuXw}94qI+Q2 zjng$ci*KTtn#}CN6=GFN?|Jlm7rltV!n11|{lv8EJ`gnaarmQDNMT)Mn*qlvR z#LBm5?@zh$&LJU;$J~AI>Z1QA1i6n|Yz|AB_ZuE|lRa7!L<#whyyZLG?t*m%ImaWX zvT|Apu^#9Iiz&|Teoxr^CzyZd=4+<2!X6?(@oX0T{OTXY^V`q9v?jOgB9gjYs#PH| zv7Wei6$#aL&+6Rn7CIetTN_rQ4{1`SBV~Lm68A({9mW_P^LkB`58L1gefMRPB*ew( z;L9pM?Wd!FJ6>Cbr^h6nMmlVF53h%QTB7^IwnCbokPx2ood}|Qy26EM+Lh--nr|Xq+g>WPWAaJTp|He`qWZz9_~NgScDyyFp?t^WXD33 zp_!8s?$LK0+7DxsWxWjW=k&m~Cl1Kj9ezP~$o`t#s~y>8^N(BD4o6=7`O{CwK(582 zlRg7EkG%%bXvYz^V~Fe0MFoAjL4_u>%_8E@Qwak=4m5RCJ&Iia#)r{3XFm2e|1+U4 zczqCLH{xKxp}jDw5#?$i_)tQB=;y-(J2?_!d@Mt2WOG{CWv#xHnJr zyZVMm^sA3Xca5SW*(m&>7gO$p9$_Q?s7m$BhhHLZ&~_KAl;QpDw&KNl3ZIXDYEits zmfe&T+ibzUrj;p(W_-`XKxVab`LJ#j#mcsBVLdSYC(_2wg68HYHiZ!~e)6pt2sx^K zr*%)MhrDX#Q^hA40v^adwx4F##TX*i;p$;TMHl2aX)ZRDQJ^Dby>VildU3(SYVgQH zpI#OnQ3+pQ|K|WDD(Ym(Jm>N4*M9Q~%nJiCHXpC?39P4CT_qLBxbvkrZZ^EZ>P@)o z$tc-mb$W7#p`XooT2tAF^1C7M-I!=-=2GpSu{yS?vt>EjqVPtCz2^GvbwWW8NSWkw z`{tQKKGno%wu8^;>ciP$%c8rz?|mjvYlV@iC)eE;e9zTgp03-fs{-Pv=PQGR3ba19 zfqI|0!!DlN=SgsL%C|9>-L4SJ+p8mNLjLyO`|giLLYS*bUC+B4`p$Lc4tHbEqLS-* zM0MV|C$or>3`&nC;v&!CAwf|(j~7ePslko)UXA}O=Oip=fZ#_d_Me??_Yal8!zv6@ zMqu5^?`v<(8S4apdX9+M{vjZEb`mURl0+v>cyPWJQ6HE#W;X5~%{C>Qd3KP}yBN22 z?PyI(waP(dR=+o!QwnQc>h60dXcfPj&5Ly8>a%4ipT%{fw2W=RJAOlFyR+)P6iWGY zyQY<8^uW1$9zX$o>VTXM*^3Wanr&R~Y(HK}737j6$8MD&E_ujwU+WShLlguuVTA5< zt?_?K_*nO8lFrJ@a-sg#qcq0CCy2ZdM`A>~*+}XBh}~hHom-G34YSwW*YE6!Oian$ zBHx3u&^(`Eu3dY>=kycV*e4>Hsdc|L7gmWw7so4k8J%4k_me67)3(W^fw6r`%!SEp zmt_J%=92yIWfhlflU%vsh>{()=2xaq;5~xm?CQi-rvW;vD$W%?ny8y57nclUaPMRn zQHv0p%@Eoh&S*{@<$mbDSil}XfESC*&$2Mlfp+c z*JiJ-t~wmoFMS*r)HF~hQ^)J%5lZXE}vN9dfw(4qOwf_oRQ{>`wOhMu_C?j8R*M7{wf z5|;>jrWqit0_EM?{2w6F#7p`I$6TX%Nxj`z^L>G3&znb`YX^5K+K8+D7LuOI>*t+@ z^-fACJ*LCj%ckZ|U!A!sA_Hc@XJ`g5x1B0NI61>%iD-N*hU%Ab%BXp(;SZCKe%B zJ5M$dW0vtZIOX0=zC;G&ghd_u^)&Kq3wS>1Mn}9C_!=T`-z;3R6UDtvo_i=6^u4Ix z{l>>Bv`|3#RxHReVxq)9V_(a8J_<)_W@_PMMzu;^L7tN2|NUr^FEE#o8adK z!`MvU`7$}(Qj;1B*b}$vIqJE6L2aVi7Hb`Mz-i`ez+;bghf^z^H7+Zm?> zF3>Z}x7?xeA>*n?^#)fS(Ir*RXnj=UN!W$gLh*I6eAX*GzFsvC(}+40EvSE6Z*>z>*J$w6cwq3DzFD+hNy1Y%tvy}Qese3OViF>-*d+M< z*Z9J^0QK@EHuA~R33=Gv&j^sRrSYcuL@3q4ic$#*9^lrKV)Go&IRDvzi$}tL-%2x` z8={-oww`Eb4*pp>oJ2UVH$mSdOPU*?);MA2;9|S{s|8(9*JaV%ZZIr1@|&qC-GS} zM~$CqUMi-xz0EyQD9dKEbD4Ct8sXo8oWNE{NQ#{(DeynbCv+q7F zUAyFL>?iu8oK{zER`EmdM8()HvmS~NayI*-`8E8tGxGQE_r`!7x^T4IEBv3X@g^yC z`8u9z)O56g1!^0)+4=kZIUXs`)8qhz)PPMUiLpIueA%zYCxELyyr>MG@F_mNlGQYD zOB0&$cOFrU7X0ZfN<+upR^4ni9B=c(RpaBV|MNi1NYrfld3Z8qbiRy3mn{|%xDt7; zlKTGpJP(iy7$~Fwq$rj@VTZ{(fi9KOvt)(7QI+KQ9tQX|Z;$@|d1S?M{c< zfAsG>QXPRLc0w)!riYEM1)JG#(ir7W9Ju@%(<@W2EEgT7M3t?Ib=pZ?M@spx%Tyfv z?Uo48i#^w4`~9Ow^aa{%ef2=XUQ@fak8&fc3TjIEA-P2p#?WRFj0*VPS4}` z=dX+4?(#*fyKrYh!CPB6*9E`3vIE8-*}Fb;LGz-EDLQZ4yPJpk@L>|kB8a)lND(;s zJ&m^8!2PLw%Ke+!J;n^zV0o9wkwyVwvHZIs8Ah%Xtpop~qgJKEsz(>A+lFx5l`p7Yr57>ody-%S^rY&*lY|y$U#C*zw^0EV})M1#NFYE0!94_b_n--lyF+kyx8M-m-QBfu_ux)& zhu{vut%0e&pXdH&zP09^`oZeebahvqI72M*v|sU5dM##UbnR}^Z^+vW-YsaJ4`4HIHtiXiT?Vdh>9*qG_S|nS170i7OP68! zT%-cgJNBQIY+qRwBudL~{T_h8*493qe$-{E**O4I`+LgAEbjQ{@UVXLsv2^9WG5~I zItm0;&|vTPx@OxIfDypFLk1umz$3H#YfCi5bgEZ;1Nk55=Ci^-)Wk>aRdya1XEZY} zCcZZ)GXLo!#Y|wYs-5Yhwq(^ zfvfC<+~(KcSzBye+qK}v4QTfW?8F7G#9t39-s;-RK&K}kZB`&?{eUcLZ0zxxJs3?2 zfm&QX@&eA>l*v_+=WRj)Vz_9xdF}jKyTo9P;hLI;VW}l)ZgO}zHS-MC59D%e4q)YQ zi@EX5-D{bDuHQ{QGL;^Y&n52Z#Al`7>Jas|KeO5bk}4(WkHN_OK2y+bWE_dm=dcuT z9y&tH$J0E%f{2|o)?D^D%&EeDcr<3`x7sy6udpYfdFM00(0G_gc3<(tOGsG~A zeOlNa&8Mx(_0;O8fbeDkr~bxRwImUN?`Ugi2A|M6^Wun8TsxPS}=_ z0jv!xf7?n*Gr-sQe;N3PbSNtC3mg-ke0zVNNapgb6pHx*EP|nT_>fqn%Yw8OK!=ED zC8QzZ2U8If`xb+1ev>Uy*?1y65(8IlR_!>4l_F(@5hov=mGIk#?Ef{R)ZBXgdSpRO9n*4cbMdpmyjy%Typ z_vZ*Rzf)q$dEvr~FQrWW`t~)IeFz~y&KiMJqQOmww-HAJ=e8;J7%K_^oQ;>4N|2d@ zUzO8;_yt#3)OuwsEcve;1YFA$eTU}K=g+BM3ay*key<*WkS zq#Fy{R6*@bptwPR=wc~ZF+?lGMEaWMD@#2GT=sbW&?Ga+$|}J*h@9V-ia%uKzP(}i znaw8gSar;$6gtLBtuOW|j1RD1IT>bp~8?(tb6_uZCy}FP8OjJOl;gmnD zQdRlXD=!g>r<^0Z>*7`cED&p)_YZvyBiEB{j|TIq+J?EW1`9^!=5c&F?F1jvq~ncH zhtc^YaF)MNt!uUIQ*k2rH7yKie;MX<5OB$CW?t7H+D<|rOP{cb@9g-uN5hrT=H}(~ z5W-UZLmnX11*1Lq{zoA3&qscXGH5@r095LmqIJw~uTiT5lC?iMBK&*$FWjbpXjEFD zE8;SOL;s6r!}yH&d=vBeEl3O)$bjShCn|scSMUMR|DN@6<9}p*rGijC`gYv!riEcM zKAn|Sc03#&*$%wE0^4ZWT`Q}8z~^9F@%_*Dyw`@NiP?bhuy;HDX<%N*yXOUZbEx|xj4>~VE)1Ucoq*!wpM&WKFk=Hh@%)emyk)=cvE?df+5BCrqJF-mE>-z^ z?bzjuAYjxYuj5$Tx$PgEHlY+DI08hVe%+5LZ`d%+^mz8AI5YW|uCMYp|iS=0Fsv zOLvSl7WN+DUoc;UsG93JgnYI0)wKG`UUKQ*j)5rUnGqNKZPjuDXP2UK$$(N}Ab=+} za~e>>#&c)n%MVmDG9?D|DEj8)fe7-VCLkkC}I2k*>!aO9d43g9D`l$%b>PN=rll1_4DP$ zIi`}`9(9=Tps_P#%8S*tB!&39VI(*@1eoRcV?lkXG=QJ6*v>Ahn*}i1P4&P zm;;h8sAU5o0dQIvYST>0M_amgrBRGF7_*nvy`2Tk-b*Ozgpei?P)zn}oJt$7?-V-6 zT9q^!0Jg5sr9Id`c_btz2MQBTR<3|TSCveyrgsYx6GZl1@&JT(#%DmCmR(&5yg1kU zU_3{&1CBfUcmT3o;nz_ceOD&wY#AD0$4SfG0m+;{RG{M!V9gV681!7}YZYs|1;sSE zqn^P}CJt8^P0leVVw_B&H4Hn-`tA#>TbwfRR%$YuWJI;oe_&bFN5>kejk&$w?FEZR zHYK_Ltez1bXUTia4sPuBeDk>M=ngdZ?<`=bFsTvjL)iA_jAmT-9ivoaJDnaM&5k>5 z-xJ`wPFR@n5v3FmKz8bJX=d+b74!@o6b&4N8;oUNy^KXuui=|mnL}Mh)-+Pfil3iT z_vo~~^CWqXs5hi~k0cgp>qrVZQZ@2x z^%qr#&*?V6y77t6Ul{X(y<*&8zV@z4--1&qc{PUw(M^-qgPvS1Mr&}Y5 z0f-u^a+{v~to=1|1-8wL_VqPG^T%b|A!PFpjxLO|_bWqPvmA&PuC0l%#KT_pHyDGg z&4?x$bZ}?sMn?zS8_0!IhjV3(ZY#g4y8ciWx97jDxAQ`iZ0 z8rEf4{UU^JDs@$+GnfL~hmZ#NdposU!WBr2@tFTy7=~@zS)U*<$ zXB3$VfGcWqXYzZP7ZwN7>}ykM_$Ow9j7qa=nKO2Yk5 z$lG0oS+eG!I#yMiIzSTdM18KIw=8!kLA$i0-O-zWJNvFxpz%U)e=J}T&tz5Gy9Bep zrsR7M`D$?RRUx*~Iee9wFAJ7K2nUC#Ajq&1v#2<|E<3ln*~}s{Fu18MNw3*Z+*;;# z2IN|w=ERy-C{DYHj%cZGnisHv?f}XkT3lM0q2lQXL?b>MqCgB2j;O8tOWZ8OeA+Ri z`Ll*9#Xmj{KWp$aiG=pZE(^}c1K%l=zhhvnV{KLu+rz>asO}l5nz={|WF8SXxH#4Q zB$m1jvcY94QfyBgv#AkSI>Nmvx3y_)%x6MHWlo&6ETu}A$i*6?oWN?j(IQXl#Xrp5 z29HU1YwM#_Tfr`82TF>&kKF+ie7BuAJuuG7V`S6&Fl_3=(l$B#C%7(K1vknq?8Nou zh6&MIyTUAs+@^a%lnvxV^ruc_KGjlFcPW@)i+Lw>j4FRAv($!s)0${ANjb-<)<{vByV2<8l+aq^peHDtqINCsZH^~L(4e^2LOvz2m$jm7HKoWBB13D>S?(uO z?gKJ36PSn)&BC)fD#U`?$fJ0A;VTD?kEm1o`oP`UmWrKz@?tPSg?hrAIwnXgfQJj? z4Y%fa2lKIQZeI2@jp-K%w3TaJ)JgOO96=}wV%sYyVFm2uBgNsl;C8 z2N4wmr)Anw@==|Y5#%JfLf08~+%BW>bj}^uWG7{%YXdI?Nj*=Z&3S_9ryjSUnfA)+ zk*GEk;h97?^}js^HYB%HRUc(-&YZ%i60vb3{?!6_cJplo2k%FgEHjpA&X}w0EVFZK zq?KLus&Hw`SlDZ4jt%gWO`5CFPbN??pobPug>G*}`JZmhfYvO=UR&g68H6^Mayn`E zF|evDVASd&UhQHIk>5MpXXuyH&*p2+4eV$>_$PH}(!YHQrONvng1B7IMVZJ!hWisv7t+rB*CL<554y&i> z;3Vd48dtEPDKR$DTMzCd>DE+f!;xv+dZYZI{x}jK_sE6^4EDMoxx9;IsCIa&c0fsW zSQi&7Y%A+9DHU_*JxT2`6r=rp5hr+EZr)+g@)+N7t{SDyCbN=kcJ0vFDpvVv?!)`W zq%|(%6A$#1tRJ}Q<#2X>nQQM1H>emY9>lHuKnF|{jaaYfd;;+}z$!$swkN=!Mj)%+o&;h` zd5h3L>-6AmnBNKB>R01Fagre!;8nY8Z6pic3je7-}Huf4;}9Gr9l^x%+yHJ1!f)YoL~H>ZBM^ysM;eN1%xlI?wXf zg&Q4Jqgn%1&X*OsCQ(93j`f3a7g-QOU&!)$^5=>GGLqaIs{$6 z8=VR5gz4+o0_Q5DcN_Etlqlj@`0g5R^NIFE%D%CY`dfk1Lkt2@U;=EXN9hc2^unE` z1zgTG9q}!rzwd_5u(TSu>X)?Wjo3#dkP~ogFW4$#U*EE#tJ2CEfwR)eoe|9_NNQ3S zT}!N7`H4stYm4*WJH&~z32`tdYHp->-rv+=QnasK*_KveS{}s7`St-Dp5PEgd_;{g zb=9!$Sj~9+tBp|t*fbpyaRa!oaYqgnlH~m6kn;QdeDxK18H(b1mHp8?sz2%M5A)G7 z{kGa*VUz&S#%$;*j0B^8gp0U&gIdoGp=o$@BeIFZ>vPrIEJf3O5%*J3^B*TaxjRKk zsNdhuzvfbdU{y~T0`jU-$QOkLVF-+16rzgv2Zn2A^iCcPNe!Vr5JM~?oqPvzWW%FvpYYD13eNO?+ zsM_Y9GUyNFPd9t*dO9a2;_A=#j^C?$zp(8gZ^(y)GKLmT>r=YfG_Ks-$~suLn-KKz z+a9reNx9Wkq?JF0t(CNI(Tvg2}zeD4y>H6Q)y*}iba%_*U9&5wCx9d1oba{ceZl~wMFnlawMbA;|hDq zZ&*s2fe{2RJJcWGI)?LbAPo^j0DP#G5!WlZTzu5WB+?D+KEC#rey8-ah8mty{S(?O z{A(OooRSl4(&KZxf6Cr5);=uAO*L^SH}&j?SAeVq?wZmg)S(7?dV!auZA8F`iw;c% zezBjrT}gpt_-2BFidwO*ykH>83xOWP|g|1|cSSQP~d705%+hw+E&u

      ilh;)MV3H4CE4oc4+?u`! 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

      >2%2r69y;J6TF%taZAI{TH?V7PWD9pf^ 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 LYO>`o%|8Awq5?Lg literal 88877 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 Dy;N?r From 358ac939640159bfa2b4a3d71620e3e2e123f0e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 3 Oct 2018 15:12:54 +0300 Subject: [PATCH 05/13] Update Getting-Started-Console-Application.md --- docs/Getting-Started-Console-Application.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/Getting-Started-Console-Application.md b/docs/Getting-Started-Console-Application.md index 0f10c7f505..ab7530522b 100644 --- a/docs/Getting-Started-Console-Application.md +++ b/docs/Getting-Started-Console-Application.md @@ -1,6 +1,6 @@ ## Getting Started ABP With Console Application -This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with a ***[startup template](https://abp.io/Templates)***. +This tutorial explains how to start ABP from scratch with minimal dependencies. You generally want to start with a **[startup template](https://abp.io/Templates)**. ### Create A New Project @@ -121,4 +121,4 @@ While it's enough for this simple code example, it's always suggested to create ### Source Code -Get source code of the sample project created in this tutorial from [here](../samples/BasicConsoleApplication). \ No newline at end of file +Get source code of the sample project created in this tutorial from [here](../samples/BasicConsoleApplication). From 34d26493147cea303d878640b00ced30b1a001d9 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 3 Oct 2018 16:24:36 +0300 Subject: [PATCH 06/13] identity IdentityClaimTyp improvements --- .../Abp/Identity/IdentityClaimTypeConsts.cs | 2 +- .../Abp/Identity/IIdentityUserRepository.cs | 6 ++++ .../Volo/Abp/Identity/IdentityUserClaim.cs | 2 +- .../EfCoreIdentityUserRepository.cs | 35 +++++++++++++++++-- .../MongoDB/MongoIdentityUserRepository.cs | 25 +++++++++++-- 5 files changed, 64 insertions(+), 6 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeConsts.cs b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeConsts.cs index 5581c53638..1b691f404c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeConsts.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeConsts.cs @@ -6,7 +6,7 @@ namespace Volo.Abp.Identity { public class IdentityClaimTypeConsts { - public const int MaxNameLength = 128; + public const int MaxNameLength = 256; public const int MaxRegexLength = 512; diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs index 98269da005..20eb1a749d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs @@ -40,6 +40,8 @@ namespace Volo.Abp.Identity CancellationToken cancellationToken = default ); + Task UpdateClaimsAsync(Guid id, List claims); + Task> GetListByNormalizedRoleNameAsync( string normalizedRoleName, bool includeDetails = false, @@ -61,6 +63,10 @@ namespace Volo.Abp.Identity CancellationToken cancellationToken = default ); + Task> GetClaimsAsync( + Guid id, + CancellationToken cancellationToken = default); + Task GetCountAsync( string filter = null, CancellationToken cancellationToken = default diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserClaim.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserClaim.cs index d302beb7c2..d91db39b33 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserClaim.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserClaim.cs @@ -25,7 +25,7 @@ namespace Volo.Abp.Identity UserId = userId; } - protected internal IdentityUserClaim(Guid id, Guid userId, [NotNull] string claimType, string claimValue, Guid? tenantId) + public IdentityUserClaim(Guid id, Guid userId, [NotNull] string claimType, string claimValue, Guid? tenantId) : base(id, claimType, claimValue, tenantId) { UserId = userId; diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs index fed25edeb7..7cef5b5735 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs @@ -8,15 +8,18 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Guids; namespace Volo.Abp.Identity.EntityFrameworkCore { public class EfCoreIdentityUserRepository : EfCoreRepository, IIdentityUserRepository { - public EfCoreIdentityUserRepository(IDbContextProvider dbContextProvider) + private readonly IGuidGenerator _guidGenerator; + + public EfCoreIdentityUserRepository(IDbContextProvider dbContextProvider, IGuidGenerator guidGenerator) : base(dbContextProvider) { - + _guidGenerator = guidGenerator; } public virtual async Task FindByNormalizedUserNameAsync( @@ -131,6 +134,34 @@ namespace Volo.Abp.Identity.EntityFrameworkCore return await query.ToListAsync(GetCancellationToken(cancellationToken)); } + public virtual async Task> GetClaimsAsync( + Guid id, + CancellationToken cancellationToken = default) + { + var query = from userClaim in DbContext.Set() + where userClaim.UserId == id + select userClaim; + + return await query.ToListAsync(GetCancellationToken(cancellationToken)); + } + + public async Task UpdateClaimsAsync(Guid id, List claims) + { + var dbSet = DbContext.Set(); + + var oldClaims = dbSet.Where(c => c.UserId == id).ToList(); + + foreach (var oldClaim in oldClaims) + { + dbSet.Remove(oldClaim); + } + + foreach (var claim in claims) + { + dbSet.Add(new IdentityUserClaim(_guidGenerator.Create(), id, claim.ClaimType, claim.ClaimValue, CurrentTenant.Id)); + } + } + public virtual async Task GetCountAsync( string filter = null, CancellationToken cancellationToken = default) diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs index c9187953da..9bbea54e72 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityUserRepository.cs @@ -8,16 +8,19 @@ using System.Threading.Tasks; using MongoDB.Driver; using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.Guids; using Volo.Abp.MongoDB; namespace Volo.Abp.Identity.MongoDB { public class MongoIdentityUserRepository : MongoDbRepository, IIdentityUserRepository { - public MongoIdentityUserRepository(IMongoDbContextProvider dbContextProvider) + private readonly IGuidGenerator _guidGenerator; + + public MongoIdentityUserRepository(IMongoDbContextProvider dbContextProvider, IGuidGenerator guidGenerator) : base(dbContextProvider) { - + _guidGenerator = guidGenerator; } public async Task FindByNormalizedUserNameAsync( @@ -118,6 +121,24 @@ namespace Volo.Abp.Identity.MongoDB return await DbContext.Roles.AsQueryable().Where(r => roleIds.Contains(r.Id)).ToListAsync(GetCancellationToken(cancellationToken)); } + public async Task> GetClaimsAsync(Guid id, CancellationToken cancellationToken = default) + { + var user = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)); + return user.Claims.ToList(); + } + + public async Task UpdateClaimsAsync(Guid id, List claims) + { + var user = await GetAsync(id); + + user.Claims.Clear(); + + foreach (var claim in claims) + { + user.Claims.Add(new IdentityUserClaim(_guidGenerator.Create(), id, claim.ClaimType, claim.ClaimValue, CurrentTenant.Id)); + } + } + public async Task GetCountAsync( string filter = null, CancellationToken cancellationToken = default) From 0094796052a80873817bf2587b42b904accd5b43 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 4 Oct 2018 09:32:16 +0300 Subject: [PATCH 07/13] IdentityRoleClaim improvements --- .../Abp/Identity/IIdentityRoleRepository.cs | 6 ++++ .../Volo/Abp/Identity/IdentityRoleClaim.cs | 2 +- .../EfCoreIdentityRoleRepository.cs | 33 +++++++++++++++++-- .../MongoDB/MongoIdentityRoleRepository.cs | 24 +++++++++++++- 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs index d27de75865..78fc5d54a6 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs @@ -22,6 +22,12 @@ namespace Volo.Abp.Identity CancellationToken cancellationToken = default ); + Task UpdateClaimsAsync(Guid id, List claims); + + Task> GetClaimsAsync( + Guid id, + CancellationToken cancellationToken = default); + Task GetCountAsync( CancellationToken cancellationToken = default ); diff --git a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleClaim.cs b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleClaim.cs index 70cf33b3d5..83f5416f9d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleClaim.cs +++ b/modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleClaim.cs @@ -32,7 +32,7 @@ namespace Volo.Abp.Identity RoleId = roleId; } - protected internal IdentityRoleClaim( + public IdentityRoleClaim( Guid id, Guid roleId, [NotNull] string claimType, diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs index ddce85ac1c..7a317ee530 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/EfCoreIdentityRoleRepository.cs @@ -7,15 +7,18 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Guids; namespace Volo.Abp.Identity.EntityFrameworkCore { public class EfCoreIdentityRoleRepository : EfCoreRepository, IIdentityRoleRepository { - public EfCoreIdentityRoleRepository(IDbContextProvider dbContextProvider) + private readonly IGuidGenerator _guidGenerator; + + public EfCoreIdentityRoleRepository(IDbContextProvider dbContextProvider, IGuidGenerator guidGenerator) : base(dbContextProvider) { - + _guidGenerator = guidGenerator; } public virtual async Task FindByNormalizedNameAsync( @@ -42,6 +45,32 @@ namespace Volo.Abp.Identity.EntityFrameworkCore .ToListAsync(GetCancellationToken(cancellationToken)); } + public async Task UpdateClaimsAsync(Guid id, List claims) + { + var dbSet = DbContext.Set(); + + var oldClaims = dbSet.Where(c => c.RoleId == id).ToList(); + + foreach (var oldClaim in oldClaims) + { + dbSet.Remove(oldClaim); + } + + foreach (var claim in claims) + { + dbSet.Add(new IdentityRoleClaim(_guidGenerator.Create(), id, claim.ClaimType, claim.ClaimValue, CurrentTenant.Id)); + } + } + + public async Task> GetClaimsAsync(Guid id, CancellationToken cancellationToken = default) + { + var query = from roleClaim in DbContext.Set() + where roleClaim.RoleId == id + select roleClaim; + + return await query.ToListAsync(GetCancellationToken(cancellationToken)); + } + public virtual async Task GetCountAsync(CancellationToken cancellationToken = default) { return await this.LongCountAsync(GetCancellationToken(cancellationToken)); diff --git a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs index 1686579c0f..b8975ac441 100644 --- a/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs +++ b/modules/identity/src/Volo.Abp.Identity.MongoDB/Volo/Abp/Identity/MongoDB/MongoIdentityRoleRepository.cs @@ -7,15 +7,19 @@ using System.Linq.Dynamic.Core; using MongoDB.Driver; using MongoDB.Driver.Linq; using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.Guids; using Volo.Abp.MongoDB; namespace Volo.Abp.Identity.MongoDB { public class MongoIdentityRoleRepository : MongoDbRepository, IIdentityRoleRepository { - public MongoIdentityRoleRepository(IMongoDbContextProvider dbContextProvider) + private readonly IGuidGenerator _guidGenerator; + + public MongoIdentityRoleRepository(IMongoDbContextProvider dbContextProvider, IGuidGenerator guidGenerator) : base(dbContextProvider) { + _guidGenerator = guidGenerator; } public async Task FindByNormalizedNameAsync( @@ -40,6 +44,24 @@ namespace Volo.Abp.Identity.MongoDB .ToListAsync(GetCancellationToken(cancellationToken)); } + public async Task UpdateClaimsAsync(Guid id, List claims) + { + var role = await GetAsync(id); + + role.Claims.Clear(); + + foreach (var claim in claims) + { + role.Claims.Add(new IdentityRoleClaim(_guidGenerator.Create(), id, claim.ClaimType, claim.ClaimValue, CurrentTenant.Id)); + } + } + + public async Task> GetClaimsAsync(Guid id, CancellationToken cancellationToken = default) + { + var role = await GetAsync(id, cancellationToken: GetCancellationToken(cancellationToken)); + return role.Claims.ToList(); + } + public async Task GetCountAsync(CancellationToken cancellationToken = default) { return await GetMongoQueryable() From 5a38f854bd1429bdc42897fa4f9446c163d80c4b Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 4 Oct 2018 10:01:58 +0300 Subject: [PATCH 08/13] issue #484 --- .../Volo/Abp/Identity/IdentityUserAppService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 919bc536a9..c20c4109f3 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -36,7 +36,7 @@ namespace Volo.Abp.Identity [Authorize(IdentityPermissions.Users.Default)] public async Task> GetListAsync(GetIdentityUsersInput input) { - var count = await _userRepository.GetCountAsync(); //TODO: + var count = await _userRepository.GetCountAsync(input.Filter); //TODO: var list = await _userRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter); return new PagedResultDto( From 736845063e5e37f08b05d4b828929dd3d106ae8e Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 4 Oct 2018 10:39:30 +0300 Subject: [PATCH 09/13] issue #452 --- .../Resources/Blogging/Web/en.json | 1 + .../Resources/Blogging/Web/tr.json | 1 + .../Pages/Blog/Posts/Detail.cshtml | 14 +++++++---- .../Pages/Blog/Posts/Detail.cshtml.cs | 7 +++++- .../Pages/Blog/Posts/detail.js | 23 ++++++++++++++++--- 5 files changed, 38 insertions(+), 8 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/en.json b/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/en.json index 17612e8fa2..b9e7b543b9 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/en.json +++ b/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/en.json @@ -6,6 +6,7 @@ "Title": "Title", "Delete": "Delete", "Reply": "Reply", + "ReplyTo": "Reply To {0}", "ContinueReading": "Continue Reading", "DaysAgo": "{0} days ago", "YearsAgo": "{0} years ago", diff --git a/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/tr.json b/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/tr.json index e5e8adc60d..a5a705d506 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/tr.json +++ b/modules/blogging/src/Volo.Blogging.Web/Localization/Resources/Blogging/Web/tr.json @@ -5,6 +5,7 @@ "Title": "Başlık", "Delete": "Sil", "Reply": "Yanıtla", + "ReplyTo": "{0}'a cevap ver", "Menu:BlogManagement": "Blog Yönetimi", "ContinueReading": "Devamı...", "DaysAgo": "{0} Gün Önce", diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml index f3e2728de0..4d560ee5af 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml @@ -23,6 +23,9 @@ } + + +

      @@ -173,8 +176,8 @@

      - @L["ReplyTo"] - @(commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName) + @L["ReplyTo", commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName] +

      @@ -185,6 +188,7 @@
      +
      @@ -201,6 +205,7 @@
      +
      @@ -249,8 +254,7 @@

      - @L["ReplyTo"] - @(commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName) + @L["ReplyTo",commentWithRepliesDto.Comment.Writer == null ? "" : commentWithRepliesDto.Comment.Writer.UserName]

      @@ -260,6 +264,7 @@
      +
      @@ -276,6 +281,7 @@ + diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml.cs index 7e02cd8d3a..953c3aa8a1 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/Detail.cshtml.cs @@ -31,6 +31,9 @@ namespace Volo.Blogging.Pages.Blog.Posts public int CommentCount { get; set; } + [HiddenInput] + public Guid FocusCommentId { get; set; } + public PostWithDetailsDto Post { get; set; } public IReadOnlyList CommentsWithReplies { get; set; } @@ -51,13 +54,15 @@ namespace Volo.Blogging.Pages.Blog.Posts public async Task OnPostAsync() { - await _commentAppService.CreateAsync(new CreateCommentDto() + var comment = await _commentAppService.CreateAsync(new CreateCommentDto() { RepliedCommentId = NewComment.RepliedCommentId, PostId = NewComment.PostId, Text = NewComment.Text }); + FocusCommentId = comment.Id; + await GetData(); } diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/detail.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/detail.js index 7b042fd79a..1ab4ba1167 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/detail.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blog/Posts/detail.js @@ -3,6 +3,7 @@ var l = abp.localization.getResource('Blogging'); $('div .replyForm').hide(); + $('div .editForm').hide(); $('form[class="editFormClass"]').submit(function (event) { @@ -25,6 +26,16 @@ }); }); + $('.editCancelButton').click(function (event) { + event.preventDefault(); + $('div .editForm').hide(); + }); + + $('.replyCancelButton').click(function (event) { + event.preventDefault(); + $('div .replyForm').hide(); + }); + $('.replyLink').click(function (event) { event.preventDefault(); $('div .editForm').hide(); @@ -44,7 +55,7 @@ } }); - $('.deleteLink').click(function(event) { + $('.deleteLink').click(function (event) { event.preventDefault(); var linkElement = $(this); var deleteCommentId = linkElement.attr('data-deleteid'); @@ -53,7 +64,7 @@ abp.message.confirm( l('CommentDeletionWarningMessage'), // TODO: localize l('Are you sure?'), - function(isConfirmed) { + function (isConfirmed) { if (isConfirmed) { $.ajax({ type: "POST", @@ -79,7 +90,7 @@ abp.message.confirm( l('PostDeletionWarningMessage'), // TODO: localize l('AreYouSure'), - function(isConfirmed) { + function (isConfirmed) { if (isConfirmed) { $.ajax({ type: "POST", @@ -119,4 +130,10 @@ } }); + if ($('#FocusCommentId').val() != '00000000-0000-0000-0000-000000000000') { + $('html, body').animate({ + scrollTop: ($('#' + $('#FocusCommentId').val()).offset().top - 150) + }, 500); + } + })(jQuery); From c789fbe2addea3c3a8d647ba22fc2bb2ee518787 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 4 Oct 2018 14:51:14 +0300 Subject: [PATCH 10/13] IDS4 MongoDb project #496 --- .../AbpIdentityEntityFrameworkCoreModule.cs | 1 + .../Volo.Abp.IdentityServer.sln | 7 +++ .../Volo.Abp.IdentityServer.MongoDB.csproj | 22 +++++++++ .../MongoDB/AbpIdentityServerBsonClassMap.cs | 37 ++++++++++++++ .../AbpIdentityServerMongoDbContext.cs | 34 +++++++++++++ ...pIdentityServerMongoDbContextExtensions.cs | 42 ++++++++++++++++ .../MongoDB/AbpIdentityServerMongoDbModule.cs | 30 ++++++++++++ .../IAbpIdentityServerMongoDbContext.cs | 22 +++++++++ ...erMongoModelBuilderConfigurationOptions.cs | 15 ++++++ .../MongoDB/MongoApiResourceRepository.cs | 36 ++++++++++++++ .../MongoDB/MongoClientRepository.cs | 22 +++++++++ .../MongoIdentityResourceRepository.cs | 29 +++++++++++ .../MongoDB/MongoPersistedGrantRepository.cs | 49 +++++++++++++++++++ 13 files changed, 346 insertions(+) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.csproj create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerBsonClassMap.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IAbpIdentityServerMongoDbContext.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IdentityServerMongoModelBuilderConfigurationOptions.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs diff --git a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs index f7211df12f..b3ff5c368b 100644 --- a/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs +++ b/modules/identity/src/Volo.Abp.Identity.EntityFrameworkCore/Volo/Abp/Identity/EntityFrameworkCore/AbpIdentityEntityFrameworkCoreModule.cs @@ -15,6 +15,7 @@ namespace Volo.Abp.Identity.EntityFrameworkCore { options.AddRepository(); options.AddRepository(); + options.AddRepository(); }); } } diff --git a/modules/identityserver/Volo.Abp.IdentityServer.sln b/modules/identityserver/Volo.Abp.IdentityServer.sln index fcdc057cf3..97d6b0b97a 100644 --- a/modules/identityserver/Volo.Abp.IdentityServer.sln +++ b/modules/identityserver/Volo.Abp.IdentityServer.sln @@ -15,6 +15,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{2C792EC1-B EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.IdentityServer.EntityFrameworkCore.Tests", "test\Volo.Abp.IdentityServer.EntityFrameworkCore.Tests\Volo.Abp.IdentityServer.EntityFrameworkCore.Tests.csproj", "{8B8FBA95-4FA2-4438-A387-7C5EC7A89E82}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.IdentityServer.MongoDB", "src\Volo.Abp.IdentityServer.MongoDB\Volo.Abp.IdentityServer.MongoDB.csproj", "{FC6CC65A-27B9-43D4-8F20-D941B4987B2C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -37,6 +39,10 @@ Global {8B8FBA95-4FA2-4438-A387-7C5EC7A89E82}.Debug|Any CPU.Build.0 = Debug|Any CPU {8B8FBA95-4FA2-4438-A387-7C5EC7A89E82}.Release|Any CPU.ActiveCfg = Release|Any CPU {8B8FBA95-4FA2-4438-A387-7C5EC7A89E82}.Release|Any CPU.Build.0 = Release|Any CPU + {FC6CC65A-27B9-43D4-8F20-D941B4987B2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FC6CC65A-27B9-43D4-8F20-D941B4987B2C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FC6CC65A-27B9-43D4-8F20-D941B4987B2C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FC6CC65A-27B9-43D4-8F20-D941B4987B2C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -46,6 +52,7 @@ Global {FC035412-78AD-424C-BECE-B19D04C7B5A6} = {59A0FC0F-EA6D-477B-84A7-3B1E41B4C858} {F352D620-1CBF-4658-953F-70BA73B458F1} = {59A0FC0F-EA6D-477B-84A7-3B1E41B4C858} {8B8FBA95-4FA2-4438-A387-7C5EC7A89E82} = {2C792EC1-BA27-44ED-B7CC-D0939553F1B2} + {FC6CC65A-27B9-43D4-8F20-D941B4987B2C} = {59A0FC0F-EA6D-477B-84A7-3B1E41B4C858} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {45562023-C330-4060-A583-2BA10F472D3D} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.csproj b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.csproj new file mode 100644 index 0000000000..72179c1d3c --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo.Abp.IdentityServer.MongoDB.csproj @@ -0,0 +1,22 @@ + + + + + + netstandard2.0 + Volo.Abp.IdentityServer.MongoDB + Volo.Abp.IdentityServer.MongoDB + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + false + false + false + + + + + + + + + + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerBsonClassMap.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerBsonClassMap.cs new file mode 100644 index 0000000000..28cde387cf --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerBsonClassMap.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; +using System.Text; +using IdentityServer4.Models; +using MongoDB.Bson.Serialization; +using Volo.Abp.Threading; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + public class AbpIdentityServerBsonClassMap + { + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + BsonClassMap.RegisterClassMap(map => + { + map.AutoMap(); + }); + BsonClassMap.RegisterClassMap(map => + { + map.AutoMap(); + }); + BsonClassMap.RegisterClassMap(map => + { + map.AutoMap(); + }); + BsonClassMap.RegisterClassMap(map => + { + map.AutoMap(); + }); + }); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs new file mode 100644 index 0000000000..2803b91f8c --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs @@ -0,0 +1,34 @@ +using MongoDB.Driver; +using Volo.Abp.Data; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.MongoDB; +using IdentityResource = Volo.Abp.IdentityServer.IdentityResources.IdentityResource; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + [ConnectionStringName("AbpIdentityServer")] + public class AbpIdentityServerMongoDbContext : AbpMongoDbContext, IAbpIdentityServerMongoDbContext + { + public static string CollectionPrefix { get; set; } = AbpIdentityServerConsts.DefaultDbTablePrefix; + + public IMongoCollection ApiResources => Collection(); + + public IMongoCollection Clients => Collection(); + + public IMongoCollection IdentityResources => Collection(); + + public IMongoCollection PersistedGrants => Collection(); + + protected override void CreateModel(IMongoModelBuilder modelBuilder) + { + base.CreateModel(modelBuilder); + + modelBuilder.ConfigureIdentityServer(options => + { + options.CollectionPrefix = CollectionPrefix; + }); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs new file mode 100644 index 0000000000..ed9bfc7422 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Text; +using IdentityServer4.Models; +using Volo.Abp.MongoDB; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + public static class AbpIdentityServerMongoDbContextExtensions + { + public static void ConfigureIdentityServer( + this IMongoModelBuilder builder, + Action optionsAction = null) + { + Check.NotNull(builder, nameof(builder)); + + var options = new IdentityServerMongoModelBuilderConfigurationOptions(); + + optionsAction?.Invoke(options); + + builder.Entity(b => + { + b.CollectionName = options.CollectionPrefix + "ApiResources"; + }); + + builder.Entity(b => + { + b.CollectionName = options.CollectionPrefix + "Clients"; + }); + + builder.Entity(b => + { + b.CollectionName = options.CollectionPrefix + "IdentityResources"; + }); + + builder.Entity(b => + { + b.CollectionName = options.CollectionPrefix + "PersistedGrants"; + }); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs new file mode 100644 index 0000000000..6e42bc347d --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs @@ -0,0 +1,30 @@ +using IdentityServer4.Models; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; +using Volo.Abp.MongoDB; +using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; +using Client = Volo.Abp.IdentityServer.Clients.Client; +using IdentityResource = Volo.Abp.IdentityServer.IdentityResources.IdentityResource; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + [DependsOn( + typeof(AbpIdentityServerDomainModule), + typeof(AbpMongoDbModule) + )] + public class AbpIdentityServerMongoDbModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + AbpIdentityServerBsonClassMap.Configure(); + + context.Services.AddMongoDbContext(options => + { + options.AddRepository(); + options.AddRepository(); + options.AddRepository(); + options.AddRepository(); + }); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IAbpIdentityServerMongoDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IAbpIdentityServerMongoDbContext.cs new file mode 100644 index 0000000000..cbe1cf867f --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IAbpIdentityServerMongoDbContext.cs @@ -0,0 +1,22 @@ +using MongoDB.Driver; +using Volo.Abp.Data; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.IdentityServer.IdentityResources; +using Volo.Abp.MongoDB; +using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + [ConnectionStringName("AbpIdentityServer")] + public interface IAbpIdentityServerMongoDbContext : IAbpMongoDbContext + { + IMongoCollection ApiResources { get; } + + IMongoCollection Clients { get; } + + IMongoCollection IdentityResources { get; } + + IMongoCollection PersistedGrants { get; } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IdentityServerMongoModelBuilderConfigurationOptions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IdentityServerMongoModelBuilderConfigurationOptions.cs new file mode 100644 index 0000000000..49b9f80f47 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IdentityServerMongoModelBuilderConfigurationOptions.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Volo.Abp.MongoDB; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + public class IdentityServerMongoModelBuilderConfigurationOptions : MongoModelBuilderConfigurationOptions + { + public IdentityServerMongoModelBuilderConfigurationOptions() + : base(AbpIdentityServerConsts.DefaultDbTablePrefix) + { + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs new file mode 100644 index 0000000000..26ab375882 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.MongoDB; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + public class MongoApiResourceRepository : MongoDbRepository, IApiResourceRepository + { + public MongoApiResourceRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + public virtual async Task FindByNameAsync(string name, bool includeDetails = true, CancellationToken cancellationToken = default) + { + return await GetMongoQueryable() + .Where(ar=>ar.Name == name) + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + } + + public virtual async Task> GetListByScopesAsync(string[] scopeNames, bool includeDetails = false, + CancellationToken cancellationToken = default) + { + return await GetMongoQueryable() + .Where(ar=>ar.Scopes.Any(x=> scopeNames.Contains(x.Name))) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs new file mode 100644 index 0000000000..f3ebe4bb62 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs @@ -0,0 +1,22 @@ +using System; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver.Linq; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.MongoDB; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + public class MongoClientRepository : MongoDbRepository, IClientRepository + { + public MongoClientRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + public async Task FindByCliendIdAsync(string clientId, bool includeDetails = true, CancellationToken cancellationToken = default) + { + return await GetMongoQueryable().FirstOrDefaultAsync(x => x.ClientId == clientId, GetCancellationToken(cancellationToken)); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs new file mode 100644 index 0000000000..ac2a1b4978 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.IdentityServer.IdentityResources; +using Volo.Abp.MongoDB; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + public class MongoIdentityResourceRepository : MongoDbRepository, IIdentityResourceRepository + { + public MongoIdentityResourceRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + public async Task> GetListByScopesAsync(string[] scopeNames, bool includeDetails = false, + CancellationToken cancellationToken = default) + { + return await GetMongoQueryable() + .Where(ar => scopeNames.Any(s=>s == ar.Name)) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs new file mode 100644 index 0000000000..b85d3d3e06 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using MongoDB.Driver; +using MongoDB.Driver.Linq; +using Volo.Abp.Domain.Repositories.MongoDB; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.MongoDB; + +namespace Volo.Abp.IdentityServer.MongoDB +{ + public class MongoPersistedGrantRepository : MongoDbRepository, IPersistentGrantRepository + { + public MongoPersistedGrantRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider) + { + } + + public async Task FindByKeyAsync(string key, CancellationToken cancellationToken = default) + { + + return await GetMongoQueryable() + .FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken)); + } + + public async Task> GetListBySubjectIdAsync(string subjectId, CancellationToken cancellationToken = default) + { + return await GetMongoQueryable() + .Where(x => x.SubjectId == subjectId) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public async Task DeleteAsync(string subjectId, string clientId, CancellationToken cancellationToken = default) + { + await DeleteAsync( + x => x.SubjectId == subjectId && x.ClientId == clientId, + cancellationToken: GetCancellationToken(cancellationToken) + ); + } + + public async Task DeleteAsync(string subjectId, string clientId, string type, CancellationToken cancellationToken = default) + { + await DeleteAsync( + x => x.SubjectId == subjectId && x.ClientId == clientId && x.Type == type, + cancellationToken: GetCancellationToken(cancellationToken) + ); + } + } +} From 9fe4e7a611ff6bb7069b6daa60916a7a2e697311 Mon Sep 17 00:00:00 2001 From: John Barrett <40014477+274188A@users.noreply.github.com> Date: Thu, 4 Oct 2018 20:54:23 +0800 Subject: [PATCH 11/13] made minor spelling correction and grammar improvement --- docs/Virtual-File-System.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Virtual-File-System.md b/docs/Virtual-File-System.md index c41c443290..9ee0e106d4 100644 --- a/docs/Virtual-File-System.md +++ b/docs/Virtual-File-System.md @@ -108,7 +108,7 @@ Embedding a file into a module assembly and being able to use it from another pr Let's assume that you're developing a module that contains an embedded JavaScript file. Whenever you change this file you must re-compile the project, re-start the application and refresh the browser page to take the change. Obviously, this is very time consuming and tedious. -What is needed is the ability for the application to directly use the physical file at development time and a have a browser refresh refect any change in the JavaScript file. The `ReplaceEmbeddedByPyhsical` method makes all this possible. +What is needed is the ability for the application to directly use the physical file at development time and a have a browser refresh reflect any change made in the JavaScript file. The `ReplaceEmbeddedByPyhsical` method makes all this possible. The example below shows an application that depends on a module (`MyModule`) that itself contains embedded files. The application can reach the source code of the module at development time. From 0468792fcf28a124aa193d5b341ea881eba9c077 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Thu, 4 Oct 2018 17:56:20 +0300 Subject: [PATCH 12/13] IDS4 mongodb tests #496 --- .../Volo.Abp.IdentityServer.sln | 14 ++++ ...lo.Abp.IdentityServer.MongoDB.Tests.csproj | 24 +++++++ .../MongoDB/AbpIdentityServerBsonClassMap.cs | 10 +-- ...pIdentityServerMongoDbContextExtensions.cs | 8 +-- .../MongoDB/AbpIdentityServerMongoDbModule.cs | 4 +- ...erMongoModelBuilderConfigurationOptions.cs | 5 +- .../MongoIdentityResourceRepository.cs | 3 +- .../ApiResourceRepository_Tests.cs | 7 ++ ...lo.Abp.IdentityServer.MongoDB.Tests.csproj | 24 +++++++ .../AbpIdentityServerMongoDbTestModule.cs | 33 +++++++++ .../ApiResourceRepository_Tests.cs | 7 ++ .../IdentityServer/ClientRepository_Tests.cs | 11 +++ .../IdentityResourceRepository_Tests.cs | 10 +++ .../Volo.Abp.IdentityServer.TestBase.csproj | 29 ++++++++ .../AbpIdentityServerTestBase.cs | 16 +++++ .../AbpIdentityServerTestBaseModule.cs | 38 +++++++++++ .../AbpIdentityServerTestDataBuilder.cs | 68 +++++++++++++++++++ .../ApiResourceRepository_Tests.cs | 32 +++++++++ .../IdentityServer/ClientRepository_Tests.cs | 29 ++++++++ .../IdentityResourceRepository_Tests.cs | 28 ++++++++ 20 files changed, 383 insertions(+), 17 deletions(-) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/AbpIdentityServerMongoDbTestModule.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/ClientRepository_Tests.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo.Abp.IdentityServer.TestBase.csproj create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestBase.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestBaseModule.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ClientRepository_Tests.cs create mode 100644 modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs diff --git a/modules/identityserver/Volo.Abp.IdentityServer.sln b/modules/identityserver/Volo.Abp.IdentityServer.sln index 97d6b0b97a..03e2b5a9af 100644 --- a/modules/identityserver/Volo.Abp.IdentityServer.sln +++ b/modules/identityserver/Volo.Abp.IdentityServer.sln @@ -17,6 +17,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.IdentityServer.Ent EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.IdentityServer.MongoDB", "src\Volo.Abp.IdentityServer.MongoDB\Volo.Abp.IdentityServer.MongoDB.csproj", "{FC6CC65A-27B9-43D4-8F20-D941B4987B2C}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.IdentityServer.TestBase", "test\Volo.Abp.IdentityServer.TestBase\Volo.Abp.IdentityServer.TestBase.csproj", "{9CD1BFDB-DD76-4194-ACAD-A64541AC2069}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.IdentityServer.MongoDB.Tests", "test\Volo.Abp.IdentityServer.MongoDB.Tests\Volo.Abp.IdentityServer.MongoDB.Tests.csproj", "{2E18B471-7FCA-497B-90FF-6AA9172CC62F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -43,6 +47,14 @@ Global {FC6CC65A-27B9-43D4-8F20-D941B4987B2C}.Debug|Any CPU.Build.0 = Debug|Any CPU {FC6CC65A-27B9-43D4-8F20-D941B4987B2C}.Release|Any CPU.ActiveCfg = Release|Any CPU {FC6CC65A-27B9-43D4-8F20-D941B4987B2C}.Release|Any CPU.Build.0 = Release|Any CPU + {9CD1BFDB-DD76-4194-ACAD-A64541AC2069}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9CD1BFDB-DD76-4194-ACAD-A64541AC2069}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9CD1BFDB-DD76-4194-ACAD-A64541AC2069}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9CD1BFDB-DD76-4194-ACAD-A64541AC2069}.Release|Any CPU.Build.0 = Release|Any CPU + {2E18B471-7FCA-497B-90FF-6AA9172CC62F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2E18B471-7FCA-497B-90FF-6AA9172CC62F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2E18B471-7FCA-497B-90FF-6AA9172CC62F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2E18B471-7FCA-497B-90FF-6AA9172CC62F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -53,6 +65,8 @@ Global {F352D620-1CBF-4658-953F-70BA73B458F1} = {59A0FC0F-EA6D-477B-84A7-3B1E41B4C858} {8B8FBA95-4FA2-4438-A387-7C5EC7A89E82} = {2C792EC1-BA27-44ED-B7CC-D0939553F1B2} {FC6CC65A-27B9-43D4-8F20-D941B4987B2C} = {59A0FC0F-EA6D-477B-84A7-3B1E41B4C858} + {9CD1BFDB-DD76-4194-ACAD-A64541AC2069} = {2C792EC1-BA27-44ED-B7CC-D0939553F1B2} + {2E18B471-7FCA-497B-90FF-6AA9172CC62F} = {2C792EC1-BA27-44ED-B7CC-D0939553F1B2} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {45562023-C330-4060-A583-2BA10F472D3D} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj new file mode 100644 index 0000000000..5a7d60a821 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj @@ -0,0 +1,24 @@ + + + + netcoreapp2.1 + Volo.Abp.IdentityServer.MongoDB.Tests + Volo.Abp.IdentityServer.MongoDB.Tests + true + false + false + false + + + + + + + + + + + + + + diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerBsonClassMap.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerBsonClassMap.cs index 28cde387cf..f55ad596c8 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerBsonClassMap.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerBsonClassMap.cs @@ -1,8 +1,8 @@ -using System; -using System.Collections.Generic; -using System.Text; -using IdentityServer4.Models; -using MongoDB.Bson.Serialization; +using MongoDB.Bson.Serialization; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.IdentityServer.IdentityResources; using Volo.Abp.Threading; namespace Volo.Abp.IdentityServer.MongoDB diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs index ed9bfc7422..6f81a67493 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContextExtensions.cs @@ -1,7 +1,8 @@ using System; -using System.Collections.Generic; -using System.Text; -using IdentityServer4.Models; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.IdentityServer.IdentityResources; using Volo.Abp.MongoDB; namespace Volo.Abp.IdentityServer.MongoDB @@ -27,7 +28,6 @@ namespace Volo.Abp.IdentityServer.MongoDB { b.CollectionName = options.CollectionPrefix + "Clients"; }); - builder.Entity(b => { b.CollectionName = options.CollectionPrefix + "IdentityResources"; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs index 6e42bc347d..599f60f579 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbModule.cs @@ -1,5 +1,5 @@ -using IdentityServer4.Models; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.IdentityServer.Grants; using Volo.Abp.Modularity; using Volo.Abp.MongoDB; using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IdentityServerMongoModelBuilderConfigurationOptions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IdentityServerMongoModelBuilderConfigurationOptions.cs index 49b9f80f47..bb88711e9e 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IdentityServerMongoModelBuilderConfigurationOptions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/IdentityServerMongoModelBuilderConfigurationOptions.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Volo.Abp.MongoDB; +using Volo.Abp.MongoDB; namespace Volo.Abp.IdentityServer.MongoDB { diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs index ac2a1b4978..ed84284369 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; @@ -22,7 +21,7 @@ namespace Volo.Abp.IdentityServer.MongoDB CancellationToken cancellationToken = default) { return await GetMongoQueryable() - .Where(ar => scopeNames.Any(s=>s == ar.Name)) + .Where(ar => scopeNames.Contains(ar.Name)) .ToListAsync(GetCancellationToken(cancellationToken)); } } diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs new file mode 100644 index 0000000000..965d2c8893 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.EntityFrameworkCore.Tests/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs @@ -0,0 +1,7 @@ + +namespace Volo.Abp.IdentityServer +{ + public class ApiResourceRepository_Tests //: ApiResourceRepository_Tests + { + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj new file mode 100644 index 0000000000..5a7d60a821 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo.Abp.IdentityServer.MongoDB.Tests.csproj @@ -0,0 +1,24 @@ + + + + netcoreapp2.1 + Volo.Abp.IdentityServer.MongoDB.Tests + Volo.Abp.IdentityServer.MongoDB.Tests + true + false + false + false + + + + + + + + + + + + + + diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/AbpIdentityServerMongoDbTestModule.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/AbpIdentityServerMongoDbTestModule.cs new file mode 100644 index 0000000000..f1e81bf21f --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/AbpIdentityServerMongoDbTestModule.cs @@ -0,0 +1,33 @@ +using Microsoft.Extensions.DependencyInjection; +using Mongo2Go; +using Volo.Abp.Data; +using Volo.Abp.IdentityServer.MongoDB; +using Volo.Abp.Modularity; + +namespace Volo.Abp.IdentityServer +{ + + [DependsOn( + typeof(AbpIdentityServerTestBaseModule), + typeof(AbpIdentityServerMongoDbModule) + )] + public class AbpIdentityServerMongoDbTestModule : AbpModule + { + private MongoDbRunner _mongoDbRunner; + + public override void ConfigureServices(ServiceConfigurationContext context) + { + _mongoDbRunner = MongoDbRunner.Start(); + + context.Services.Configure(options => + { + options.ConnectionStrings.Default = _mongoDbRunner.ConnectionString; + }); + } + + public override void OnApplicationShutdown(ApplicationShutdownContext context) + { + _mongoDbRunner.Dispose(); + } + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs new file mode 100644 index 0000000000..032505266d --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs @@ -0,0 +1,7 @@ + +namespace Volo.Abp.IdentityServer +{ + public class ApiResourceRepository_Tests : ApiResourceRepository_Tests + { + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/ClientRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/ClientRepository_Tests.cs new file mode 100644 index 0000000000..29b006cd99 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/ClientRepository_Tests.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Abp.IdentityServer +{ + public class ClientRepository_Tests : ClientRepository_Tests + { + + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs new file mode 100644 index 0000000000..2b44b2c6a0 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.MongoDB.Tests/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Volo.Abp.IdentityServer +{ + public class IdentityResourceRepository_Tests : IdentityResourceRepository_Tests + { + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo.Abp.IdentityServer.TestBase.csproj b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo.Abp.IdentityServer.TestBase.csproj new file mode 100644 index 0000000000..3cf0bab9d4 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo.Abp.IdentityServer.TestBase.csproj @@ -0,0 +1,29 @@ + + + + netcoreapp2.1 + Volo.Abp.IdentityServer.TestBase + Volo.Abp.IdentityServer.TestBase + true + false + false + false + + + + + + + + + + + + + + + + + + + diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestBase.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestBase.cs new file mode 100644 index 0000000000..a78caec8d0 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestBase.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; +using Volo.Abp.Modularity; + +namespace Volo.Abp.IdentityServer +{ + public class AbpIdentityServerTestBase : AbpIntegratedTest + where TStartupModule : IAbpModule + { + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestBaseModule.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestBaseModule.cs new file mode 100644 index 0000000000..b5617e489f --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestBaseModule.cs @@ -0,0 +1,38 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Autofac; +using Volo.Abp.Modularity; +using Volo.Abp.Threading; + +namespace Volo.Abp.IdentityServer +{ + [DependsOn( + typeof(AbpAutofacModule), + typeof(AbpTestBaseModule), + typeof(AbpIdentityServerDomainModule) + )] + public class AbpIdentityServerTestBaseModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAlwaysAllowPermissionChecker(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + SeedTestData(context); + } + + private static void SeedTestData(ApplicationInitializationContext context) + { + using (var scope = context.ServiceProvider.CreateScope()) + { + //var dataSeeder = scope.ServiceProvider.GetRequiredService(); + //AsyncHelper.RunSync(() => dataSeeder.SeedAsync("1q2w3E*")); + + scope.ServiceProvider + .GetRequiredService() + .Build(); + } + } + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs new file mode 100644 index 0000000000..472c23b7e2 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/AbpIdentityServerTestDataBuilder.cs @@ -0,0 +1,68 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.IdentityServer.Grants; +using Volo.Abp.IdentityServer.IdentityResources; + +namespace Volo.Abp.IdentityServer +{ + public class AbpIdentityServerTestDataBuilder : ITransientDependency + { + private readonly IGuidGenerator _guidGenerator; + private readonly IApiResourceRepository _apiResourceRepository; + private readonly IClientRepository _clientRepository; + private readonly IIdentityResourceRepository _identityResourceRepository; + //private readonly IPersistentGrantRepository _persistentGrantRepository; + + public AbpIdentityServerTestDataBuilder( + IGuidGenerator guidGenerator, + IApiResourceRepository apiResourceRepository, + IClientRepository clientRepository, + IIdentityResourceRepository identityResourceRepository + /*IPersistentGrantRepository persistentGrantRepository*/) + { + _guidGenerator = guidGenerator; + _apiResourceRepository = apiResourceRepository; + _clientRepository = clientRepository; + _identityResourceRepository = identityResourceRepository; + //_persistentGrantRepository = persistentGrantRepository; + } + + public void Build() + { + AddPersistedGrants(); + AddIdentityResources(); + AddApiResources(); + AddClients(); + } + + private void AddPersistedGrants() + { + //_persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create())); + //_persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create())); + //_persistentGrantRepository.Insert(new PersistedGrant(_guidGenerator.Create())); + } + + private void AddIdentityResources() + { + _identityResourceRepository.Insert(new IdentityResource(_guidGenerator.Create(), "NewIdentityResource1")); + _identityResourceRepository.Insert(new IdentityResource(_guidGenerator.Create(), "NewIdentityResource2")); + _identityResourceRepository.Insert(new IdentityResource(_guidGenerator.Create(), "NewIdentityResource3")); + } + + private void AddApiResources() + { + _apiResourceRepository.Insert(new ApiResource(_guidGenerator.Create(), "NewApiResource1")); + _apiResourceRepository.Insert(new ApiResource(_guidGenerator.Create(), "NewApiResource2")); + _apiResourceRepository.Insert(new ApiResource(_guidGenerator.Create(), "NewApiResource3")); + } + + private void AddClients() + { + _clientRepository.Insert(new Client(_guidGenerator.Create(), "ClientId1")); + _clientRepository.Insert(new Client(_guidGenerator.Create(), "ClientId2")); + _clientRepository.Insert(new Client(_guidGenerator.Create(), "ClientId3")); + } + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs new file mode 100644 index 0000000000..db8eacae5c --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ApiResourceRepository_Tests.cs @@ -0,0 +1,32 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.Modularity; +using Xunit; + +namespace Volo.Abp.IdentityServer +{ + public abstract class ApiResourceRepository_Tests : AbpIdentityServerTestBase + where TStartupModule : IAbpModule + { + protected IApiResourceRepository apiResourceRepository { get; } + + public ApiResourceRepository_Tests() + { + apiResourceRepository = ServiceProvider.GetRequiredService(); + } + + [Fact] + public async Task FindByNormalizedNameAsync() + { + (await apiResourceRepository.FindByNameAsync("NewApiResource2")).ShouldNotBeNull(); + } + + [Fact] + public async Task GetListByScopesAsync() + { + (await apiResourceRepository.GetListByScopesAsync(new []{ "NewApiResource2", "NewApiResource3"})).Count.ShouldBe(2); + } + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ClientRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ClientRepository_Tests.cs new file mode 100644 index 0000000000..8770e7969c --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/ClientRepository_Tests.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.IdentityServer.Clients; +using Volo.Abp.Modularity; +using Xunit; + +namespace Volo.Abp.IdentityServer +{ + public abstract class ClientRepository_Tests : AbpIdentityServerTestBase + where TStartupModule : IAbpModule + { + protected IClientRepository clientRepository { get; } + + public ClientRepository_Tests() + { + clientRepository = ServiceProvider.GetRequiredService(); + } + + [Fact] + public async Task FindByCliendIdAsync() + { + (await clientRepository.FindByCliendIdAsync("ClientId2")).ShouldNotBeNull(); + } + } +} diff --git a/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs new file mode 100644 index 0000000000..a9487657b3 --- /dev/null +++ b/modules/identityserver/test/Volo.Abp.IdentityServer.TestBase/Volo/Abp/IdentityServer/IdentityResourceRepository_Tests.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Shouldly; +using Volo.Abp.IdentityServer.IdentityResources; +using Volo.Abp.Modularity; +using Xunit; + +namespace Volo.Abp.IdentityServer +{ + public class IdentityResourceRepository_Tests : AbpIdentityServerTestBase + where TStartupModule : IAbpModule + { + private IIdentityResourceRepository identityResourceRepository; + public IdentityResourceRepository_Tests() + { + identityResourceRepository = ServiceProvider.GetRequiredService(); + } + + [Fact] + public async Task GetListByScopesAsync() + { + (await identityResourceRepository.GetListByScopesAsync(new []{"", "NewIdentityResource2" })).Count.ShouldBe(1); + } + } +} From 6096e15756ca50c3e5fd2ed387957e6ab8a3fb79 Mon Sep 17 00:00:00 2001 From: Yinier Rojas Date: Thu, 4 Oct 2018 10:23:56 -0500 Subject: [PATCH 13/13] added es.json doc --- .../Volo/Docs/Localization/Domain/es.json | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/es.json diff --git a/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/es.json b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/es.json new file mode 100644 index 0000000000..5a2813c0e7 --- /dev/null +++ b/modules/docs/src/Volo.Docs.Domain/Volo/Docs/Localization/Domain/es.json @@ -0,0 +1,14 @@ +{ + "culture": "es", + "texts": { + "Documents": "Documentos", + "BackToWebsite": "Regresar al sitio", + "Version": "Versión", + "Edit": "Editar", + "InThisDocument": "En este documento", + "GoToTop": "Subir", + "Projects": "Proyecto(s)", + "NoProjectWarning": "¡Aun no hay proyectos!", + "DocumentNotFound": "¡Oops, no se encontró el documento solicitado!" + } +} \ No newline at end of file