555 changed files with 150516 additions and 12575 deletions
@ -1,6 +1,6 @@ |
|||
{ |
|||
"sdk": { |
|||
"version": "5.0.101", |
|||
"version": "6.0.100", |
|||
"rollForward": "latestFeature" |
|||
} |
|||
} |
|||
|
|||
Binary file not shown.
@ -1,25 +1,11 @@ |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
|||
using Volo.Abp.Users; |
|||
|
|||
namespace CompanyName.ProjectName.Pages |
|||
{ |
|||
public class IndexModel : AbpPageModel |
|||
{ |
|||
private readonly ICurrentUser _currentUser; |
|||
|
|||
public IndexModel(ICurrentUser currentUser) |
|||
public void OnGet() |
|||
{ |
|||
_currentUser = currentUser; |
|||
} |
|||
|
|||
// public IActionResult OnGet()
|
|||
// {
|
|||
// if (_currentUser.IsAuthenticated)
|
|||
// {
|
|||
// return RedirectToPage("/Welcome");
|
|||
// }
|
|||
// return RedirectToPage("/Account/Login");
|
|||
// }
|
|||
} |
|||
} |
|||
@ -0,0 +1,2 @@ |
|||
{ |
|||
} |
|||
@ -1 +1 @@ |
|||
{"alg":"RS256","d":"Y_Mo7J2gdKgMLqrDtdW8JZtIiHvJWpWb2qAljxeQSiTAZs4-Cuss9CWpKJxYe3ZBzCLXHiZr6Zx5CMWC7yhAh0ojM71q4Tyw4N3YQfiAm--lWqIMJSMhGK0Hj2PiHdctt9J3NHSuwjD-HfHcNOMVzLiBaGuvlaVyIqz959FwxNsb5QzuxcRXNOMoO7d7uKR9ZYdFECWfBCthf4Mfr2YOLSORtyikooDMDmAJCL6U3igO11rdqWAMNMPfCmA0qKU4YNyhZgXpC-FrobiHbiSug5_xgBLSvSfIquBz7yW_tUkbM-NHy1Iz1erkK1tY3x5HWANtu5tbLqM6UGn0ivb3AQ","dp":"a4b7gwmFr-ukqza608XDNaGKgzQlaEum6h0qAbjtdUrydWARYiNAiSLuxn5vQ6CVobDfAhsD1x0Tnfy8DHaHBu89yncs0Fzu7szeBcLpU3OAlY6wx2swouBHT0gXMweL37sZpS9wJ14mKJ60EuLhhcZnKJdhQG1e1A5NICZecPk","dq":"oZEXJ7lc2emvnJxoBqVmYt_Uf49M4izkQ5dtYFncYVSZGErDsUlcR7wtmTpvdfKV2zQ9d6ZAMrzGmTIxRq7gXRF7hDpADxvAfJVTT0DH5nxJwiMPf9FA_g0QZANZgkMrRfZ7fXFhSAA96JYy60x45n731hsh0lIMYnJWS9S7p4c","e":"AQAB","kid":"CBCA50D09AFE5E5FC45E5D80805CC5BC","kty":"RSA","n":"rlyLVmVEmEMq5OYtJF76THrc6xiLRf1RcjwvbCMaZYpSEYtfPqU7hnNVk3HVbEHVtovMG-UHhfHYIZIttwbd3u2JXK3IYtTyrovyQtcFzww4VDiF77_u9oBwDrAXj99evUaI_M9lHd9LHRxOw8-p-Y5FIXO7-ZoAfdA_0JFk5QxXNTd7BfP7FFX1JZn-ossHm0-dFEL9cLE4YKpA8SQ1z0KLFCjMYV_NG9J5kPcPjdTYH3ZxrSCr65hWgEw7ombPwTp87KmWU-DYAdJP8ur32-lzv1JgKAlsCNJfS5U57FUIGClY8FZ-6KEyWUeA6k3UYEjc4Gl_XjS6x4bL1nGZ4Q","p":"0KoX6IJTNjGUSo4CM7tn_xDUSGV1Z_qJRsUOk3FdKbHFHn3iHsfV4xme3Ma06RtEojS0AgQ6t7EBFZ8cDlS-RnPsLtptRfa3aNkyBOtIqr5iu65siOYi-cqHxiSdwNy6d_EnNQojKcy9IgbT1Zp1SViLWPsh3fgr6mPD1NlzjFs","q":"1epav74nxH7spLZXTkhr0tSW87SeKXTG3pAFAVNBLSETdLDq54b3f34xtV7sCJiGvtyFBMhQb_GmYe1nkfxdTKPzJC-fpUkHeZqkX7MpvOwlig5AbLx8bjDtfuEDXWbEUV9HE3IEPNlkUnXHz4wXFOiz4arHQdIztd7vajLGN3M","qi":"rwQvfIRyqvgqRPQkF1Xvzv9fIjGzuVV01Wt38Cp2kajSoM-3AzxOlpe3LS4hnrwKiXNgmfFAuuDJELRTBqICwTJslErqIyoLXVz2nERN8nvOGhPJPKjpOPjS_5FPpeImpEkQP0fbk3dCv2kyykO0qMS8HIcsf1M1Y02WplRz9TM"} |
|||
{"alg":"RS256","d":"M1neGBzlwZaXv1HDB_z7wnHYDpYM3BYo7rYNI8pu65NXqF4p19KgppiZAc5znxLUkGDIW6Udxq5666uypRpHsgnmAmk2VRGT89y5SuyS3dvuahw6jKW-ZBAMVh3LTh6DzXOqJbhzwG259loIvUqJtBMggYgscJ8Vm7dNmvGZmoAPTMiNSPUYMLA5-nviOTXfOqoiWXHEiZKDwKH1nN9KRR9ogze-dmaS21dWkCaRK7kD5ye6Q54EogIsZWikfj8_pfWbpI5xFuUrsK2vaJjnXrt6r7Odn56TkBKggw-Sxn-l4C2clZlJZQGUR9HzB66q_ckKB63DNiPuzhwjjbWtHQ","dp":"aQJaX_2nlKuhxAr8HC4yzAkGVGMPX1KEWfLsjDsC0v5rkr7KcRTSWiyyODp1nrB44_qr-jpzj8mB_l24z7f19EGOwj5jP0UG7Th9gN4criWoMYYOJBa8wcZKceeo60fSEZWXjvZE7fqcucDDBO-EqeCVHqfC8OrsDuHuPFZW7iE","dq":"XUCgEZ1doux8t2RA50htNxtm1u1tTbvweOPi3GQlMd9sCuqEk2wT57Fg8tWeR2PWhlBilUH_NV_Yy-lKnCzZVozjCbUAdKuPutyu65LQHPNF1TUhIPsc68GcN-pjMPIseVocClW3wDVGB7-zPPFmDF6IyQduPmWbkQ6wTbIDcws","e":"AQAB","kid":"A4B5BBC4DC86B77B4A7DABC098DD0531","kty":"RSA","n":"vZbFZ317RPvwGyJ1Y6PQDc9vU9XD5GlZ2HDkHts4bq0UFdT394bdRpVf3fT5OrekF-bb7_v7f1ynYXTdIBoHPoqJJ7EYVWAT7DkgbeuiLbMUFw4g3YWad-EzcdUhWy-a39im2bgOjL-c1l1Lodg13AtQpC_LDg3n5f8RNWvIC5FuRWOvf_743cANFRmAoXcskoJa5kDo7pYoH46XKx3LPjuEMMP7iN_oHBXIoLR4bA307uKnMx316lWl94viMicV75DHblddO7N9ey5dkPPydXyehjsK1exOIeG92IUlXl0M9hNpJrgR5hr09kV8rLFOiRWhpNkCsH_cKsqdIPsboQ","p":"3V8F8sJE7VE2zrJlxhzYjsm8hSZfJZDUOm1pAHUfV10jlV0grJfPX8cvE7xkV0WhCpHaOgZwE3nBnOr6cfl1fovy2xXI6DhxMjGg0XRRyf_roxkplhvwZCiuYR7reG4gGArhEzfla6PcERuCnbtNjKA0shtrDnm3e9VJowTFJG8","q":"2z8BE6OagK9x8WgVVspcll0fsk6Y-hsvpO-o3bnU32429ZTbQT0q4JgEX5vxY3ivLJ1FyOupe3fg4gP44wUcZnBVSWgsieeqnMWwj98xQDeRzFJ0rDfIJtpDZ7gG79b6xSCuBRE4c9YRlliwOcppgIPaotTuIsTKlWfDNNZvaO8","qi":"E05-UW4SDxBNxwhwxj99w7quMq1dZK8Z4RBnPIZsgw20A0Ltfzypxd0RvU-Og3YmdJH9bb8FVQO0xR3EUKl9abA_uDHOCt_B0Ngivzbpx5DJ3ikQbKKD97EtLm4uDP0OlER3SfhKihv1myvxo8EOo-RrtTQkbbN9YJhynK9dmWE"} |
|||
@ -1 +1 @@ |
|||
/* Your Global Styles */ |
|||
/* Your Global Styles */ |
|||
|
|||
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,5 @@ |
|||
(function () { |
|||
[].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')).map(function (tooltipTriggerEl) { |
|||
return new bootstrap.Tooltip(tooltipTriggerEl) |
|||
}); |
|||
})(); |
|||
@ -0,0 +1,224 @@ |
|||
@charset "UTF-8"; |
|||
/*! Bootstrap 5 integration for DataTables |
|||
* |
|||
* ©2020 SpryMedia Ltd, all rights reserved. |
|||
* License: MIT datatables.net/license/mit |
|||
*/ |
|||
table.dataTable { |
|||
clear: both; |
|||
margin-top: 6px !important; |
|||
margin-bottom: 6px !important; |
|||
max-width: none !important; |
|||
border-collapse: separate !important; |
|||
border-spacing: 0; |
|||
} |
|||
table.dataTable td, |
|||
table.dataTable th { |
|||
-webkit-box-sizing: content-box; |
|||
box-sizing: content-box; |
|||
} |
|||
table.dataTable td.dataTables_empty, |
|||
table.dataTable th.dataTables_empty { |
|||
text-align: center; |
|||
} |
|||
table.dataTable.nowrap th, |
|||
table.dataTable.nowrap td { |
|||
white-space: nowrap; |
|||
} |
|||
|
|||
div.dataTables_wrapper div.dataTables_length label { |
|||
font-weight: normal; |
|||
text-align: left; |
|||
white-space: nowrap; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_length select { |
|||
width: auto; |
|||
display: inline-block; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_filter { |
|||
text-align: right; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_filter label { |
|||
font-weight: normal; |
|||
white-space: nowrap; |
|||
text-align: left; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_filter input { |
|||
margin-left: 0.5em; |
|||
display: inline-block; |
|||
width: auto; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_info { |
|||
padding-top: 0.85em; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_paginate { |
|||
margin: 0; |
|||
white-space: nowrap; |
|||
text-align: right; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_paginate ul.pagination { |
|||
margin: 2px 0; |
|||
white-space: nowrap; |
|||
justify-content: flex-end; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_processing { |
|||
position: absolute; |
|||
top: 50%; |
|||
left: 50%; |
|||
width: 200px; |
|||
margin-left: -100px; |
|||
margin-top: -26px; |
|||
text-align: center; |
|||
padding: 1em 0; |
|||
} |
|||
|
|||
table.dataTable > thead > tr > th:active, |
|||
table.dataTable > thead > tr > td:active { |
|||
outline: none; |
|||
} |
|||
table.dataTable > thead > tr > th:not(.sorting_disabled), |
|||
table.dataTable > thead > tr > td:not(.sorting_disabled) { |
|||
padding-right: 30px; |
|||
} |
|||
table.dataTable > thead .sorting, |
|||
table.dataTable > thead .sorting_asc, |
|||
table.dataTable > thead .sorting_desc, |
|||
table.dataTable > thead .sorting_asc_disabled, |
|||
table.dataTable > thead .sorting_desc_disabled { |
|||
cursor: pointer; |
|||
position: relative; |
|||
} |
|||
table.dataTable > thead .sorting:before, table.dataTable > thead .sorting:after, |
|||
table.dataTable > thead .sorting_asc:before, |
|||
table.dataTable > thead .sorting_asc:after, |
|||
table.dataTable > thead .sorting_desc:before, |
|||
table.dataTable > thead .sorting_desc:after, |
|||
table.dataTable > thead .sorting_asc_disabled:before, |
|||
table.dataTable > thead .sorting_asc_disabled:after, |
|||
table.dataTable > thead .sorting_desc_disabled:before, |
|||
table.dataTable > thead .sorting_desc_disabled:after { |
|||
position: absolute; |
|||
bottom: 0.5em; |
|||
display: block; |
|||
opacity: 0.3; |
|||
} |
|||
table.dataTable > thead .sorting:before, |
|||
table.dataTable > thead .sorting_asc:before, |
|||
table.dataTable > thead .sorting_desc:before, |
|||
table.dataTable > thead .sorting_asc_disabled:before, |
|||
table.dataTable > thead .sorting_desc_disabled:before { |
|||
right: 1em; |
|||
content: "↑"; |
|||
} |
|||
table.dataTable > thead .sorting:after, |
|||
table.dataTable > thead .sorting_asc:after, |
|||
table.dataTable > thead .sorting_desc:after, |
|||
table.dataTable > thead .sorting_asc_disabled:after, |
|||
table.dataTable > thead .sorting_desc_disabled:after { |
|||
right: 0.5em; |
|||
content: "↓"; |
|||
} |
|||
table.dataTable > thead .sorting_asc:before, |
|||
table.dataTable > thead .sorting_desc:after { |
|||
opacity: 1; |
|||
} |
|||
table.dataTable > thead .sorting_asc_disabled:before, |
|||
table.dataTable > thead .sorting_desc_disabled:after { |
|||
opacity: 0; |
|||
} |
|||
|
|||
div.dataTables_scrollHead table.dataTable { |
|||
margin-bottom: 0 !important; |
|||
} |
|||
|
|||
div.dataTables_scrollBody table { |
|||
border-top: none; |
|||
margin-top: 0 !important; |
|||
margin-bottom: 0 !important; |
|||
} |
|||
div.dataTables_scrollBody table thead .sorting:before, |
|||
div.dataTables_scrollBody table thead .sorting_asc:before, |
|||
div.dataTables_scrollBody table thead .sorting_desc:before, |
|||
div.dataTables_scrollBody table thead .sorting:after, |
|||
div.dataTables_scrollBody table thead .sorting_asc:after, |
|||
div.dataTables_scrollBody table thead .sorting_desc:after { |
|||
display: none; |
|||
} |
|||
div.dataTables_scrollBody table tbody tr:first-child th, |
|||
div.dataTables_scrollBody table tbody tr:first-child td { |
|||
border-top: none; |
|||
} |
|||
|
|||
div.dataTables_scrollFoot > .dataTables_scrollFootInner { |
|||
box-sizing: content-box; |
|||
} |
|||
div.dataTables_scrollFoot > .dataTables_scrollFootInner > table { |
|||
margin-top: 0 !important; |
|||
border-top: none; |
|||
} |
|||
|
|||
@media screen and (max-width: 767px) { |
|||
div.dataTables_wrapper div.dataTables_length, |
|||
div.dataTables_wrapper div.dataTables_filter, |
|||
div.dataTables_wrapper div.dataTables_info, |
|||
div.dataTables_wrapper div.dataTables_paginate { |
|||
text-align: center; |
|||
} |
|||
div.dataTables_wrapper div.dataTables_paginate ul.pagination { |
|||
justify-content: center !important; |
|||
} |
|||
} |
|||
table.dataTable.table-sm > thead > tr > th:not(.sorting_disabled) { |
|||
padding-right: 20px; |
|||
} |
|||
table.dataTable.table-sm .sorting:before, |
|||
table.dataTable.table-sm .sorting_asc:before, |
|||
table.dataTable.table-sm .sorting_desc:before { |
|||
top: 5px; |
|||
right: 0.85em; |
|||
} |
|||
table.dataTable.table-sm .sorting:after, |
|||
table.dataTable.table-sm .sorting_asc:after, |
|||
table.dataTable.table-sm .sorting_desc:after { |
|||
top: 5px; |
|||
} |
|||
|
|||
table.table-bordered.dataTable { |
|||
border-right-width: 0; |
|||
} |
|||
table.table-bordered.dataTable thead tr:first-child th, |
|||
table.table-bordered.dataTable thead tr:first-child td { |
|||
border-top-width: 1px; |
|||
} |
|||
table.table-bordered.dataTable th, |
|||
table.table-bordered.dataTable td { |
|||
border-left-width: 0; |
|||
} |
|||
table.table-bordered.dataTable th:first-child, table.table-bordered.dataTable th:first-child, |
|||
table.table-bordered.dataTable td:first-child, |
|||
table.table-bordered.dataTable td:first-child { |
|||
border-left-width: 1px; |
|||
} |
|||
table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child, |
|||
table.table-bordered.dataTable td:last-child, |
|||
table.table-bordered.dataTable td:last-child { |
|||
border-right-width: 1px; |
|||
} |
|||
table.table-bordered.dataTable th, |
|||
table.table-bordered.dataTable td { |
|||
border-bottom-width: 1px; |
|||
} |
|||
|
|||
div.dataTables_scrollHead table.table-bordered { |
|||
border-bottom-width: 0; |
|||
} |
|||
|
|||
div.table-responsive > div.dataTables_wrapper > div.row { |
|||
margin: 0; |
|||
} |
|||
div.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:first-child { |
|||
padding-left: 0; |
|||
} |
|||
div.table-responsive > div.dataTables_wrapper > div.row > div[class^=col-]:last-child { |
|||
padding-right: 0; |
|||
} |
|||
@ -0,0 +1,184 @@ |
|||
/*! DataTables Bootstrap 5 integration |
|||
* 2020 SpryMedia Ltd - datatables.net/license |
|||
*/ |
|||
|
|||
/** |
|||
* DataTables integration for Bootstrap 4. This requires Bootstrap 5 and |
|||
* DataTables 1.10 or newer. |
|||
* |
|||
* This file sets the defaults and adds options to DataTables to style its |
|||
* controls using Bootstrap. See http://datatables.net/manual/styling/bootstrap
|
|||
* for further information. |
|||
*/ |
|||
(function( factory ){ |
|||
if ( typeof define === 'function' && define.amd ) { |
|||
// AMD
|
|||
define( ['jquery', 'datatables.net'], function ( $ ) { |
|||
return factory( $, window, document ); |
|||
} ); |
|||
} |
|||
else if ( typeof exports === 'object' ) { |
|||
// CommonJS
|
|||
module.exports = function (root, $) { |
|||
if ( ! root ) { |
|||
root = window; |
|||
} |
|||
|
|||
if ( ! $ || ! $.fn.dataTable ) { |
|||
// Require DataTables, which attaches to jQuery, including
|
|||
// jQuery if needed and have a $ property so we can access the
|
|||
// jQuery object that is used
|
|||
$ = require('datatables.net')(root, $).$; |
|||
} |
|||
|
|||
return factory( $, root, root.document ); |
|||
}; |
|||
} |
|||
else { |
|||
// Browser
|
|||
factory( jQuery, window, document ); |
|||
} |
|||
}(function( $, window, document, undefined ) { |
|||
'use strict'; |
|||
var DataTable = $.fn.dataTable; |
|||
|
|||
|
|||
/* Set the defaults for DataTables initialisation */ |
|||
$.extend( true, DataTable.defaults, { |
|||
dom: |
|||
"<'row'<'col-sm-12 col-md-6'l><'col-sm-12 col-md-6'f>>" + |
|||
"<'row'<'col-sm-12'tr>>" + |
|||
"<'row'<'col-sm-12 col-md-5'i><'col-sm-12 col-md-7'p>>", |
|||
renderer: 'bootstrap' |
|||
} ); |
|||
|
|||
|
|||
/* Default class modification */ |
|||
$.extend( DataTable.ext.classes, { |
|||
sWrapper: "dataTables_wrapper dt-bootstrap5", |
|||
sFilterInput: "form-control form-control-sm", |
|||
sLengthSelect: "form-select form-select-sm", |
|||
sProcessing: "dataTables_processing card", |
|||
sPageButton: "paginate_button page-item" |
|||
} ); |
|||
|
|||
|
|||
/* Bootstrap paging button renderer */ |
|||
DataTable.ext.renderer.pageButton.bootstrap = function ( settings, host, idx, buttons, page, pages ) { |
|||
var api = new DataTable.Api( settings ); |
|||
var classes = settings.oClasses; |
|||
var lang = settings.oLanguage.oPaginate; |
|||
var aria = settings.oLanguage.oAria.paginate || {}; |
|||
var btnDisplay, btnClass, counter=0; |
|||
|
|||
var attach = function( container, buttons ) { |
|||
var i, ien, node, button; |
|||
var clickHandler = function ( e ) { |
|||
e.preventDefault(); |
|||
if ( !$(e.currentTarget).hasClass('disabled') && api.page() != e.data.action ) { |
|||
api.page( e.data.action ).draw( 'page' ); |
|||
} |
|||
}; |
|||
|
|||
for ( i=0, ien=buttons.length ; i<ien ; i++ ) { |
|||
button = buttons[i]; |
|||
|
|||
if ( Array.isArray( button ) ) { |
|||
attach( container, button ); |
|||
} |
|||
else { |
|||
btnDisplay = ''; |
|||
btnClass = ''; |
|||
|
|||
switch ( button ) { |
|||
case 'ellipsis': |
|||
btnDisplay = '…'; |
|||
btnClass = 'disabled'; |
|||
break; |
|||
|
|||
case 'first': |
|||
btnDisplay = lang.sFirst; |
|||
btnClass = button + (page > 0 ? |
|||
'' : ' disabled'); |
|||
break; |
|||
|
|||
case 'previous': |
|||
btnDisplay = lang.sPrevious; |
|||
btnClass = button + (page > 0 ? |
|||
'' : ' disabled'); |
|||
break; |
|||
|
|||
case 'next': |
|||
btnDisplay = lang.sNext; |
|||
btnClass = button + (page < pages-1 ? |
|||
'' : ' disabled'); |
|||
break; |
|||
|
|||
case 'last': |
|||
btnDisplay = lang.sLast; |
|||
btnClass = button + (page < pages-1 ? |
|||
'' : ' disabled'); |
|||
break; |
|||
|
|||
default: |
|||
btnDisplay = button + 1; |
|||
btnClass = page === button ? |
|||
'active' : ''; |
|||
break; |
|||
} |
|||
|
|||
if ( btnDisplay ) { |
|||
node = $('<li>', { |
|||
'class': classes.sPageButton+' '+btnClass, |
|||
'id': idx === 0 && typeof button === 'string' ? |
|||
settings.sTableId +'_'+ button : |
|||
null |
|||
} ) |
|||
.append( $('<a>', { |
|||
'href': '#', |
|||
'aria-controls': settings.sTableId, |
|||
'aria-label': aria[ button ], |
|||
'data-dt-idx': counter, |
|||
'tabindex': settings.iTabIndex, |
|||
'class': 'page-link' |
|||
} ) |
|||
.html( btnDisplay ) |
|||
) |
|||
.appendTo( container ); |
|||
|
|||
settings.oApi._fnBindAction( |
|||
node, {action: button}, clickHandler |
|||
); |
|||
|
|||
counter++; |
|||
} |
|||
} |
|||
} |
|||
}; |
|||
|
|||
// IE9 throws an 'unknown error' if document.activeElement is used
|
|||
// inside an iframe or frame.
|
|||
var activeEl; |
|||
|
|||
try { |
|||
// Because this approach is destroying and recreating the paging
|
|||
// elements, focus is lost on the select button which is bad for
|
|||
// accessibility. So we want to restore focus once the draw has
|
|||
// completed
|
|||
activeEl = $(host).find(document.activeElement).data('dt-idx'); |
|||
} |
|||
catch (e) {} |
|||
|
|||
attach( |
|||
$(host).empty().html('<ul class="pagination"/>').children('ul'), |
|||
buttons |
|||
); |
|||
|
|||
if ( activeEl !== undefined ) { |
|||
$(host).find( '[data-dt-idx='+activeEl+']' ).trigger('focus'); |
|||
} |
|||
}; |
|||
|
|||
|
|||
return DataTable; |
|||
})); |
|||
@ -1,4 +1,6 @@ |
|||
/* |
|||
https://select2.org/troubleshooting/common-problems
|
|||
*/ |
|||
$.fn.modal.Constructor.prototype._enforceFocus = function () { }; |
|||
if ($.fn.modal) { |
|||
$.fn.modal.Constructor.prototype._enforceFocus = function () { }; |
|||
} |
|||
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,64 @@ |
|||
<Project Sdk="Microsoft.NET.Sdk.Web"> |
|||
|
|||
<Import Project="..\..\..\common.props" /> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net6.0</TargetFramework> |
|||
<RootNamespace>CompanyName.ProjectName</RootNamespace> |
|||
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback> |
|||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> |
|||
<GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> |
|||
<GenerateRuntimeConfigurationFiles>true</GenerateRuntimeConfigurationFiles> |
|||
<PreserveCompilationContext>true</PreserveCompilationContext> |
|||
<MvcRazorExcludeRefAssembliesFromPublish>false</MvcRazorExcludeRefAssembliesFromPublish> |
|||
<PreserveCompilationReferences>true</PreserveCompilationReferences> |
|||
<UserSecretsId>CompanyName.ProjectName-4681b4fd-151f-4221-84a4-929d86723e4c</UserSecretsId> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<Compile Remove="Logs\**" /> |
|||
<Content Remove="Logs\**" /> |
|||
<EmbeddedResource Remove="Logs\**" /> |
|||
<None Remove="Logs\**" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<None Update="Pages\**\*.js"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</None> |
|||
<None Update="Pages\**\*.css"> |
|||
<CopyToOutputDirectory>Always</CopyToOutputDirectory> |
|||
</None> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Serilog.AspNetCore" Version="$(SerilogAspNetCoreVersion)" /> |
|||
<PackageReference Include="Serilog.Sinks.Async" Version="$(SerilogSinksAsyncVersion)" /> |
|||
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="$(MicrosoftVersion)" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="Volo.Abp.Autofac" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="$(AbpPackageVersion)" /> |
|||
<PackageReference Include="Volo.Abp.Account.Application" Version="$(AbpPackageVersion)" /> |
|||
<ProjectReference Include="..\..\src\CompanyName.ProjectName.Domain.Shared\CompanyName.ProjectName.Domain.Shared.csproj" /> |
|||
<ProjectReference Include="..\..\src\CompanyName.ProjectName.EntityFrameworkCore\CompanyName.ProjectName.EntityFrameworkCore.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<_ContentIncludedByDefault Remove="publish\CompanyName.ProjectName.IdentityServer.dll.config" /> |
|||
<_ContentIncludedByDefault Remove="publish\web.config" /> |
|||
<_ContentIncludedByDefault Remove="publish\appsettings.Development.json" /> |
|||
<_ContentIncludedByDefault Remove="publish\appsettings.json" /> |
|||
<_ContentIncludedByDefault Remove="publish\appsettings.Production.json" /> |
|||
<_ContentIncludedByDefault Remove="publish\appsettings.secrets.json" /> |
|||
<_ContentIncludedByDefault Remove="publish\CompanyName.ProjectName.IdentityServer.deps.json" /> |
|||
<_ContentIncludedByDefault Remove="publish\CompanyName.ProjectName.IdentityServer.runtimeconfig.json" /> |
|||
<_ContentIncludedByDefault Remove="publish\package.json" /> |
|||
<_ContentIncludedByDefault Remove="publish\wwwroot\libs\malihu-custom-scrollbar-plugin\package.json" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
@ -0,0 +1,71 @@ |
|||
using Microsoft.AspNetCore.Builder; |
|||
using Microsoft.AspNetCore.Http; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
|
|||
namespace CompanyName.ProjectName.Extensions |
|||
{ |
|||
public static class SameSiteCookiesServiceCollectionExtensions |
|||
{ |
|||
public static IServiceCollection AddSameSiteCookiePolicy(this IServiceCollection services) |
|||
{ |
|||
services.Configure<CookiePolicyOptions>(options => |
|||
{ |
|||
options.MinimumSameSitePolicy = SameSiteMode.Unspecified; |
|||
options.OnAppendCookie = cookieContext => |
|||
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions); |
|||
options.OnDeleteCookie = cookieContext => |
|||
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions); |
|||
}); |
|||
|
|||
return services; |
|||
} |
|||
|
|||
private static void CheckSameSite(HttpContext httpContext, CookieOptions options) |
|||
{ |
|||
if (options.SameSite == SameSiteMode.None) |
|||
{ |
|||
var userAgent = httpContext.Request.Headers["User-Agent"].ToString(); |
|||
if (!httpContext.Request.IsHttps || DisallowsSameSiteNone(userAgent)) |
|||
{ |
|||
// For .NET Core < 3.1 set SameSite = (SameSiteMode)(-1)
|
|||
options.SameSite = SameSiteMode.Unspecified; |
|||
} |
|||
} |
|||
} |
|||
|
|||
private static bool DisallowsSameSiteNone(string userAgent) |
|||
{ |
|||
// Cover all iOS based browsers here. This includes:
|
|||
// - Safari on iOS 12 for iPhone, iPod Touch, iPad
|
|||
// - WkWebview on iOS 12 for iPhone, iPod Touch, iPad
|
|||
// - Chrome on iOS 12 for iPhone, iPod Touch, iPad
|
|||
// All of which are broken by SameSite=None, because they use the iOS networking stack
|
|||
if (userAgent.Contains("CPU iPhone OS 12") || userAgent.Contains("iPad; CPU OS 12")) |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
// Cover Mac OS X based browsers that use the Mac OS networking stack. This includes:
|
|||
// - Safari on Mac OS X.
|
|||
// This does not include:
|
|||
// - Chrome on Mac OS X
|
|||
// Because they do not use the Mac OS networking stack.
|
|||
if (userAgent.Contains("Macintosh; Intel Mac OS X 10_14") && |
|||
userAgent.Contains("Version/") && userAgent.Contains("Safari")) |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
// Cover Chrome 50-69, because some versions are broken by SameSite=None,
|
|||
// and none in this range require it.
|
|||
// Note: this covers some pre-Chromium Edge versions,
|
|||
// but pre-Chromium Edge does not require SameSite=None.
|
|||
if (userAgent.Contains("Chrome/5") || userAgent.Contains("Chrome/6")) |
|||
{ |
|||
return true; |
|||
} |
|||
|
|||
return false; |
|||
} |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
@ -0,0 +1,33 @@ |
|||
@page "/Account/LoggedOut" |
|||
@model Volo.Abp.Account.Web.Pages.Account.LoggedOutModel |
|||
@using Volo.Abp.Account.Localization |
|||
@using Microsoft.AspNetCore.Mvc.Localization |
|||
@inject IHtmlLocalizer<AccountResource> L |
|||
@{ |
|||
ViewData["Title"] = "登出"; |
|||
Layout = null; |
|||
} |
|||
|
|||
<head> |
|||
<title>登出</title> |
|||
<meta charset="utf-8"/> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no"/> |
|||
</head> |
|||
<div> |
|||
@if (Model.PostLogoutRedirectUri != null) |
|||
{ |
|||
<a abp-button="Primary" id="redirectButton" href="@Model.PostLogoutRedirectUri" cname="@Model.ClientName">@L["ReturnToText"]</a> |
|||
} |
|||
@if (Model.SignOutIframeUrl != null) |
|||
{ |
|||
<iframe class="signout logoutiframe" src="@Model.SignOutIframeUrl"></iframe> |
|||
} |
|||
</div> |
|||
<script> |
|||
document.addEventListener('DOMContentLoaded', function (event) { |
|||
|
|||
window.clientName = document.getElementById("redirectButton").getAttribute("cname"); |
|||
window.location = document.getElementById('redirectButton').getAttribute('href'); |
|||
|
|||
}); |
|||
</script> |
|||
@ -0,0 +1,70 @@ |
|||
@page |
|||
@using Microsoft.AspNetCore.Mvc.Localization |
|||
@using Volo.Abp.Account.Localization |
|||
@using Volo.Abp.Account.Settings |
|||
@using Volo.Abp.Settings |
|||
@model Volo.Abp.Account.Web.Pages.Account.LoginModel |
|||
@inject IHtmlLocalizer<AccountResource> L |
|||
@inject Volo.Abp.Settings.ISettingProvider SettingProvider |
|||
<div class="card mt-3 shadow-sm rounded"> |
|||
<div class="card-body p-5"> |
|||
<h4>@L["Login"]</h4> |
|||
@* @if (await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled)) *@ |
|||
@* { *@ |
|||
@* <strong> *@ |
|||
@* @L["AreYouANewUser"] *@ |
|||
@* <a href="@Url.Page("./Register", new {returnUrl = Model.ReturnUrl, returnUrlHash = Model.ReturnUrlHash})" class="text-decoration-none">@L["Register"]</a> *@ |
|||
@* </strong> *@ |
|||
@* } *@ |
|||
@if (Model.EnableLocalLogin) |
|||
{ |
|||
<form method="post" class="mt-4"> |
|||
<div class="form-group"> |
|||
<label asp-for="LoginInput.UserNameOrEmailAddress"></label> |
|||
<input asp-for="LoginInput.UserNameOrEmailAddress" class="form-control"/> |
|||
<span asp-validation-for="LoginInput.UserNameOrEmailAddress" class="text-danger"></span> |
|||
</div> |
|||
<div class="form-group"> |
|||
<label asp-for="LoginInput.Password"></label> |
|||
<input asp-for="LoginInput.Password" class="form-control"/> |
|||
<span asp-validation-for="LoginInput.Password" class="text-danger"></span> |
|||
</div> |
|||
<abp-row> |
|||
<abp-column> |
|||
<abp-input asp-for="LoginInput.RememberMe" class="mb-4"/> |
|||
</abp-column> |
|||
@* <abp-column class="text-right"> *@ |
|||
@* <a href="@Url.Page("./ForgotPassword", new {returnUrl = Model.ReturnUrl, returnUrlHash = Model.ReturnUrlHash})">@L["ForgotPassword"]</a> *@ |
|||
@* </abp-column> *@ |
|||
</abp-row> |
|||
<abp-button type="submit" button-type="Primary" name="Action" value="Login" class="btn-block btn-lg mt-3">@L["Login"]</abp-button> |
|||
@if (Model.ShowCancelButton) |
|||
{ |
|||
<abp-button type="submit" button-type="Secondary" formnovalidate="formnovalidate" name="Action" value="Cancel" class="btn-block btn-lg mt-3">@L["Cancel"]</abp-button> |
|||
} |
|||
</form> |
|||
} |
|||
|
|||
@if (Model.VisibleExternalProviders.Any()) |
|||
{ |
|||
<div class="mt-2"> |
|||
<h5>@L["OrLoginWith"]</h5> |
|||
<form asp-page="./Login" asp-page-handler="ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" asp-route-returnUrlHash="@Model.ReturnUrlHash" method="post"> |
|||
@foreach (var provider in Model.VisibleExternalProviders) |
|||
{ |
|||
<button type="submit" class="btn btn-primary m-1" name="provider" value="@provider.AuthenticationScheme" title="@L["LogInUsingYourProviderAccount", provider.DisplayName]">@provider.DisplayName</button> |
|||
} |
|||
</form> |
|||
</div> |
|||
} |
|||
|
|||
@if (!Model.EnableLocalLogin && !Model.VisibleExternalProviders.Any()) |
|||
{ |
|||
<div class="alert alert-warning"> |
|||
<strong>@L["InvalidLoginRequest"]</strong> |
|||
@L["ThereAreNoLoginSchemesConfiguredForThisClient"] |
|||
</div> |
|||
} |
|||
|
|||
</div> |
|||
</div> |
|||
@ -0,0 +1,36 @@ |
|||
@page |
|||
@using CompanyName.ProjectName.Pages |
|||
@using Volo.Abp.Users |
|||
@model IndexModel |
|||
@inject ICurrentUser CurrentUser |
|||
@if (CurrentUser.IsAuthenticated) |
|||
{ |
|||
<div> |
|||
<abp-row> |
|||
<abp-column size-md="_3" class="text-center"> |
|||
<i class="fa fa-user d-block" style="font-size: 10em; color: #12b900"></i> |
|||
<a abp-button="Primary" href="/Account/Logout">Logout</a> |
|||
</abp-column> |
|||
<abp-column size-md="_9"> |
|||
<h2>@CurrentUser.UserName</h2> |
|||
<h5 class="text-muted">@CurrentUser.Email</h5> |
|||
<div> |
|||
<strong>Roles</strong>: @CurrentUser.Roles.JoinAsString(", ") |
|||
<br /> |
|||
<strong>Claims</strong>: <br /> |
|||
@Html.Raw(CurrentUser.GetAllClaims().Select(c => $"{c.Type}={c.Value}").JoinAsString(" <br /> ")) |
|||
</div> |
|||
</abp-column> |
|||
</abp-row> |
|||
</div> |
|||
} |
|||
|
|||
|
|||
|
|||
@if (!CurrentUser.IsAuthenticated) |
|||
{ |
|||
<div class="text-center"> |
|||
<i class="fa fa-user d-block" style="font-size: 10em; color: #aaa"></i><br /><br /> |
|||
<a abp-button="Primary" asp-page="/Account/Login">Login</a> |
|||
</div> |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
using Microsoft.AspNetCore.Mvc; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
|||
using Volo.Abp.Users; |
|||
|
|||
namespace CompanyName.ProjectName.Pages |
|||
{ |
|||
public class IndexModel : AbpPageModel |
|||
{ |
|||
private readonly ICurrentUser _currentUser; |
|||
|
|||
public IndexModel(ICurrentUser currentUser) |
|||
{ |
|||
_currentUser = currentUser; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
@page |
|||
@model CompanyName.ProjectName.Pages.Welcome |
|||
@using Volo.Abp.Users |
|||
@inject ICurrentUser CurrentUser |
|||
@if (CurrentUser.IsAuthenticated) |
|||
{ |
|||
<div> |
|||
<abp-row> |
|||
<abp-column size-md="_3" class="text-center"> |
|||
<i class="fa fa-user d-block" style="font-size: 10em; color: #12b900"></i> |
|||
<a abp-button="Primary" href="/Account/Logout">Logout</a> |
|||
</abp-column> |
|||
<abp-column size-md="_9"> |
|||
<h2>@CurrentUser.UserName</h2> |
|||
<h5 class="text-muted">@CurrentUser.Email</h5> |
|||
<div> |
|||
<strong>Roles</strong>: @CurrentUser.Roles.JoinAsString(", ") |
|||
<br /> |
|||
<strong>Claims</strong>: <br /> |
|||
@Html.Raw(CurrentUser.GetAllClaims().Select(c => $"{c.Type}={c.Value}").JoinAsString(" <br /> ")) |
|||
</div> |
|||
</abp-column> |
|||
</abp-row> |
|||
</div> |
|||
} |
|||
|
|||
|
|||
|
|||
@if (!CurrentUser.IsAuthenticated) |
|||
{ |
|||
<div class="text-center"> |
|||
<i class="fa fa-user d-block" style="font-size: 10em; color: #aaa"></i><br /><br /> |
|||
<a abp-button="Primary" asp-page="/Account/Login">Login</a> |
|||
</div> |
|||
} |
|||
@ -0,0 +1,22 @@ |
|||
using Microsoft.AspNetCore.Authorization; |
|||
using Microsoft.AspNetCore.Mvc.RazorPages; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
|||
using Volo.Abp.Users; |
|||
|
|||
namespace CompanyName.ProjectName.Pages |
|||
{ |
|||
[Authorize] |
|||
public class Welcome : AbpPageModel |
|||
{ |
|||
private readonly ICurrentUser _currentUser; |
|||
|
|||
public Welcome(ICurrentUser currentUser) |
|||
{ |
|||
_currentUser = currentUser; |
|||
} |
|||
|
|||
public void OnGet() |
|||
{ |
|||
} |
|||
} |
|||
} |
|||
@ -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 |
|||
@ -0,0 +1,54 @@ |
|||
using System; |
|||
using Microsoft.AspNetCore.Hosting; |
|||
using Microsoft.Extensions.Hosting; |
|||
using Serilog; |
|||
using Serilog.Events; |
|||
|
|||
namespace CompanyName.ProjectName |
|||
{ |
|||
public class Program |
|||
{ |
|||
public static int Main(string[] args) |
|||
{ |
|||
Log.Logger = new LoggerConfiguration() |
|||
#if DEBUG
|
|||
.MinimumLevel.Debug() |
|||
#else
|
|||
.MinimumLevel.Information() |
|||
#endif
|
|||
.MinimumLevel.Override("Microsoft", LogEventLevel.Information) |
|||
.MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) |
|||
.Enrich.FromLogContext() |
|||
.WriteTo.Async(c => c.File("Logs/logs.txt")) |
|||
#if DEBUG
|
|||
.WriteTo.Async(c => c.Console()) |
|||
#endif
|
|||
.CreateLogger(); |
|||
|
|||
try |
|||
{ |
|||
Log.Information("Starting CompanyName.ProjectName.IdentityServer."); |
|||
CreateHostBuilder(args).Build().Run(); |
|||
return 0; |
|||
} |
|||
catch (Exception ex) |
|||
{ |
|||
Log.Fatal(ex, "CompanyName.ProjectName.IdentityServer terminated unexpectedly!"); |
|||
return 1; |
|||
} |
|||
finally |
|||
{ |
|||
Log.CloseAndFlush(); |
|||
} |
|||
} |
|||
|
|||
internal static IHostBuilder CreateHostBuilder(string[] args) => |
|||
Host.CreateDefaultBuilder(args) |
|||
.ConfigureWebHostDefaults(webBuilder => |
|||
{ |
|||
webBuilder.UseStartup<Startup>(); |
|||
}) |
|||
.UseAutofac() |
|||
.UseSerilog(); |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
using Volo.Abp.Ui.Branding; |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace CompanyName.ProjectName |
|||
{ |
|||
[Dependency(ReplaceServices = true)] |
|||
public class ProjectNameBrandingProvider : DefaultBrandingProvider |
|||
{ |
|||
public override string AppName => "ProjectName"; |
|||
} |
|||
} |
|||
@ -0,0 +1,190 @@ |
|||
using System; |
|||
using System.Linq; |
|||
using Localization.Resources.AbpUi; |
|||
using Microsoft.AspNetCore.Builder; |
|||
using Microsoft.AspNetCore.Cors; |
|||
using Microsoft.AspNetCore.DataProtection; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
using Microsoft.Extensions.Hosting; |
|||
using CompanyName.ProjectName.EntityFrameworkCore; |
|||
using CompanyName.ProjectName.Extensions; |
|||
using CompanyName.ProjectName.Localization; |
|||
using CompanyName.ProjectName.MultiTenancy; |
|||
using Microsoft.Extensions.Configuration; |
|||
using StackExchange.Redis; |
|||
using Volo.Abp; |
|||
using Volo.Abp.Account; |
|||
using Volo.Abp.Account.Web; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Bundling; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Bundling; |
|||
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; |
|||
using Volo.Abp.AspNetCore.Serilog; |
|||
using Volo.Abp.Auditing; |
|||
using Volo.Abp.Autofac; |
|||
using Volo.Abp.BackgroundJobs; |
|||
using Volo.Abp.Caching; |
|||
using Volo.Abp.Caching.StackExchangeRedis; |
|||
using Volo.Abp.Localization; |
|||
using Volo.Abp.Modularity; |
|||
using Volo.Abp.UI.Navigation.Urls; |
|||
using Volo.Abp.VirtualFileSystem; |
|||
|
|||
namespace CompanyName.ProjectName |
|||
{ |
|||
[DependsOn( |
|||
typeof(AbpAutofacModule), |
|||
typeof(AbpCachingStackExchangeRedisModule), |
|||
typeof(AbpAccountWebIdentityServerModule), |
|||
typeof(AbpAccountApplicationModule), |
|||
typeof(AbpAspNetCoreMvcUiBasicThemeModule), |
|||
typeof(ProjectNameEntityFrameworkCoreModule), |
|||
typeof(AbpAspNetCoreSerilogModule) |
|||
)] |
|||
public class ProjectNameIdentityServerModule : AbpModule |
|||
{ |
|||
private const string DefaultCorsPolicyName = "Default"; |
|||
|
|||
public override void ConfigureServices(ServiceConfigurationContext context) |
|||
{ |
|||
var hostingEnvironment = context.Services.GetHostingEnvironment(); |
|||
var configuration = context.Services.GetConfiguration(); |
|||
context.Services.AddSameSiteCookiePolicy(); |
|||
ConfigureLocalization(); |
|||
ConfigureVirtualFileSystem(context); |
|||
ConfigureCache(context); |
|||
ConfigureCors(context, configuration); |
|||
ConfigureOther(configuration); |
|||
} |
|||
|
|||
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
|||
{ |
|||
var app = context.GetApplicationBuilder(); |
|||
var env = context.GetEnvironment(); |
|||
|
|||
if (env.IsDevelopment()) |
|||
{ |
|||
app.UseDeveloperExceptionPage(); |
|||
} |
|||
|
|||
app.UseAbpRequestLocalization(); |
|||
|
|||
if (!env.IsDevelopment()) |
|||
{ |
|||
app.UseErrorPage(); |
|||
} |
|||
|
|||
app.UseCorrelationId(); |
|||
app.UseStaticFiles(); |
|||
app.UseRouting(); |
|||
app.UseCors(DefaultCorsPolicyName); |
|||
app.UseCookiePolicy(); |
|||
app.UseAuthentication(); |
|||
|
|||
if (MultiTenancyConsts.IsEnabled) |
|||
{ |
|||
app.UseMultiTenancy(); |
|||
} |
|||
|
|||
app.UseUnitOfWork(); |
|||
app.UseIdentityServer(); |
|||
app.UseAuthorization(); |
|||
app.UseAuditing(); |
|||
app.UseAbpSerilogEnrichers(); |
|||
app.UseConfiguredEndpoints(); |
|||
} |
|||
|
|||
private void ConfigureOther(IConfiguration configuration) |
|||
|
|||
{ |
|||
Configure<AppUrlOptions>(options => |
|||
{ |
|||
options.Applications["MVC"].RootUrl = configuration["App:SelfUrl"]; |
|||
options.RedirectAllowedUrls.AddRange(configuration["App:RedirectAllowedUrls"].Split(',')); |
|||
|
|||
options.Applications["Angular"].RootUrl = configuration["App:ClientUrl"]; |
|||
options.Applications["Angular"].Urls[AccountUrlNames.PasswordReset] = "account/reset-password"; |
|||
}); |
|||
Configure<AbpBackgroundJobOptions>(options => { options.IsJobExecutionEnabled = false; }); |
|||
Configure<AbpAuditingOptions>(options => |
|||
{ |
|||
//options.IsEnabledForGetRequests = true;
|
|||
options.ApplicationName = "AuthServer"; |
|||
}); |
|||
} |
|||
|
|||
private void ConfigureCors(ServiceConfigurationContext context, IConfiguration configuration) |
|||
{ |
|||
context.Services.AddCors(options => |
|||
{ |
|||
options.AddPolicy(DefaultCorsPolicyName, builder => |
|||
{ |
|||
builder |
|||
.WithOrigins( |
|||
configuration["App:CorsOrigins"] |
|||
.Split(",", StringSplitOptions.RemoveEmptyEntries) |
|||
.Select(o => o.RemovePostFix("/")) |
|||
.ToArray() |
|||
) |
|||
.WithAbpExposedHeaders() |
|||
.SetIsOriginAllowedToAllowWildcardSubdomains() |
|||
.AllowAnyHeader() |
|||
.AllowAnyMethod() |
|||
.AllowCredentials(); |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
private void ConfigureLocalization() |
|||
{ |
|||
Configure<AbpLocalizationOptions>(options => |
|||
{ |
|||
options.Resources |
|||
.Get<ProjectNameResource>() |
|||
.AddBaseTypes( |
|||
typeof(AbpUiResource) |
|||
); |
|||
|
|||
options.Languages.Add(new LanguageInfo("ar", "ar", "العربية")); |
|||
options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); |
|||
options.Languages.Add(new LanguageInfo("en", "en", "English")); |
|||
options.Languages.Add(new LanguageInfo("en-GB", "en-GB", "English (UK)")); |
|||
options.Languages.Add(new LanguageInfo("fr", "fr", "Français")); |
|||
options.Languages.Add(new LanguageInfo("hu", "hu", "Magyar")); |
|||
options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); |
|||
options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); |
|||
options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); |
|||
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); |
|||
options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); |
|||
options.Languages.Add(new LanguageInfo("de-DE", "de-DE", "Deutsch", "de")); |
|||
options.Languages.Add(new LanguageInfo("es", "es", "Español", "es")); |
|||
}); |
|||
} |
|||
|
|||
/// <summary>
|
|||
/// Redis缓存
|
|||
/// </summary>
|
|||
private void ConfigureCache(ServiceConfigurationContext context) |
|||
{ |
|||
Configure<AbpDistributedCacheOptions>(options => { options.KeyPrefix = "ProjectName:"; }); |
|||
var configuration = context.Services.GetConfiguration(); |
|||
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); |
|||
context.Services |
|||
.AddDataProtection() |
|||
.PersistKeysToStackExchangeRedis(redis, "ProjectName-Protection-Keys"); |
|||
} |
|||
|
|||
private void ConfigureVirtualFileSystem(ServiceConfigurationContext context) |
|||
{ |
|||
Configure<AbpVirtualFileSystemOptions>(options => { options.FileSets.AddEmbedded<ProjectNameIdentityServerModule>(); }); |
|||
|
|||
Configure<AbpBundlingOptions>(options => |
|||
{ |
|||
options.StyleBundles.Configure( |
|||
BasicThemeBundles.Styles.Global, |
|||
bundle => { bundle.AddFiles("/global-styles.css"); } |
|||
); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,12 @@ |
|||
{ |
|||
"profiles": { |
|||
"CompanyName.ProjectName.IdentityServer": { |
|||
"commandName": "Project", |
|||
"launchBrowser": false, |
|||
"applicationUrl": "http://localhost:44354", |
|||
"environmentVariables": { |
|||
"ASPNETCORE_ENVIRONMENT": "Development" |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,18 @@ |
|||
using Microsoft.AspNetCore.Builder; |
|||
using Microsoft.Extensions.DependencyInjection; |
|||
|
|||
namespace CompanyName.ProjectName |
|||
{ |
|||
public class Startup |
|||
{ |
|||
public void ConfigureServices(IServiceCollection services) |
|||
{ |
|||
services.AddApplication<ProjectNameIdentityServerModule>(); |
|||
} |
|||
|
|||
public void Configure(IApplicationBuilder app) |
|||
{ |
|||
app.InitializeApplication(); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
module.exports = { |
|||
aliases: { |
|||
|
|||
}, |
|||
clean: [ |
|||
|
|||
], |
|||
mappings: { |
|||
|
|||
} |
|||
}; |
|||
@ -0,0 +1,15 @@ |
|||
{ |
|||
"App": { |
|||
"SelfUrl": "https://localhost:44354", |
|||
"ClientUrl": "http://localhost:4200", |
|||
"CorsOrigins": "https://*.ProjectName.com,http://localhost:4200,https://localhost:44307,https://localhost:44315,http://120.24.194.14:8012,http://120.24.194.14:8011,http://120.24.194.14:8013", |
|||
"RedirectAllowedUrls": "http://localhost:4200,https://localhost:44307" |
|||
}, |
|||
"ConnectionStrings": { |
|||
"Default": "Data Source=120.24.194.14;Database=CompanyNameProjectName20211114;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" |
|||
}, |
|||
"Redis": { |
|||
"Configuration": "120.24.194.14,password=1q2w3E*,defaultdatabase=1" |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,15 @@ |
|||
{ |
|||
"App": { |
|||
"SelfUrl": "https://localhost:44354", |
|||
"ClientUrl": "http://localhost:4200", |
|||
"CorsOrigins": "https://*.ProjectName.com,http://localhost:4200,https://localhost:44307,https://localhost:44315", |
|||
"RedirectAllowedUrls": "http://localhost:4200,https://localhost:44307" |
|||
}, |
|||
"ConnectionStrings": { |
|||
"Default": "Data Source=localhost;Database=CompanyNameProjectNameDB6;uid=root;pwd=1q2w3E*;charset=utf8mb4;Allow User Variables=true;AllowLoadLocalInfile=true" |
|||
}, |
|||
"Redis": { |
|||
"Configuration": "localhost,password=mypassword,defaultdatabase=1" |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,8 @@ |
|||
{ |
|||
"version": "1.0.0", |
|||
"name": "my-app-identityserver", |
|||
"private": true, |
|||
"dependencies": { |
|||
"@abp/aspnetcore.mvc.ui.theme.basic": "^5.0.0-rc.1" |
|||
} |
|||
} |
|||
@ -0,0 +1 @@ |
|||
{"alg":"RS256","d":"Y_Mo7J2gdKgMLqrDtdW8JZtIiHvJWpWb2qAljxeQSiTAZs4-Cuss9CWpKJxYe3ZBzCLXHiZr6Zx5CMWC7yhAh0ojM71q4Tyw4N3YQfiAm--lWqIMJSMhGK0Hj2PiHdctt9J3NHSuwjD-HfHcNOMVzLiBaGuvlaVyIqz959FwxNsb5QzuxcRXNOMoO7d7uKR9ZYdFECWfBCthf4Mfr2YOLSORtyikooDMDmAJCL6U3igO11rdqWAMNMPfCmA0qKU4YNyhZgXpC-FrobiHbiSug5_xgBLSvSfIquBz7yW_tUkbM-NHy1Iz1erkK1tY3x5HWANtu5tbLqM6UGn0ivb3AQ","dp":"a4b7gwmFr-ukqza608XDNaGKgzQlaEum6h0qAbjtdUrydWARYiNAiSLuxn5vQ6CVobDfAhsD1x0Tnfy8DHaHBu89yncs0Fzu7szeBcLpU3OAlY6wx2swouBHT0gXMweL37sZpS9wJ14mKJ60EuLhhcZnKJdhQG1e1A5NICZecPk","dq":"oZEXJ7lc2emvnJxoBqVmYt_Uf49M4izkQ5dtYFncYVSZGErDsUlcR7wtmTpvdfKV2zQ9d6ZAMrzGmTIxRq7gXRF7hDpADxvAfJVTT0DH5nxJwiMPf9FA_g0QZANZgkMrRfZ7fXFhSAA96JYy60x45n731hsh0lIMYnJWS9S7p4c","e":"AQAB","kid":"CBCA50D09AFE5E5FC45E5D80805CC5BC","kty":"RSA","n":"rlyLVmVEmEMq5OYtJF76THrc6xiLRf1RcjwvbCMaZYpSEYtfPqU7hnNVk3HVbEHVtovMG-UHhfHYIZIttwbd3u2JXK3IYtTyrovyQtcFzww4VDiF77_u9oBwDrAXj99evUaI_M9lHd9LHRxOw8-p-Y5FIXO7-ZoAfdA_0JFk5QxXNTd7BfP7FFX1JZn-ossHm0-dFEL9cLE4YKpA8SQ1z0KLFCjMYV_NG9J5kPcPjdTYH3ZxrSCr65hWgEw7ombPwTp87KmWU-DYAdJP8ur32-lzv1JgKAlsCNJfS5U57FUIGClY8FZ-6KEyWUeA6k3UYEjc4Gl_XjS6x4bL1nGZ4Q","p":"0KoX6IJTNjGUSo4CM7tn_xDUSGV1Z_qJRsUOk3FdKbHFHn3iHsfV4xme3Ma06RtEojS0AgQ6t7EBFZ8cDlS-RnPsLtptRfa3aNkyBOtIqr5iu65siOYi-cqHxiSdwNy6d_EnNQojKcy9IgbT1Zp1SViLWPsh3fgr6mPD1NlzjFs","q":"1epav74nxH7spLZXTkhr0tSW87SeKXTG3pAFAVNBLSETdLDq54b3f34xtV7sCJiGvtyFBMhQb_GmYe1nkfxdTKPzJC-fpUkHeZqkX7MpvOwlig5AbLx8bjDtfuEDXWbEUV9HE3IEPNlkUnXHz4wXFOiz4arHQdIztd7vajLGN3M","qi":"rwQvfIRyqvgqRPQkF1Xvzv9fIjGzuVV01Wt38Cp2kajSoM-3AzxOlpe3LS4hnrwKiXNgmfFAuuDJELRTBqICwTJslErqIyoLXVz2nERN8nvOGhPJPKjpOPjS_5FPpeImpEkQP0fbk3dCv2kyykO0qMS8HIcsf1M1Y02WplRz9TM"} |
|||
@ -0,0 +1 @@ |
|||
{"KeyId":"ac0d2edf3c04d13cd95cc41b9b33ab03","Parameters":{"D":"FFymEWbX3XBT5YnTngOKwtz3XKsyaQbyDvvw9jbmkdvLKUmrb1hkmylqVYwU/3G1u79rrD8AZXJDoYVLegyZymK/iNeePMLI4i5vScF7PdQXn/g6CvQ8j3J60YYyfDWuxjBH8nCEUIfQIv14BpcH6CWi1BVZUbnbWcpe2ji8D5I3FHOZpvksQztst5eE836ODdN9jgk35kgrdUQ14MEFHA6m6fAzvFI1csFxD3Kwej4rI8RYZ0WYLkndz9ID88+v9VxqI8+wN6wR6tIOR510uT1FI5wONBVBUzgeZ6cCEpg0jC9tgqcP03gMDpmE7vKp34ExxH/iOWyhQ0gAxHOVlQ==","DP":"qSQfNZvEkepgY12d+uwTbRoOp+0g1CBiMU9kqyoIB56hAUnzENSCDzunjLRrvDLFPgXiUcoccskyVRnKKOGPOqPE6VjgzBrdLgA/hBf8hPg0GnTVoPyLxR9G6GsGUKsAYVn8G7cnK5wXzK4jCjsflkfxCzFfdASJ/+sa5QPWZMM=","DQ":"u+56T1+rhMvlurid9kBS2Ypfm4vOiNAXLD9kGz2wx8Ob0yYlWo55kn11qPs6Ej9bnQIY3N+TY2tXMamfhAhntoHaKrFjOpCmlHZ0GAeQOJVuWSlFvu/NBoxfjZzcUCNua22oJjy++wSdkkLLGEqau62byaQoSSqUxUzwL36RexM=","Exponent":"AQAB","InverseQ":"E+uq9g6D5LjUk+M7gtt0srnT8duwu8P83AgFqjtGOnSCy71omSboxb4zC9bGq/WaEFauFBwqxbkXwFyXuYNfIelfmSERulU9jgf0+KH6QmFdtjrJ5UO7VArqET1WUquwiDvOyO8udCxi8RRAiM5G3dTzIs5JTalGhlKEZSAgPtQ=","Modulus":"rgHACxzqvuE72RF/NdDTLsIEy3F/n6P4lkgrER60FU8uRNwSmAMRxvxYOaE3Ot/krRYcw2+MP8ewR1VBXywXVT1zuACA3SacMHJYmZQ2UkuwsD9bmpjvqoMhR/hjsI74jTzKpclHtEu7D7WYDZaIPAEIs/8+5H/z1mXVfgACaeaQt3C0OhwXSOPPDP71VKGfoFucXYED1keZ0PKxYAlhiHOe7cnSlfJseujwD2Rhyq8mUhe6aEMTYBjuruWgpfvnSOARAqu5vwzK35KpAirHwa1DJSZyanNMFdlLkVNKWUKEqd6PwRneiHacmaaDF6oQQstuSbf9cuJeSMbKh7WVQQ==","P":"0CJDit2NHk0Z1bN5ZVIYZRUYbrAI2bEOafAKqfffcA/Os7yXsY14Ye4pSpDxfdZGcPGRL04HPkJsogFtyI7k4ujrvsC66I5cg45+BhBMM0zyLJ7LZkD2HGwX2+a/xrXhhIIOnGWWy2zzW3dkayRhi1bR9krfTA5uBw1LX9qZ3Yc=","Q":"1gZITAaB+r0+PgOfyDCeVzSnTyQuKSkgbUkIgQP9jQZa6edrbAXogdJipxmUTrW7JaxifG1z9ubK+TOqhjZHqT4gd8U8Bh7jCBizZNVe60pez1OtNGpEOW2N+ZrXBSMNcV8PFaMg/B+fcaX+i7NWpTqmztR/V0DGXmD+XosuaPc="}} |
|||
File diff suppressed because it is too large
File diff suppressed because one or more lines are too long
@ -0,0 +1,71 @@ |
|||
/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification |
|||
for details on configuring this project to bundle and minify static web assets. */ |
|||
|
|||
a.navbar-brand { |
|||
white-space: normal; |
|||
text-align: center; |
|||
word-break: break-all; |
|||
} |
|||
|
|||
/* Provide sufficient contrast against white background */ |
|||
a { |
|||
color: #0366d6; |
|||
} |
|||
|
|||
.btn-primary { |
|||
color: #fff; |
|||
background-color: #1b6ec2; |
|||
border-color: #1861ac; |
|||
} |
|||
|
|||
.nav-pills .nav-link.active, .nav-pills .show > .nav-link { |
|||
color: #fff; |
|||
background-color: #1b6ec2; |
|||
border-color: #1861ac; |
|||
} |
|||
|
|||
/* Sticky footer styles |
|||
-------------------------------------------------- */ |
|||
html { |
|||
font-size: 14px; |
|||
} |
|||
@media (min-width: 768px) { |
|||
html { |
|||
font-size: 16px; |
|||
} |
|||
} |
|||
|
|||
.border-top { |
|||
border-top: 1px solid #e5e5e5; |
|||
} |
|||
.border-bottom { |
|||
border-bottom: 1px solid #e5e5e5; |
|||
} |
|||
|
|||
.box-shadow { |
|||
box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05); |
|||
} |
|||
|
|||
button.accept-policy { |
|||
font-size: 1rem; |
|||
line-height: inherit; |
|||
} |
|||
|
|||
/* Sticky footer styles |
|||
-------------------------------------------------- */ |
|||
html { |
|||
position: relative; |
|||
min-height: 100%; |
|||
} |
|||
|
|||
body { |
|||
/* Margin bottom by footer height */ |
|||
margin-bottom: 60px; |
|||
} |
|||
.footer { |
|||
position: absolute; |
|||
bottom: 0; |
|||
width: 100%; |
|||
white-space: nowrap; |
|||
line-height: 60px; /* Vertically center the text there */ |
|||
} |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue