(IU1H+TP-KSYlLR^NNZ
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
literal 0
HcmV?d00001
diff --git a/templates/ms/applications/Company.Project.AuthServer.Host/yarn.lock b/templates/ms/applications/Company.Project.AuthServer.Host/yarn.lock
new file mode 100644
index 0000000..bd67af4
--- /dev/null
+++ b/templates/ms/applications/Company.Project.AuthServer.Host/yarn.lock
@@ -0,0 +1,337 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4"
+ integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
+ dependencies:
+ ansi-colors "^4.1.3"
+
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
+ dependencies:
+ bootstrap-datepicker "^1.10.0"
+
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
+ dependencies:
+ bootstrap-daterangepicker "^3.1.0"
+
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ bootstrap "^5.3.3"
+
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
+ dependencies:
+ "@abp/utils" "~8.3.0"
+
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
+ dependencies:
+ "@abp/datatables.net" "~8.3.0"
+ datatables.net-bs5 "^2.0.8"
+
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ datatables.net "^2.0.8"
+
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ "@fortawesome/fontawesome-free" "^6.5.2"
+
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ jquery-form "^4.3.0"
+
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
+ dependencies:
+ "@abp/jquery-validation" "~8.3.0"
+ jquery-validation-unobtrusive "^4.0.0"
+
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ jquery-validation "^1.20.1"
+
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ jquery "~3.7.1"
+
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ lodash "^4.17.21"
+
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ luxon "^3.4.4"
+
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ malihu-custom-scrollbar-plugin "^3.1.5"
+
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
+ dependencies:
+ moment "^2.30.1"
+
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ select2 "^4.0.13"
+
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ sweetalert2 "^11.3.6"
+
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ timeago "^1.6.7"
+
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ toastr "^2.1.4"
+
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
+ dependencies:
+ just-compare "^2.3.0"
+
+"@fortawesome/fontawesome-free@^6.5.2":
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.6.0.tgz#0e984f0f2344ee513c185d87d77defac4c0c8224"
+ integrity sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow==
+
+ansi-colors@^4.1.3:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+
+bootstrap-datepicker@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/bootstrap-datepicker/-/bootstrap-datepicker-1.10.0.tgz#61612bbe8bf0a69a5bce32bbcdda93ebb6ccf24a"
+ integrity sha512-lWxtSYddAQOpbAO8UhYhHLcK6425eWoSjb5JDvZU3ePHEPF6A3eUr51WKaFy4PccU19JRxUG6wEU3KdhtKfvpg==
+ dependencies:
+ jquery ">=3.4.0 <4.0.0"
+
+bootstrap-daterangepicker@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bootstrap-daterangepicker/-/bootstrap-daterangepicker-3.1.0.tgz#632e6fb2de4b6360c5c0a9d5f6adb9aace051fe8"
+ integrity sha512-oaQZx6ZBDo/dZNyXGVi2rx5GmFXThyQLAxdtIqjtLlYVaQUfQALl5JZMJJZzyDIX7blfy4ppZPAJ10g8Ma4d/g==
+ dependencies:
+ jquery ">=1.10"
+ moment "^2.9.0"
+
+bootstrap@^5.3.3:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.3.tgz#de35e1a765c897ac940021900fcbb831602bac38"
+ integrity sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==
+
+datatables.net-bs5@^2.0.8:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-2.1.6.tgz#863c75472981d2cfad66f3cfd24e3c7da46986d6"
+ integrity sha512-GLp98kE2lJI6cBgLaCA1he+KhD3pcVJLK4QU8oD3Zb8uHAduX0BA2JPndFZqXJs4CS0L16fel8Xs3+0wGzFxSg==
+ dependencies:
+ datatables.net "2.1.6"
+ jquery ">=1.7"
+
+datatables.net@2.1.6, datatables.net@^2.0.8:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-2.1.6.tgz#563a7fb2ae206a60a83ec0aba011ce7e75a65d1f"
+ integrity sha512-ziX0Wz91oDJ4o7gQNuGxQiVK91OUu/bRcXyxa6EZtDwLObmaGKpkCNS59QpzrGtIytQIVFtLfF1EDdYid5RVog==
+ dependencies:
+ jquery ">=1.7"
+
+jquery-form@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/jquery-form/-/jquery-form-4.3.0.tgz#7d3961c314a1f2d15298f4af1d3943f54f4149c6"
+ integrity sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ==
+ dependencies:
+ jquery ">=1.7.2"
+
+jquery-mousewheel@>=3.0.6:
+ version "3.1.13"
+ resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz#06f0335f16e353a695e7206bf50503cb523a6ee5"
+
+jquery-validation-unobtrusive@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#dfcf25a558496a2c883db6021d10f5398d15f99d"
+ integrity sha512-1ervYFFv6LX/rp7ktuLnMakHNG0piNRDyROI8Ir3hL1vPIwylAehB1AY3BPrYJnzW3WmwWryZq+Bz4sazZK9iQ==
+ dependencies:
+ jquery "^3.6.0"
+ jquery-validation ">=1.19"
+
+jquery-validation@>=1.19, jquery-validation@^1.20.1:
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.21.0.tgz#78fc05ab76020912a246af3661b3f54a438bca93"
+ integrity sha512-xNot0rlUIgu7duMcQ5qb6MGkGL/Z1PQaRJQoZAURW9+a/2PGOUxY36o/WyNeP2T9R6jvWB8Z9lUVvvQWI/Zs5w==
+
+jquery@>=1.10:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.0.tgz#fe2c01a05da500709006d8790fe21c8a39d75612"
+ integrity sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==
+
+jquery@>=1.12.0, jquery@>=1.7, jquery@>=1.7.2:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca"
+
+"jquery@>=1.5.0 <4.0":
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
+ integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==
+
+"jquery@>=3.4.0 <4.0.0", jquery@^3.6.0, jquery@~3.7.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de"
+ integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
+
+just-compare@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-2.3.0.tgz#a2adcc1d1940536263275f5a1ef1298bcacfeda7"
+ integrity sha512-6shoR7HDT+fzfL3gBahx1jZG3hWLrhPAf+l7nCwahDdT9XDtosB9kIF0ZrzUp5QY8dJWfQVr5rnsPqsbvflDzg==
+
+lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+luxon@^3.4.4:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.5.0.tgz#6b6f65c5cd1d61d1fd19dbf07ee87a50bf4b8e20"
+ integrity sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==
+
+malihu-custom-scrollbar-plugin@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.5.tgz#310cecc5e59415a1c29e9dfb5d2b6e01d66a29ef"
+ integrity sha1-MQzsxeWUFaHCnp37XStuAdZqKe8=
+ dependencies:
+ jquery-mousewheel ">=3.0.6"
+
+moment@^2.30.1:
+ version "2.30.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
+ integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
+
+moment@^2.9.0:
+ version "2.29.4"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
+ integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
+
+select2@^4.0.13:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/select2/-/select2-4.0.13.tgz#0dbe377df3f96167c4c1626033e924372d8ef44d"
+ integrity sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==
+
+sweetalert2@^11.3.6:
+ version "11.7.5"
+ resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.7.5.tgz#d905b792cfcb69d5db479f839151ce12d8804a8e"
+ integrity sha512-RBPKdK8Uf9/bz9r4vy7x6sGqf0MioSXt1po1lAwwcl3AwbjHVTc5S0yud4ZJKU1EhvJFVDrFoqIpHwWERwZJEA==
+
+timeago@^1.6.7:
+ version "1.6.7"
+ resolved "https://registry.yarnpkg.com/timeago/-/timeago-1.6.7.tgz#afd467c29a911e697fc22a81888c7c3022783cb5"
+ integrity sha512-FikcjN98+ij0siKH4VO4dZ358PR3oDDq4Vdl1+sN9gWz1/+JXGr3uZbUShYH/hL7bMhcTpPbplJU5Tej4b4jbQ==
+ dependencies:
+ jquery ">=1.5.0 <4.0"
+
+toastr@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/toastr/-/toastr-2.1.4.tgz#8b43be64fb9d0c414871446f2db8e8ca4e95f181"
+ dependencies:
+ jquery ">=1.12.0"
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/BackendAdminAppMenuContributor.cs b/templates/ms/applications/Company.Project.BackendAdminApp.Host/BackendAdminAppMenuContributor.cs
new file mode 100644
index 0000000..97c3185
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/BackendAdminAppMenuContributor.cs
@@ -0,0 +1,40 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp.UI.Navigation;
+using Volo.Abp.Users;
+
+namespace Company.Project.BackendAdminApp;
+
+public class BackendAdminAppMenuContributor : IMenuContributor
+{
+ private readonly IConfiguration _configuration;
+
+ public BackendAdminAppMenuContributor(IConfiguration configuration)
+ {
+ _configuration = configuration;
+ }
+
+ public async Task ConfigureMenuAsync(MenuConfigurationContext context)
+ {
+ if (context.Menu.Name == StandardMenus.User)
+ {
+ await ConfigureUserMenuAsync(context);
+ }
+ }
+
+ private Task ConfigureUserMenuAsync(MenuConfigurationContext context)
+ {
+ var currentUser = context.ServiceProvider.GetRequiredService();
+ var identityServerUrl = _configuration["AuthServer:Authority"] ?? "";
+
+ if (currentUser.IsAuthenticated)
+ {
+ context.Menu.AddItem(new ApplicationMenuItem("Account.Manage", "Manage Your Profile", $"{identityServerUrl.EnsureEndsWith('/')}Account/Manage", icon: "fa fa-cog", order: 1000, null, "_blank"));
+ context.Menu.AddItem(new ApplicationMenuItem("Account.Logout", "Logout", url: "/Account/Logout", icon: "fa fa-power-off", order: int.MaxValue - 1000));
+ }
+
+ return Task.CompletedTask;
+ }
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/BrandingProvider.cs b/templates/ms/applications/Company.Project.BackendAdminApp.Host/BrandingProvider.cs
new file mode 100644
index 0000000..8a7b0e2
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/BrandingProvider.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Ui.Branding;
+
+namespace Company.Project.BackendAdminApp;
+
+public class BrandingProvider : DefaultBrandingProvider, ISingletonDependency
+{
+ public override string AppName => "Backend Admin App";
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/Company.Project.BackendAdminApp.Host.csproj b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Company.Project.BackendAdminApp.Host.csproj
index bff00ae..a119820 100644
--- a/templates/ms/applications/Company.Project.BackendAdminApp.Host/Company.Project.BackendAdminApp.Host.csproj
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Company.Project.BackendAdminApp.Host.csproj
@@ -1,6 +1,6 @@
- net8.0
+ net10.0
Company.Project.BackendAdminApp
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/AccountController.cs b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/AccountController.cs
new file mode 100644
index 0000000..e3f9e1c
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/AccountController.cs
@@ -0,0 +1,8 @@
+using Volo.Abp.AspNetCore.Mvc.Authentication;
+
+namespace Company.Project.BackendAdminApp.Controllers;
+
+public class AccountController : ChallengeAccountController
+{
+
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/HomeController.cs b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/HomeController.cs
new file mode 100644
index 0000000..70dfecf
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/HomeController.cs
@@ -0,0 +1,12 @@
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp.AspNetCore.Mvc;
+
+namespace Company.Project.BackendAdminApp.Controllers;
+
+public class HomeController : AbpController
+{
+ public ActionResult Index()
+ {
+ return Redirect("/Identity/Users");
+ }
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/TestController.cs b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/TestController.cs
new file mode 100644
index 0000000..6ef9c4a
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Controllers/TestController.cs
@@ -0,0 +1,35 @@
+using System;
+using System.Linq;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authentication;
+using Microsoft.AspNetCore.Mvc;
+using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Authorization.Permissions;
+using Volo.Abp.Json;
+
+namespace Company.Project.BackendAdminApp.Controllers;
+
+public class TestController : AbpController
+{
+ private readonly IJsonSerializer _jsonSerializer;
+ private readonly IPermissionChecker _permissionChecker;
+
+ public TestController(IJsonSerializer jsonSerializer, IPermissionChecker permissionChecker)
+ {
+ _jsonSerializer = jsonSerializer;
+ _permissionChecker = permissionChecker;
+ }
+
+ [HttpGet]
+ public async Task Index()
+ {
+ var newLine = Environment.NewLine + Environment.NewLine;
+
+ return Content(
+ "Claims: " + User.Claims.Select(c => $"{c.Type} = {c.Value}").JoinAsString(" | ") + newLine +
+ "CurrentUser: " + _jsonSerializer.Serialize(CurrentUser) + newLine +
+ "access_token: " + await HttpContext.GetTokenAsync("access_token") + newLine +
+ "isGranted: AbpIdentity.Users: " + await _permissionChecker.IsGrantedAsync("AbpIdentity.Users")
+ );
+ }
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/Dockerfile b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Dockerfile
new file mode 100644
index 0000000..3d45bc6
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Dockerfile
@@ -0,0 +1,25 @@
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+WORKDIR /app
+EXPOSE 80
+
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+WORKDIR /src
+COPY ["applications/Company.Project.BackendAdminApp.Host/Company.Project.BackendAdminApp.Host.csproj", "applications/Company.Project.BackendAdminApp.Host/"]
+COPY ["modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj", "modules/product/src/ProductManagement.Web/"]
+COPY ["modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj", "modules/product/src/ProductManagement.HttpApi/"]
+COPY ["modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj", "modules/product/src/ProductManagement.Application.Contracts/"]
+COPY ["modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj", "modules/product/src/ProductManagement.Domain.Shared/"]
+COPY ["modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj", "modules/product/src/ProductManagement.HttpApi.Client/"]
+COPY ["shared/Company.Project.Shared/Company.Project.Shared.csproj", "shared/Company.Project.Shared/"]
+RUN dotnet restore "applications/Company.Project.BackendAdminApp.Host/Company.Project.BackendAdminApp.Host.csproj" -nowarn:msb3202,msb3277,nu1503
+COPY . .
+WORKDIR "/src/applications/Company.Project.BackendAdminApp.Host"
+RUN dotnet build "Company.Project.BackendAdminApp.Host.csproj" --no-restore -nowarn:msb3202,msb3277,nu1503 -c Release -o /app/build
+
+FROM build AS publish
+RUN dotnet publish "Company.Project.BackendAdminApp.Host.csproj" --no-restore -nowarn:msb3202,msb3277,nu1503 -c Release -o /app/publish
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app/publish .
+ENTRYPOINT ["dotnet", "Company.Project.BackendAdminApp.Host.dll"]
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/Dockerfile.original b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Dockerfile.original
new file mode 100644
index 0000000..3d45bc6
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Dockerfile.original
@@ -0,0 +1,25 @@
+FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
+WORKDIR /app
+EXPOSE 80
+
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+WORKDIR /src
+COPY ["applications/Company.Project.BackendAdminApp.Host/Company.Project.BackendAdminApp.Host.csproj", "applications/Company.Project.BackendAdminApp.Host/"]
+COPY ["modules/product/src/ProductManagement.Web/ProductManagement.Web.csproj", "modules/product/src/ProductManagement.Web/"]
+COPY ["modules/product/src/ProductManagement.HttpApi/ProductManagement.HttpApi.csproj", "modules/product/src/ProductManagement.HttpApi/"]
+COPY ["modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj", "modules/product/src/ProductManagement.Application.Contracts/"]
+COPY ["modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj", "modules/product/src/ProductManagement.Domain.Shared/"]
+COPY ["modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj", "modules/product/src/ProductManagement.HttpApi.Client/"]
+COPY ["shared/Company.Project.Shared/Company.Project.Shared.csproj", "shared/Company.Project.Shared/"]
+RUN dotnet restore "applications/Company.Project.BackendAdminApp.Host/Company.Project.BackendAdminApp.Host.csproj" -nowarn:msb3202,msb3277,nu1503
+COPY . .
+WORKDIR "/src/applications/Company.Project.BackendAdminApp.Host"
+RUN dotnet build "Company.Project.BackendAdminApp.Host.csproj" --no-restore -nowarn:msb3202,msb3277,nu1503 -c Release -o /app/build
+
+FROM build AS publish
+RUN dotnet publish "Company.Project.BackendAdminApp.Host.csproj" --no-restore -nowarn:msb3202,msb3277,nu1503 -c Release -o /app/publish
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app/publish .
+ENTRYPOINT ["dotnet", "Company.Project.BackendAdminApp.Host.dll"]
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/Properties/launchSettings.json b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Properties/launchSettings.json
new file mode 100644
index 0000000..6fddbd5
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "https://localhost:44354",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Company.Project.BackendAdminApp.Host": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "applicationUrl": "https://localhost:44354",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/abp.resourcemapping.js b/templates/ms/applications/Company.Project.BackendAdminApp.Host/abp.resourcemapping.js
new file mode 100644
index 0000000..4a2ad45
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/abp.resourcemapping.js
@@ -0,0 +1,11 @@
+module.exports = {
+ aliases: {
+
+ },
+ clean: [
+
+ ],
+ mappings: {
+
+ }
+};
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/appsettings.Development.json b/templates/ms/applications/Company.Project.BackendAdminApp.Host/appsettings.Development.json
new file mode 100644
index 0000000..e203e94
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/appsettings.Development.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Debug",
+ "System": "Information",
+ "Microsoft": "Information"
+ }
+ }
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/appsettings.json b/templates/ms/applications/Company.Project.BackendAdminApp.Host/appsettings.json
new file mode 100644
index 0000000..5915bf7
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/appsettings.json
@@ -0,0 +1,20 @@
+{
+ "AuthServer": {
+ "Authority": "https://localhost:44399",
+ "RequireHttpsMetadata": "true",
+ "ClientId": "backend-admin-app-client",
+ "ClientSecret": "1q2w3e*"
+ },
+ "RemoteServices": {
+ "Default": {
+ "BaseUrl": "https://localhost:44315/"
+ }
+ },
+ "Redis": {
+ "Configuration": "localhost:6379"
+ },
+ "Serilog": {
+ "MinimumLevel": { "Default": "Warning" }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/gulpfile.js b/templates/ms/applications/Company.Project.BackendAdminApp.Host/gulpfile.js
new file mode 100644
index 0000000..8660b9a
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/gulpfile.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var gulp = require("gulp"),
+ path = require('path'),
+ copyResources = require('./node_modules/@abp/aspnetcore.mvc.ui/gulp/copy-resources.js');
+
+exports.default = function(){
+ return copyResources(path.resolve('./'));
+};
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/package.json b/templates/ms/applications/Company.Project.BackendAdminApp.Host/package.json
new file mode 100644
index 0000000..3415774
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/package.json
@@ -0,0 +1,8 @@
+{
+ "version": "0.1.0",
+ "name": "my-project-backendadminapp-host",
+ "private": true,
+ "dependencies": {
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.0.0"
+ }
+}
diff --git a/templates/ms/applications/Company.Project.BackendAdminApp.Host/yarn.lock b/templates/ms/applications/Company.Project.BackendAdminApp.Host/yarn.lock
new file mode 100644
index 0000000..bd67af4
--- /dev/null
+++ b/templates/ms/applications/Company.Project.BackendAdminApp.Host/yarn.lock
@@ -0,0 +1,337 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@abp/aspnetcore.mvc.ui.theme.basic@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-8.3.0.tgz#a2d17eb5da2c3abfad4bcc842cfcda0e58a130a4"
+ integrity sha512-T2dg7WlvNSrwTCfy5wk4gqiJ/15kIjMGM4wLXIJcMYn60yGY/YeX6Q4A3R/qJzfl4JdgW5rt3GpdKv86y/ADXg==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui.theme.shared" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui.theme.shared@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-8.3.0.tgz#5d6bb5181a62770e9cb967980b77e75c115c5ed7"
+ integrity sha512-o/0eh8jLS+YJiseTKzzioUz0vNnMFzyoz+mkyA4PlO1gqw2JFhzPhTBZ3cuyV9QlxUfEA8dWAkqAUX6vqiHwkw==
+ dependencies:
+ "@abp/aspnetcore.mvc.ui" "~8.3.0"
+ "@abp/bootstrap" "~8.3.0"
+ "@abp/bootstrap-datepicker" "~8.3.0"
+ "@abp/bootstrap-daterangepicker" "~8.3.0"
+ "@abp/datatables.net-bs5" "~8.3.0"
+ "@abp/font-awesome" "~8.3.0"
+ "@abp/jquery-form" "~8.3.0"
+ "@abp/jquery-validation-unobtrusive" "~8.3.0"
+ "@abp/lodash" "~8.3.0"
+ "@abp/luxon" "~8.3.0"
+ "@abp/malihu-custom-scrollbar-plugin" "~8.3.0"
+ "@abp/moment" "~8.3.0"
+ "@abp/select2" "~8.3.0"
+ "@abp/sweetalert2" "~8.3.0"
+ "@abp/timeago" "~8.3.0"
+ "@abp/toastr" "~8.3.0"
+
+"@abp/aspnetcore.mvc.ui@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-8.3.0.tgz#d7ba0539bfcc6661a347dea7f952489010b3e816"
+ integrity sha512-OxgZhLKiXGFYYpNJ5O/IbhinsniiBPv9586e+1Soar0GckCMIIegJxnJb1Bo1O75blrcK2cIU6LqjRT1FXt2Lw==
+ dependencies:
+ ansi-colors "^4.1.3"
+
+"@abp/bootstrap-datepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-8.3.0.tgz#8c1bf9efec37b671d8f28b8b1e89c1ac66684267"
+ integrity sha512-KCwMtm7x+cnKPeNMzhjDJUce0stwu4e57ibmvA6sMf1tmj+yB256O4E2hIDDohiT3vP/zV8HVHX6uATlcmGC9w==
+ dependencies:
+ bootstrap-datepicker "^1.10.0"
+
+"@abp/bootstrap-daterangepicker@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap-daterangepicker/-/bootstrap-daterangepicker-8.3.0.tgz#2b8ed978333502677916f88cbb3e1d1b1c8a3a17"
+ integrity sha512-uQSfuCQogl4BujdqvtdAoSE+z32ci8FT5+i3gLfpqbgTaxvY/Kv5NxAUH5/1sjnuAE7SMWO+eVvI3V0pXgQohg==
+ dependencies:
+ bootstrap-daterangepicker "^3.1.0"
+
+"@abp/bootstrap@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-8.3.0.tgz#96d6ea7e6ac30f6e34e495a4224f56f7b2a1a7a3"
+ integrity sha512-5AmdTtakmWhZmHrb7ibvvf+KwF9OGadpAe7Kv9mNEE02K2qkp7Xw4r5o/bgVl7YfLC1FA6GZZXrV2s2t0gjHtg==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ bootstrap "^5.3.3"
+
+"@abp/core@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/core/-/core-8.3.0.tgz#3a68f5a9549efcc3e13500e301f2576751b51445"
+ integrity sha512-zrxnZi4qij/Y4AZWaXuPqs3Dd7gBtU/onX7FkYxLgQDxYBfx+84QAnPRNRFKMWaD/wKbTUB0wA66U3t2aiQX9Q==
+ dependencies:
+ "@abp/utils" "~8.3.0"
+
+"@abp/datatables.net-bs5@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs5/-/datatables.net-bs5-8.3.0.tgz#21822ae4912a561afe9112925185aece03fcd0eb"
+ integrity sha512-GOGYSSHp3iPUDFRX2Y3C0wkiCOJDuYuK/zUSzQLNpOvBMZO+I/oWBcZM+qkVowIzsoRlAGV9+CVV2B/B05qidA==
+ dependencies:
+ "@abp/datatables.net" "~8.3.0"
+ datatables.net-bs5 "^2.0.8"
+
+"@abp/datatables.net@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-8.3.0.tgz#ff697758ce9309ba8311f23aec921c4722588c8b"
+ integrity sha512-4dIdv7eN1tVouOUrlF+MIdg8zQpecyH61waqLgy1q5jMZQivrTSFZ7UWMG3WVOAYjw5zSUZHZPbzA+ttnaOPkg==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ datatables.net "^2.0.8"
+
+"@abp/font-awesome@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-8.3.0.tgz#9e4e9adc08dfca52c0a07d1608c5e5662675a4c9"
+ integrity sha512-NRxvM/dzvQC2Cj/F5i07XB/i6IVTmXcO9sOq6TWosWib0wGaPxRbCSjy8QUAYSD1QYaVQ30XMb3XXImaMGyd8A==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ "@fortawesome/fontawesome-free" "^6.5.2"
+
+"@abp/jquery-form@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-8.3.0.tgz#fa2ad2fedbe3d3528ee94cbbd4f94d48f0cb5e4d"
+ integrity sha512-olP9FmpNVTbOIewsVua0moHVYXw4Sl3chFbvTDLG6vRBohLSjllUXfgY3UEIVWR1PCqnAg+iEJZl9NHB9iOLBg==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ jquery-form "^4.3.0"
+
+"@abp/jquery-validation-unobtrusive@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-8.3.0.tgz#0992cdd33170df83c79aa3371038c0b30e451521"
+ integrity sha512-9hidjq8x8sTnP5O3K2b2x9NpxvPd9WB03ENR6OfvM89kfSmQapSvBZTlCu80YK9NaQJ6MLQRLYOCuc3GHcj3EQ==
+ dependencies:
+ "@abp/jquery-validation" "~8.3.0"
+ jquery-validation-unobtrusive "^4.0.0"
+
+"@abp/jquery-validation@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-8.3.0.tgz#bd6a72c6d86f116abe3b5d2adf3752bdbbcca887"
+ integrity sha512-6l5BZSa3N0Fou6Se7MfUSnI2dD4SYhZ2V988bgPJQ6p37XBOZ2OAj7LEIf5FSjtUzXjao/6/vqjkPNYreNikig==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ jquery-validation "^1.20.1"
+
+"@abp/jquery@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-8.3.0.tgz#9be5ef2f769680226e6a1a981026590caf3b57ef"
+ integrity sha512-GsFY+n3EtS6B0pAoKd+xMnt5Dzi5bHvIbhLgDgfQfOBzAy3twGRWsPQ3nkuXXm8TppwujMNowU1oiLKPPm0AOA==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ jquery "~3.7.1"
+
+"@abp/lodash@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-8.3.0.tgz#f5a0a496c999886f2d6999067bfac2e1f0c3969c"
+ integrity sha512-BiAsONbKR/RKG3WjRaMWVmhNe1ELEsykVq+ogG1Rhk3kwPbvze3TS8k2p0Lu/RC41/BmDUmJ5abg1pUMwkRT8w==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ lodash "^4.17.21"
+
+"@abp/luxon@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-8.3.0.tgz#7dd3f756be1605506e26f7ac76b80cc082a12d07"
+ integrity sha512-8gdI5BtXkVp0sFg89QVDe8AvgQ7Qfq4JCqz2PMrKPSATR3H8GD6BCaEYpRp6CNTCjVrQjGZdzKgUyea1D3dHbw==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ luxon "^3.4.4"
+
+"@abp/malihu-custom-scrollbar-plugin@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-8.3.0.tgz#c88c132c3402bbb02054ca7d446051950f87a817"
+ integrity sha512-nd/mb6LJa6fMxal8PGcIjIRIoZ/UHCd01WDC9YI2H4wGCGx0CA0JyHso5oc/OEzJhUL8ujO/vYm9uLb7YahPtA==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ malihu-custom-scrollbar-plugin "^3.1.5"
+
+"@abp/moment@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/moment/-/moment-8.3.0.tgz#8e4f7a523ab76ef9e4cd96a399560bad38d38d1a"
+ integrity sha512-LywSsKuQ2GN/Btmle6CcTKa811zbvUWdC+RLQA792K9HyBs6LvN0qRRluEQZgplairRgh2pDOg8tdFlUERkv2w==
+ dependencies:
+ moment "^2.30.1"
+
+"@abp/select2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-8.3.0.tgz#ef4742fcd345394767f46180f61c6cabbd0b3867"
+ integrity sha512-bdLt2+ImxxpiZl4HGbYJpdDROQUT7/Z/+8A+6oJNacq3lNekdvufLYgTMxKru6zTbnd9j3HFKMOTE1eRjb9Xqg==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ select2 "^4.0.13"
+
+"@abp/sweetalert2@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/sweetalert2/-/sweetalert2-8.3.0.tgz#a63020d57e44f7940817287d3d9676288bfb85aa"
+ integrity sha512-ooqPM4Z2v2scnMo5l8ycTmp6t/sW4sCsvIkJ4TyM876WLQJaZxJdOao4RQWuU+dVFr9zg8cOwqLH4q7UEiO6ww==
+ dependencies:
+ "@abp/core" "~8.3.0"
+ sweetalert2 "^11.3.6"
+
+"@abp/timeago@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-8.3.0.tgz#b3b8d6927bf170f77af848bc1925e5ef6835bd55"
+ integrity sha512-Dd6xaUoF9Bp4F9WJnTsFBqY+Gt++UR7UmLvBZL/dvthkeNCu2I8MUsmshkUUjY0lIXpjZwefUOuyupQrgHXPMg==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ timeago "^1.6.7"
+
+"@abp/toastr@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-8.3.0.tgz#e68a2bd8f731e79034594bc2c736f7c66b3df1af"
+ integrity sha512-aWK/RaX/FmcEKhJLjsw1A0K2c04m2fRJkmo9NwzBCSscy6Msw9IMkqNWLiFDThMU8/qKzq7wq3Vmk/C0IpeAwA==
+ dependencies:
+ "@abp/jquery" "~8.3.0"
+ toastr "^2.1.4"
+
+"@abp/utils@~8.3.0":
+ version "8.3.0"
+ resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-8.3.0.tgz#96ae9266ad4d833fd9d723acef7fc85fabf618d9"
+ integrity sha512-w/XAqza4Z8wBWRoj5uPNKbd1/bE9L/uUWk6EUSBKmljMRryWQBmaPkb1XgvrOMQIbyyF60tUvvipapQLPVh6hw==
+ dependencies:
+ just-compare "^2.3.0"
+
+"@fortawesome/fontawesome-free@^6.5.2":
+ version "6.6.0"
+ resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.6.0.tgz#0e984f0f2344ee513c185d87d77defac4c0c8224"
+ integrity sha512-60G28ke/sXdtS9KZCpZSHHkCbdsOGEhIUGlwq6yhY74UpTiToIh8np7A8yphhM4BWsvNFtIvLpi4co+h9Mr9Ow==
+
+ansi-colors@^4.1.3:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
+ integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
+
+bootstrap-datepicker@^1.10.0:
+ version "1.10.0"
+ resolved "https://registry.yarnpkg.com/bootstrap-datepicker/-/bootstrap-datepicker-1.10.0.tgz#61612bbe8bf0a69a5bce32bbcdda93ebb6ccf24a"
+ integrity sha512-lWxtSYddAQOpbAO8UhYhHLcK6425eWoSjb5JDvZU3ePHEPF6A3eUr51WKaFy4PccU19JRxUG6wEU3KdhtKfvpg==
+ dependencies:
+ jquery ">=3.4.0 <4.0.0"
+
+bootstrap-daterangepicker@^3.1.0:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/bootstrap-daterangepicker/-/bootstrap-daterangepicker-3.1.0.tgz#632e6fb2de4b6360c5c0a9d5f6adb9aace051fe8"
+ integrity sha512-oaQZx6ZBDo/dZNyXGVi2rx5GmFXThyQLAxdtIqjtLlYVaQUfQALl5JZMJJZzyDIX7blfy4ppZPAJ10g8Ma4d/g==
+ dependencies:
+ jquery ">=1.10"
+ moment "^2.9.0"
+
+bootstrap@^5.3.3:
+ version "5.3.3"
+ resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.3.tgz#de35e1a765c897ac940021900fcbb831602bac38"
+ integrity sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==
+
+datatables.net-bs5@^2.0.8:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/datatables.net-bs5/-/datatables.net-bs5-2.1.6.tgz#863c75472981d2cfad66f3cfd24e3c7da46986d6"
+ integrity sha512-GLp98kE2lJI6cBgLaCA1he+KhD3pcVJLK4QU8oD3Zb8uHAduX0BA2JPndFZqXJs4CS0L16fel8Xs3+0wGzFxSg==
+ dependencies:
+ datatables.net "2.1.6"
+ jquery ">=1.7"
+
+datatables.net@2.1.6, datatables.net@^2.0.8:
+ version "2.1.6"
+ resolved "https://registry.yarnpkg.com/datatables.net/-/datatables.net-2.1.6.tgz#563a7fb2ae206a60a83ec0aba011ce7e75a65d1f"
+ integrity sha512-ziX0Wz91oDJ4o7gQNuGxQiVK91OUu/bRcXyxa6EZtDwLObmaGKpkCNS59QpzrGtIytQIVFtLfF1EDdYid5RVog==
+ dependencies:
+ jquery ">=1.7"
+
+jquery-form@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/jquery-form/-/jquery-form-4.3.0.tgz#7d3961c314a1f2d15298f4af1d3943f54f4149c6"
+ integrity sha512-q3uaVCEWdLOYUCI6dpNdwf/7cJFOsUgdpq6r0taxtGQ5NJSkOzofyWm4jpOuJ5YxdmL1FI5QR+q+HB63HHLGnQ==
+ dependencies:
+ jquery ">=1.7.2"
+
+jquery-mousewheel@>=3.0.6:
+ version "3.1.13"
+ resolved "https://registry.yarnpkg.com/jquery-mousewheel/-/jquery-mousewheel-3.1.13.tgz#06f0335f16e353a695e7206bf50503cb523a6ee5"
+
+jquery-validation-unobtrusive@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-4.0.0.tgz#dfcf25a558496a2c883db6021d10f5398d15f99d"
+ integrity sha512-1ervYFFv6LX/rp7ktuLnMakHNG0piNRDyROI8Ir3hL1vPIwylAehB1AY3BPrYJnzW3WmwWryZq+Bz4sazZK9iQ==
+ dependencies:
+ jquery "^3.6.0"
+ jquery-validation ">=1.19"
+
+jquery-validation@>=1.19, jquery-validation@^1.20.1:
+ version "1.21.0"
+ resolved "https://registry.yarnpkg.com/jquery-validation/-/jquery-validation-1.21.0.tgz#78fc05ab76020912a246af3661b3f54a438bca93"
+ integrity sha512-xNot0rlUIgu7duMcQ5qb6MGkGL/Z1PQaRJQoZAURW9+a/2PGOUxY36o/WyNeP2T9R6jvWB8Z9lUVvvQWI/Zs5w==
+
+jquery@>=1.10:
+ version "3.7.0"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.0.tgz#fe2c01a05da500709006d8790fe21c8a39d75612"
+ integrity sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==
+
+jquery@>=1.12.0, jquery@>=1.7, jquery@>=1.7.2:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.3.1.tgz#958ce29e81c9790f31be7792df5d4d95fc57fbca"
+
+"jquery@>=1.5.0 <4.0":
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
+ integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==
+
+"jquery@>=3.4.0 <4.0.0", jquery@^3.6.0, jquery@~3.7.1:
+ version "3.7.1"
+ resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de"
+ integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==
+
+just-compare@^2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-2.3.0.tgz#a2adcc1d1940536263275f5a1ef1298bcacfeda7"
+ integrity sha512-6shoR7HDT+fzfL3gBahx1jZG3hWLrhPAf+l7nCwahDdT9XDtosB9kIF0ZrzUp5QY8dJWfQVr5rnsPqsbvflDzg==
+
+lodash@^4.17.21:
+ version "4.17.21"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+ integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+luxon@^3.4.4:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/luxon/-/luxon-3.5.0.tgz#6b6f65c5cd1d61d1fd19dbf07ee87a50bf4b8e20"
+ integrity sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==
+
+malihu-custom-scrollbar-plugin@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.yarnpkg.com/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.1.5.tgz#310cecc5e59415a1c29e9dfb5d2b6e01d66a29ef"
+ integrity sha1-MQzsxeWUFaHCnp37XStuAdZqKe8=
+ dependencies:
+ jquery-mousewheel ">=3.0.6"
+
+moment@^2.30.1:
+ version "2.30.1"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae"
+ integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
+
+moment@^2.9.0:
+ version "2.29.4"
+ resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.4.tgz#3dbe052889fe7c1b2ed966fcb3a77328964ef108"
+ integrity sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==
+
+select2@^4.0.13:
+ version "4.0.13"
+ resolved "https://registry.yarnpkg.com/select2/-/select2-4.0.13.tgz#0dbe377df3f96167c4c1626033e924372d8ef44d"
+ integrity sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw==
+
+sweetalert2@^11.3.6:
+ version "11.7.5"
+ resolved "https://registry.yarnpkg.com/sweetalert2/-/sweetalert2-11.7.5.tgz#d905b792cfcb69d5db479f839151ce12d8804a8e"
+ integrity sha512-RBPKdK8Uf9/bz9r4vy7x6sGqf0MioSXt1po1lAwwcl3AwbjHVTc5S0yud4ZJKU1EhvJFVDrFoqIpHwWERwZJEA==
+
+timeago@^1.6.7:
+ version "1.6.7"
+ resolved "https://registry.yarnpkg.com/timeago/-/timeago-1.6.7.tgz#afd467c29a911e697fc22a81888c7c3022783cb5"
+ integrity sha512-FikcjN98+ij0siKH4VO4dZ358PR3oDDq4Vdl1+sN9gWz1/+JXGr3uZbUShYH/hL7bMhcTpPbplJU5Tej4b4jbQ==
+ dependencies:
+ jquery ">=1.5.0 <4.0"
+
+toastr@^2.1.4:
+ version "2.1.4"
+ resolved "https://registry.yarnpkg.com/toastr/-/toastr-2.1.4.tgz#8b43be64fb9d0c414871446f2db8e8ca4e95f181"
+ dependencies:
+ jquery ">=1.12.0"
diff --git a/templates/ms/applications/Company.Project.ConsoleClientDemo/ClientDemoService.cs b/templates/ms/applications/Company.Project.ConsoleClientDemo/ClientDemoService.cs
new file mode 100644
index 0000000..629eb42
--- /dev/null
+++ b/templates/ms/applications/Company.Project.ConsoleClientDemo/ClientDemoService.cs
@@ -0,0 +1,146 @@
+using System;
+using System.Net.Http;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Options;
+using ProductManagement;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Http.Client;
+using Volo.Abp.Identity;
+using Volo.Abp.IdentityModel;
+using Volo.Abp.TenantManagement;
+
+namespace Company.Project.ConsoleClientDemo;
+
+public class ClientDemoService : ITransientDependency
+{
+ private readonly IIdentityUserAppService _userAppService;
+ private readonly ITenantAppService _tenantAppService;
+ private readonly IProductAppService _productAppService;
+ private readonly IIdentityModelAuthenticationService _authenticator;
+ private readonly AbpRemoteServiceOptions _remoteServiceOptions;
+
+ public ClientDemoService(
+ IIdentityUserAppService userAppService,
+ IProductAppService productAppService,
+ IIdentityModelAuthenticationService authenticator,
+ IOptions remoteServiceOptions,
+ ITenantAppService tenantAppService)
+ {
+ _userAppService = userAppService;
+ _authenticator = authenticator;
+ _tenantAppService = tenantAppService;
+ _remoteServiceOptions = remoteServiceOptions.Value;
+ _productAppService = productAppService;
+ }
+
+ public async Task RunAsync()
+ {
+ await TestWithHttpClient();
+ await TestIdentityService();
+ await TestTenantManagementService();
+ await TestProductService();
+ }
+
+ private async Task TestWithHttpClient()
+ {
+ Console.WriteLine();
+ Console.WriteLine("*** TestWithHttpClient ************************************");
+
+ try
+ {
+ using (var client = new HttpClient())
+ {
+ await _authenticator.TryAuthenticateAsync(client);
+
+ var url = GetServerUrl() + "Test/Index";
+
+ var response = await client.GetAsync(url);
+
+ if (!response.IsSuccessStatusCode)
+ {
+ Console.WriteLine(response.StatusCode);
+ }
+ else
+ {
+ var responseContent = await response.Content.ReadAsStringAsync();
+ Console.WriteLine(responseContent);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e);
+ }
+ }
+
+ private async Task TestIdentityService()
+ {
+ Console.WriteLine();
+ Console.WriteLine("*** TestIdentityService ************************************");
+
+ try
+ {
+ var output = await _userAppService.GetListAsync(new GetIdentityUsersInput());
+
+ Console.WriteLine("Total user count: " + output.TotalCount);
+
+ foreach (var user in output.Items)
+ {
+ Console.WriteLine($"- UserName={user.UserName}, Email={user.Email}, Name={user.Name}, Surname={user.Surname}");
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e);
+ }
+ }
+
+ private async Task TestTenantManagementService()
+ {
+ Console.WriteLine();
+ Console.WriteLine("*** TestTenantManagementService ************************************");
+
+ try
+ {
+ var output = await _tenantAppService.GetListAsync(new GetTenantsInput());
+
+ Console.WriteLine("Total tenant count: " + output.TotalCount);
+
+ foreach (var tenant in output.Items)
+ {
+ Console.WriteLine($"- Id={tenant.Id}, Name={tenant.Name}");
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e);
+ }
+ }
+
+ private async Task TestProductService()
+ {
+ Console.WriteLine();
+ Console.WriteLine("*** TestProductService ************************************");
+
+ try
+ {
+ var output = await _productAppService.GetListAsync();
+
+ Console.WriteLine("Total product count: " + output.Items.Count);
+
+ foreach (var product in output.Items)
+ {
+ Console.WriteLine($"- Code={product.Code}, Name={product.Name}, Price={product.Price}, StockCount={product.StockCount}");
+ }
+ }
+ catch (Exception e)
+ {
+ Console.WriteLine(e);
+ }
+ }
+
+ private string GetServerUrl()
+ {
+ return _remoteServiceOptions.RemoteServices.Default.BaseUrl.EnsureEndsWith('/');
+ }
+}
diff --git a/templates/ms/applications/Company.Project.ConsoleClientDemo/Company.Project.ConsoleClientDemo.csproj b/templates/ms/applications/Company.Project.ConsoleClientDemo/Company.Project.ConsoleClientDemo.csproj
new file mode 100644
index 0000000..fa017ca
--- /dev/null
+++ b/templates/ms/applications/Company.Project.ConsoleClientDemo/Company.Project.ConsoleClientDemo.csproj
@@ -0,0 +1,26 @@
+
+
+ net10.0
+ Exe
+ Company.Project.ConsoleClientDemo
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+ Always
+
+
+
diff --git a/templates/ms/applications/Company.Project.ConsoleClientDemo/ConsoleClientDemoHostedService.cs b/templates/ms/applications/Company.Project.ConsoleClientDemo/ConsoleClientDemoHostedService.cs
new file mode 100644
index 0000000..4f200bc
--- /dev/null
+++ b/templates/ms/applications/Company.Project.ConsoleClientDemo/ConsoleClientDemoHostedService.cs
@@ -0,0 +1,31 @@
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Volo.Abp;
+
+namespace Company.Project.ConsoleClientDemo;
+
+public class ConsoleClientDemoHostedService : IHostedService
+{
+ public async Task StartAsync(CancellationToken cancellationToken)
+ {
+ using (var application = AbpApplicationFactory.Create(options =>
+ {
+ options.Services.AddLogging(loggingBuilder =>
+ {
+ loggingBuilder.AddSerilog(dispose: true);
+ });
+ }))
+ {
+ application.Initialize();
+
+ var demo = application.ServiceProvider.GetRequiredService();
+ await demo.RunAsync();
+
+ application.Shutdown();
+ }
+ }
+
+ public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
+}
diff --git a/templates/ms/applications/Company.Project.ConsoleClientDemo/ConsoleClientDemoModule.cs b/templates/ms/applications/Company.Project.ConsoleClientDemo/ConsoleClientDemoModule.cs
new file mode 100644
index 0000000..dc9d291
--- /dev/null
+++ b/templates/ms/applications/Company.Project.ConsoleClientDemo/ConsoleClientDemoModule.cs
@@ -0,0 +1,20 @@
+using ProductManagement;
+using Volo.Abp.Autofac;
+using Volo.Abp.Http.Client.IdentityModel;
+using Volo.Abp.Identity;
+using Volo.Abp.Modularity;
+using Volo.Abp.TenantManagement;
+
+namespace Company.Project.ConsoleClientDemo;
+
+[DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpHttpClientIdentityModelModule),
+ typeof(AbpIdentityHttpApiClientModule),
+ typeof(ProductManagementHttpApiClientModule),
+ typeof(AbpTenantManagementHttpApiClientModule)
+)]
+public class ConsoleClientDemoModule : AbpModule
+{
+
+}
diff --git a/templates/ms/applications/Company.Project.ConsoleClientDemo/Program.cs b/templates/ms/applications/Company.Project.ConsoleClientDemo/Program.cs
new file mode 100644
index 0000000..96154f4
--- /dev/null
+++ b/templates/ms/applications/Company.Project.ConsoleClientDemo/Program.cs
@@ -0,0 +1,31 @@
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Serilog;
+using Serilog.Events;
+
+namespace Company.Project.ConsoleClientDemo;
+
+internal class Program
+{
+ static async Task Main(string[] args)
+ {
+ Log.Logger = new LoggerConfiguration()
+ .MinimumLevel.Debug()
+ .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
+ .Enrich.FromLogContext()
+ .WriteTo.File("Logs/logs.txt")
+ .CreateLogger();
+
+ Log.Information("Starting ConsoleClientDemo...");
+
+ await CreateHostBuilder(args).RunConsoleAsync();
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureServices((hostContext, services) =>
+ {
+ services.AddHostedService();
+ });
+}
diff --git a/templates/ms/applications/Company.Project.ConsoleClientDemo/appsettings.json b/templates/ms/applications/Company.Project.ConsoleClientDemo/appsettings.json
new file mode 100644
index 0000000..2ebfaa8
--- /dev/null
+++ b/templates/ms/applications/Company.Project.ConsoleClientDemo/appsettings.json
@@ -0,0 +1,17 @@
+{
+ "RemoteServices": {
+ "Default": {
+ "BaseUrl": "https://localhost:44329/"
+ }
+ },
+ "IdentityClients": {
+ "Default": {
+ "GrantType": "client_credentials",
+ "ClientId": "console-client-demo",
+ "ClientSecret": "1q2w3e*",
+ "Authority": "https://localhost:44399",
+ "RequireHttpsMetadata": "true",
+ "Scope": "InternalGateway IdentityService ProductService"
+ }
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/BrandingProvider.cs b/templates/ms/applications/Company.Project.PublicWebSite.Host/BrandingProvider.cs
new file mode 100644
index 0000000..f758363
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/BrandingProvider.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Ui.Branding;
+
+namespace Company.Project.PublicWebSite;
+
+public class BrandingProvider : DefaultBrandingProvider, ISingletonDependency
+{
+ public override string AppName => "Public Web Site";
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Company.Project.PublicWebSite.Host.csproj b/templates/ms/applications/Company.Project.PublicWebSite.Host/Company.Project.PublicWebSite.Host.csproj
new file mode 100644
index 0000000..e71b8ba
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Company.Project.PublicWebSite.Host.csproj
@@ -0,0 +1,22 @@
+
+
+
+ net10.0
+ Company.Project.PublicWebSite
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Dockerfile b/templates/ms/applications/Company.Project.PublicWebSite.Host/Dockerfile
new file mode 100644
index 0000000..40690f8
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Dockerfile
@@ -0,0 +1,23 @@
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
+WORKDIR /app
+EXPOSE 80
+
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
+WORKDIR /src
+COPY ["applications/Company.Project.PublicWebSite.Host/Company.Project.PublicWebSite.Host.csproj", "applications/Company.Project.PublicWebSite.Host/"]
+COPY ["modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj", "modules/product/src/ProductManagement.HttpApi.Client/"]
+COPY ["modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj", "modules/product/src/ProductManagement.Application.Contracts/"]
+COPY ["modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj", "modules/product/src/ProductManagement.Domain.Shared/"]
+COPY ["shared/Company.Project.Shared/Company.Project.Shared.csproj", "shared/Company.Project.Shared/"]
+RUN dotnet restore "applications/Company.Project.PublicWebSite.Host/Company.Project.PublicWebSite.Host.csproj" -nowarn:msb3202,msb3277,nu1503
+COPY . .
+WORKDIR "/src/applications/Company.Project.PublicWebSite.Host"
+RUN dotnet build "Company.Project.PublicWebSite.Host.csproj" --no-restore -nowarn:msb3202,msb3277,nu1503 -c Release -o /app/build
+
+FROM build AS publish
+RUN dotnet publish "Company.Project.PublicWebSite.Host.csproj" --no-restore -nowarn:msb3202,msb3277,nu1503 -c Release -o /app/publish
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app/publish .
+ENTRYPOINT ["dotnet", "Company.Project.PublicWebSite.Host.dll"]
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Dockerfile.original b/templates/ms/applications/Company.Project.PublicWebSite.Host/Dockerfile.original
new file mode 100644
index 0000000..40690f8
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Dockerfile.original
@@ -0,0 +1,23 @@
+FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
+WORKDIR /app
+EXPOSE 80
+
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
+WORKDIR /src
+COPY ["applications/Company.Project.PublicWebSite.Host/Company.Project.PublicWebSite.Host.csproj", "applications/Company.Project.PublicWebSite.Host/"]
+COPY ["modules/product/src/ProductManagement.HttpApi.Client/ProductManagement.HttpApi.Client.csproj", "modules/product/src/ProductManagement.HttpApi.Client/"]
+COPY ["modules/product/src/ProductManagement.Application.Contracts/ProductManagement.Application.Contracts.csproj", "modules/product/src/ProductManagement.Application.Contracts/"]
+COPY ["modules/product/src/ProductManagement.Domain.Shared/ProductManagement.Domain.Shared.csproj", "modules/product/src/ProductManagement.Domain.Shared/"]
+COPY ["shared/Company.Project.Shared/Company.Project.Shared.csproj", "shared/Company.Project.Shared/"]
+RUN dotnet restore "applications/Company.Project.PublicWebSite.Host/Company.Project.PublicWebSite.Host.csproj" -nowarn:msb3202,msb3277,nu1503
+COPY . .
+WORKDIR "/src/applications/Company.Project.PublicWebSite.Host"
+RUN dotnet build "Company.Project.PublicWebSite.Host.csproj" --no-restore -nowarn:msb3202,msb3277,nu1503 -c Release -o /app/build
+
+FROM build AS publish
+RUN dotnet publish "Company.Project.PublicWebSite.Host.csproj" --no-restore -nowarn:msb3202,msb3277,nu1503 -c Release -o /app/publish
+
+FROM base AS final
+WORKDIR /app
+COPY --from=publish /app/publish .
+ENTRYPOINT ["dotnet", "Company.Project.PublicWebSite.Host.dll"]
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Index.cshtml b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Index.cshtml
new file mode 100644
index 0000000..bc1f125
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Index.cshtml
@@ -0,0 +1,158 @@
+@page
+@using Volo.Abp.Users
+@model Company.Project.PublicWebSite.Pages.IndexModel
+@using Volo.Abp.AspNetCore.Mvc.UI.Theming
+@inject IThemeManager ThemeManager
+@inject ICurrentUser CurrentUser
+@{
+ Layout = ThemeManager.CurrentTheme.GetApplicationLayout();
+}
+@section styles{
+
+}
+
+
+
+
Public Web Site Application
+
Welcome to our web site...
+
+ This is a simple hero unit, a simple jumbotron-style component
+ for calling extra attention to featured content or information.
+
+
+
+ @if (CurrentUser.IsAuthenticated)
+ {
+ Logout
+ }
+ else
+ {
+
+ }
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
Asus Transformer Book T300CHI-FH011H
+
+
1249
+
+
+
+
+
+
+

+
+
+
+
Lego Star Wars - 75059 Sandcrawler UCS
+
+
$999
+
+
+
+
+
+
+

+
+
+
+
Nikon AF-S 50mm f/1.8 G Lens
+
+
$1499
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Aliquam erat volutpat. Praesent nec dapibus neque. Proin hendrerit, magna in faucibus
+
+
+
+
+
+
+
+
+
Curabitur consectetur libero lacus, nec facilisis nulla facilisis non.
+
+
+
+
+
+
+
+
Duis et felis nec ipsum auctor .
+
+
+
+
+
+
+
+
Morbi eu dolor pellentesque, porttitor lorem vitae, pulvinar eros.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
47322 W Alexander Rd (867) 322-5566 info@volosoft.com
+
+
+ We are developing open source and commercial software development tools.
+
+
+ Praesent et posuere dui.
+ felis.
+
+
+
+
+
+
+
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Index.cshtml.cs b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Index.cshtml.cs
new file mode 100644
index 0000000..aec40b5
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Index.cshtml.cs
@@ -0,0 +1,18 @@
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Authentication;
+using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
+
+namespace Company.Project.PublicWebSite.Pages;
+
+public class IndexModel : AbpPageModel
+{
+ public void OnGet()
+ {
+
+ }
+
+ public async Task OnPostLoginAsync()
+ {
+ await HttpContext.ChallengeAsync("oidc");
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.cshtml b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.cshtml
new file mode 100644
index 0000000..eb1859a
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.cshtml
@@ -0,0 +1,55 @@
+@page
+@using ProductManagement
+@using Volo.Abp.Settings
+@model Company.Project.PublicWebSite.Pages.ProductsModel
+@using Volo.Abp.AspNetCore.Mvc.UI.Theming
+@inject IThemeManager ThemeManager
+@inject ISettingProvider SettingProvider
+@{
+ const int columnSize = 3;
+ Layout = ThemeManager.CurrentTheme.GetApplicationLayout();
+}
+@section styles{
+
+}
+Our Products
+
+ @for (int i = 0; i < Math.Ceiling(Model.Products.Items.Count / (double)columnSize); i++)
+ {
+
+ @for (int j = 0; j < columnSize; j++)
+ {
+
+ @if ((i * columnSize) + j < Model.Products.Items.Count)
+ {
+ var product = Model.Products.Items[(i * columnSize) + j];
+
+ @if (!product.ImageName.IsNullOrEmpty())
+ {
+

+ }
+ else
+ {
+

+ }
+
+
+
+
@product.Name
+ @product.Code - Stock count: @product.StockCount
+
+
+
+ $@product.Price
+
+
+
+ }
+
+ }
+
+ }
+
+
+@* An example to show how to read settings from the client side / UI *@
+Maximum allowed page size: @await SettingProvider.GetOrNullAsync(ProductManagementSettings.MaxPageSize)
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.cshtml.cs b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.cshtml.cs
new file mode 100644
index 0000000..982aada
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.cshtml.cs
@@ -0,0 +1,23 @@
+using System.Threading.Tasks;
+using ProductManagement;
+using Volo.Abp.Application.Dtos;
+using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
+
+namespace Company.Project.PublicWebSite.Pages;
+
+public class ProductsModel : AbpPageModel
+{
+ public ListResultDto Products { get; set; }
+
+ private readonly IPublicProductAppService _productAppService;
+
+ public ProductsModel(IPublicProductAppService productAppService)
+ {
+ _productAppService = productAppService;
+ }
+
+ public async Task OnGetAsync()
+ {
+ Products = await _productAppService.GetListAsync();
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.css b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.css
new file mode 100644
index 0000000..295ceba
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/Products.css
@@ -0,0 +1,30 @@
+body {
+ background-color: #f9f9f9;
+}
+
+.product-list-item {
+ background-color: #fff;
+ padding: 2em;
+ border: 1px solid #eee;
+ border-radius: 3px;
+ box-shadow: 0 0 10px rgba(0, 0, 0, .05);
+ margin-bottom: 2em;
+ transition: all .2s;
+}
+
+.product-list-item:hover {
+ box-shadow: 0 0 20px rgba(0, 0, 0, .1);
+ cursor: pointer;
+}
+
+.product-list-item img {
+ width: 100%;
+}
+
+.product-list-item .text-muted {
+ opacity: .8
+}
+
+.product-info-box {
+ min-height: 80px;
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/_ViewImports.cshtml b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/_ViewImports.cshtml
new file mode 100644
index 0000000..231948b
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Pages/_ViewImports.cshtml
@@ -0,0 +1,4 @@
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Program.cs b/templates/ms/applications/Company.Project.PublicWebSite.Host/Program.cs
new file mode 100644
index 0000000..2d969a9
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Program.cs
@@ -0,0 +1,34 @@
+using System;
+using System.IO;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Serilog;
+using Volo.Abp;
+
+namespace Company.Project.PublicWebSite;
+
+public class Program
+{
+ public static void Main(string[] args)
+ {
+ var configuration = new ConfigurationBuilder()
+ .SetBasePath(Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json")
+ .Build();
+
+ Log.Logger = new LoggerConfiguration()
+ .ReadFrom.Configuration(configuration)
+ .CreateLogger();
+
+ try { CreateHostBuilder(args).Build().Run(); }
+ catch (Exception ex) { Log.Fatal(ex, "Host terminated unexpectedly"); }
+ finally { Log.CloseAndFlush(); }
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .UseAutofac().UseSerilog()
+ .ConfigureWebHostDefaults(webBuilder => webBuilder.UseStartup());
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Properties/launchSettings.json b/templates/ms/applications/Company.Project.PublicWebSite.Host/Properties/launchSettings.json
new file mode 100644
index 0000000..395f32b
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "https://localhost:44335",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "Company.Project.PublicWebSite.Host": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "applicationUrl": "https://localhost:44335",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ }
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/PublicWebSiteHostModule.cs b/templates/ms/applications/Company.Project.PublicWebSite.Host/PublicWebSiteHostModule.cs
new file mode 100644
index 0000000..1042e98
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/PublicWebSiteHostModule.cs
@@ -0,0 +1,84 @@
+using System;
+using Company.Project.Shared;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.DependencyInjection;
+using ProductManagement;
+using Volo.Abp;
+using Volo.Abp.Autofac;
+using Volo.Abp.Http.Client.IdentityModel.Web;
+using Volo.Abp.Identity.Web;
+using Volo.Abp.Localization;
+using Volo.Abp.Modularity;
+using Volo.Abp.MultiTenancy;
+using Volo.Abp.UI.Navigation;
+
+namespace Company.Project.PublicWebSite;
+
+[DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpHttpClientIdentityModelWebModule),
+ typeof(AbpIdentityWebModule),
+ typeof(AbpAspNetCoreMvcUiBasicThemeModule),
+ typeof(ProductManagementHttpApiClientModule)
+ )]
+public class PublicWebSiteHostModule : AbpModule
+{
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ var configuration = context.Services.GetConfiguration();
+
+ Configure(options =>
+ {
+ options.Languages.Add(new LanguageInfo("en", "en", "English"));
+ });
+
+ Configure(options =>
+ {
+ options.IsEnabled = ProjectConsts.IsMultiTenancyEnabled;
+ });
+
+ Configure(options =>
+ {
+ options.MenuContributors.Add(new PublicWebSiteMenuContributor());
+ });
+
+ context.Services.AddAuthentication(options =>
+ {
+ options.DefaultScheme = "Cookies";
+ options.DefaultChallengeScheme = "oidc";
+ })
+ .AddCookie("Cookies", options =>
+ {
+ options.ExpireTimeSpan = TimeSpan.FromDays(365);
+ })
+ .AddJwtBearer("oidc", options =>
+ {
+ options.Authority = configuration["AuthServer:Authority"];
+ options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]);
+ options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
+ {
+ ValidateAudience = false
+ };
+ });
+ }
+
+ public override void OnApplicationInitialization(ApplicationInitializationContext context)
+ {
+ var app = context.GetApplicationBuilder();
+
+ app.UseCorrelationId();
+ app.UseStaticFiles();
+ app.UseRouting();
+ app.UseAuthentication();
+
+ if (ProjectConsts.IsMultiTenancyEnabled)
+ {
+ app.UseMultiTenancy();
+ }
+
+ app.UseAbpRequestLocalization();
+ app.UseAuthorization();
+ app.UseConfiguredEndpoints();
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/PublicWebSiteMenuContributor.cs b/templates/ms/applications/Company.Project.PublicWebSite.Host/PublicWebSiteMenuContributor.cs
new file mode 100644
index 0000000..dc55f55
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/PublicWebSiteMenuContributor.cs
@@ -0,0 +1,21 @@
+using System.Threading.Tasks;
+using Volo.Abp.UI.Navigation;
+
+namespace Company.Project.PublicWebSite;
+
+public class PublicWebSiteMenuContributor : IMenuContributor
+{
+ public Task ConfigureMenuAsync(MenuConfigurationContext context)
+ {
+ if (context.Menu.Name != StandardMenus.Main)
+ {
+ return Task.CompletedTask;
+ }
+
+ //TODO: Localize menu items
+ context.Menu.AddItem(new ApplicationMenuItem("App.Home", "Home", "/"));
+ context.Menu.AddItem(new ApplicationMenuItem("App.Products", "Products", "/Products"));
+
+ return Task.CompletedTask;
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/Startup.cs b/templates/ms/applications/Company.Project.PublicWebSite.Host/Startup.cs
new file mode 100644
index 0000000..043f711
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/Startup.cs
@@ -0,0 +1,19 @@
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp;
+
+namespace Company.Project.PublicWebSite;
+
+public class Startup
+{
+ public void ConfigureServices(IServiceCollection services)
+ {
+ services.AddApplication();
+ }
+
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
+ {
+ app.InitializeApplication();
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/abp.resourcemapping.js b/templates/ms/applications/Company.Project.PublicWebSite.Host/abp.resourcemapping.js
new file mode 100644
index 0000000..4a2ad45
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/abp.resourcemapping.js
@@ -0,0 +1,11 @@
+module.exports = {
+ aliases: {
+
+ },
+ clean: [
+
+ ],
+ mappings: {
+
+ }
+};
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/appsettings.Development.json b/templates/ms/applications/Company.Project.PublicWebSite.Host/appsettings.Development.json
new file mode 100644
index 0000000..e203e94
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/appsettings.Development.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "LogLevel": {
+ "Default": "Debug",
+ "System": "Information",
+ "Microsoft": "Information"
+ }
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/appsettings.json b/templates/ms/applications/Company.Project.PublicWebSite.Host/appsettings.json
new file mode 100644
index 0000000..f0c447f
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/appsettings.json
@@ -0,0 +1,19 @@
+{
+ "AuthServer": {
+ "Authority": "https://localhost:44399",
+ "RequireHttpsMetadata": "true",
+ "ClientId": "public-website-client",
+ "ClientSecret": "1q2w3e*"
+ },
+ "RemoteServices": {
+ "Default": {
+ "BaseUrl": "https://localhost:44397/"
+ }
+ },
+ "Logging": {
+ "LogLevel": {
+ "Default": "Warning"
+ }
+ },
+ "AllowedHosts": "*"
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/gulpfile.js b/templates/ms/applications/Company.Project.PublicWebSite.Host/gulpfile.js
new file mode 100644
index 0000000..8660b9a
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/gulpfile.js
@@ -0,0 +1,9 @@
+"use strict";
+
+var gulp = require("gulp"),
+ path = require('path'),
+ copyResources = require('./node_modules/@abp/aspnetcore.mvc.ui/gulp/copy-resources.js');
+
+exports.default = function(){
+ return copyResources(path.resolve('./'));
+};
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/package.json b/templates/ms/applications/Company.Project.PublicWebSite.Host/package.json
new file mode 100644
index 0000000..259b863
--- /dev/null
+++ b/templates/ms/applications/Company.Project.PublicWebSite.Host/package.json
@@ -0,0 +1,8 @@
+{
+ "version": "0.1.0",
+ "name": "my-project-publicwebsite-host",
+ "private": true,
+ "dependencies": {
+ "@abp/aspnetcore.mvc.ui.theme.basic": "~9.0.0"
+ }
+}
diff --git a/templates/ms/applications/Company.Project.PublicWebSite.Host/wwwroot/product-images/asus.jpg b/templates/ms/applications/Company.Project.PublicWebSite.Host/wwwroot/product-images/asus.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..44de167813487758404baacf71d8f24a277ceeee
GIT binary patch
literal 33856
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