├── CMS_CORE_NG ├── ClientApp │ ├── src │ │ ├── assets │ │ │ ├── .gitkeep │ │ │ └── images │ │ │ │ ├── spinner.gif │ │ │ │ ├── profilepic.png │ │ │ │ └── bg-register.jpeg │ │ ├── app │ │ │ ├── app.component.css │ │ │ ├── home │ │ │ │ ├── home.component.css │ │ │ │ ├── home.component.html │ │ │ │ ├── home.component.ts │ │ │ │ └── home.component.spec.ts │ │ │ ├── user │ │ │ │ ├── user.component.css │ │ │ │ ├── user-settings │ │ │ │ │ ├── user-settings.component.css │ │ │ │ │ └── user-settings.component.spec.ts │ │ │ │ ├── user.component.html │ │ │ │ ├── user.component.ts │ │ │ │ ├── user-activity │ │ │ │ │ ├── user-activity.component.css │ │ │ │ │ ├── user-activity.component.spec.ts │ │ │ │ │ └── user-activity.component.ts │ │ │ │ ├── user.component.spec.ts │ │ │ │ ├── user-profile │ │ │ │ │ ├── user-profile.component.spec.ts │ │ │ │ │ └── user-profile.component.css │ │ │ │ ├── user.module.ts │ │ │ │ └── user-routing.module.ts │ │ │ ├── terms │ │ │ │ ├── terms.component.css │ │ │ │ ├── terms.component.ts │ │ │ │ └── terms.component.spec.ts │ │ │ ├── nav-menu │ │ │ │ ├── nav-menu.component.css │ │ │ │ ├── nav-menu.component.spec.ts │ │ │ │ └── nav-menu.component.ts │ │ │ ├── app.component.html │ │ │ ├── interfaces │ │ │ │ ├── store-state.ts │ │ │ │ ├── login.ts │ │ │ │ ├── country.ts │ │ │ │ ├── address.ts │ │ │ │ ├── register.ts │ │ │ │ └── profile.ts │ │ │ ├── contact-us │ │ │ │ ├── contact-us.component.css │ │ │ │ ├── contact-us.component.spec.ts │ │ │ │ └── contact-us.component.ts │ │ │ ├── app.component.ts │ │ │ ├── send-code │ │ │ │ ├── send-code.component.css │ │ │ │ └── send-code.component.spec.ts │ │ │ ├── validate-code │ │ │ │ ├── validate-code.component.css │ │ │ │ ├── validate-code.component.spec.ts │ │ │ │ └── validate-code.component.html │ │ │ ├── about-us │ │ │ │ ├── about-us.component.ts │ │ │ │ └── about-us.component.spec.ts │ │ │ ├── login │ │ │ │ ├── login.component.spec.ts │ │ │ │ └── login.component.css │ │ │ ├── register │ │ │ │ ├── register.component.spec.ts │ │ │ │ └── register.component.css │ │ │ ├── forgot-password │ │ │ │ ├── forgot-password.component.spec.ts │ │ │ │ ├── forgot-password.component.css │ │ │ │ └── forgot-password.component.html │ │ │ ├── services │ │ │ │ ├── country.service.ts │ │ │ │ └── common │ │ │ │ │ └── validator.service.ts │ │ │ ├── app.component.spec.ts │ │ │ └── app-routing.module.ts │ │ ├── environments │ │ │ ├── environment.prod.ts │ │ │ └── environment.ts │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── main.ts │ │ └── test.ts │ ├── .prettierrc.json │ ├── .editorconfig │ ├── e2e │ │ ├── src │ │ │ ├── app.po.ts │ │ │ └── app.e2e-spec.ts │ │ ├── tsconfig.json │ │ └── protractor.conf.js │ ├── tsconfig.app.json │ ├── tsconfig.spec.json │ ├── tsconfig.base.json │ ├── tsconfig.json │ ├── .browserslistrc │ ├── .gitignore │ ├── README.md │ └── karma.conf.js ├── wwwroot │ ├── lib │ │ ├── popper.js │ │ │ └── esm │ │ │ │ ├── types.js │ │ │ │ ├── types.min.js │ │ │ │ ├── utils │ │ │ │ ├── getAltAxis.min.js │ │ │ │ ├── getVariation.min.js │ │ │ │ ├── getAltLen.min.js │ │ │ │ ├── within.min.js │ │ │ │ ├── getAltAxis.js │ │ │ │ ├── getAltLen.js │ │ │ │ ├── getFreshSideObject.min.js │ │ │ │ ├── getVariation.js │ │ │ │ ├── within.js │ │ │ │ ├── expandToHashMap.min.js │ │ │ │ ├── getBasePlacement.min.js │ │ │ │ ├── getMainAxisFromPlacement.min.js │ │ │ │ ├── uniqueBy.min.js │ │ │ │ ├── getBasePlacement.js │ │ │ │ ├── getMainAxisFromPlacement.js │ │ │ │ ├── getFreshSideObject.js │ │ │ │ ├── debounce.min.js │ │ │ │ ├── rectToClientRect.min.js │ │ │ │ ├── getOppositeVariationPlacement.min.js │ │ │ │ ├── mergePaddingObject.min.js │ │ │ │ ├── expandToHashMap.js │ │ │ │ ├── format.min.js │ │ │ │ ├── getOppositePlacement.min.js │ │ │ │ ├── mergePaddingObject.js │ │ │ │ ├── rectToClientRect.js │ │ │ │ ├── getOppositeVariationPlacement.js │ │ │ │ ├── uniqueBy.js │ │ │ │ ├── getOppositePlacement.js │ │ │ │ ├── format.js │ │ │ │ ├── mergeByName.min.js │ │ │ │ ├── debounce.js │ │ │ │ ├── orderModifiers.min.js │ │ │ │ ├── mergeByName.js │ │ │ │ ├── computeOffsets.min.js │ │ │ │ ├── computeAutoPlacement.min.js │ │ │ │ ├── orderModifiers.js │ │ │ │ ├── detectOverflow.min.js │ │ │ │ └── validateModifiers.min.js │ │ │ │ ├── popper-base.min.js │ │ │ │ ├── popper-base.js │ │ │ │ ├── modifiers │ │ │ │ ├── popperOffsets.min.js │ │ │ │ ├── eventListeners.min.js │ │ │ │ ├── offset.min.js │ │ │ │ ├── popperOffsets.js │ │ │ │ ├── hide.min.js │ │ │ │ ├── applyStyles.min.js │ │ │ │ ├── eventListeners.js │ │ │ │ ├── arrow.min.js │ │ │ │ └── offset.js │ │ │ │ ├── popper-lite.min.js │ │ │ │ ├── popper-lite.js │ │ │ │ ├── popper.min.js │ │ │ │ ├── popper.js │ │ │ │ ├── enums.min.js │ │ │ │ └── enums.js │ │ ├── chosen │ │ │ ├── chosen-sprite.png │ │ │ └── chosen-sprite@2x.png │ │ ├── font-awesome │ │ │ ├── webfonts │ │ │ │ ├── fa-solid-900.eot │ │ │ │ ├── fa-solid-900.ttf │ │ │ │ ├── fa-brands-400.eot │ │ │ │ ├── fa-brands-400.ttf │ │ │ │ ├── fa-brands-400.woff │ │ │ │ ├── fa-regular-400.eot │ │ │ │ ├── fa-regular-400.ttf │ │ │ │ ├── fa-solid-900.woff │ │ │ │ ├── fa-solid-900.woff2 │ │ │ │ ├── fa-brands-400.woff2 │ │ │ │ ├── fa-regular-400.woff │ │ │ │ └── fa-regular-400.woff2 │ │ │ └── css │ │ │ │ ├── solid.min.css │ │ │ │ ├── brands.min.css │ │ │ │ ├── regular.min.css │ │ │ │ ├── solid.css │ │ │ │ ├── brands.css │ │ │ │ └── regular.css │ │ ├── jqueryui │ │ │ └── images │ │ │ │ └── ui-icons_444444_256x240.png │ │ ├── custom │ │ │ ├── css │ │ │ │ ├── admin │ │ │ │ │ ├── user.min.css │ │ │ │ │ └── user.css │ │ │ │ └── notification │ │ │ │ │ ├── notification.min.css │ │ │ │ │ └── notification.css │ │ │ └── js │ │ │ │ ├── admin │ │ │ │ ├── admin.min.js │ │ │ │ └── admin.js │ │ │ │ └── common │ │ │ │ ├── password-generator.js │ │ │ │ └── image.js │ │ ├── tabulator │ │ │ └── js │ │ │ │ └── modules │ │ │ │ ├── resize_table.min.js │ │ │ │ ├── resize_table.js │ │ │ │ └── resize_rows.min.js │ │ └── jquery-validate │ │ │ └── localization │ │ │ └── messages_ka.min.js │ ├── favicon.ico │ ├── images │ │ └── bg.jpeg │ ├── fonts │ │ ├── Poppins │ │ │ ├── Poppins-Black.ttf │ │ │ ├── Poppins-Bold.ttf │ │ │ ├── Poppins-Italic.ttf │ │ │ ├── Poppins-Light.ttf │ │ │ ├── Poppins-Medium.ttf │ │ │ ├── Poppins-Thin.ttf │ │ │ ├── Poppins-Regular.ttf │ │ │ ├── Poppins-SemiBold.ttf │ │ │ ├── Poppins-BlackItalic.ttf │ │ │ ├── Poppins-BoldItalic.ttf │ │ │ ├── Poppins-ExtraBold.ttf │ │ │ ├── Poppins-ExtraLight.ttf │ │ │ ├── Poppins-LightItalic.ttf │ │ │ ├── Poppins-ThinItalic.ttf │ │ │ ├── Poppins-MediumItalic.ttf │ │ │ ├── Poppins-ExtraBoldItalic.ttf │ │ │ ├── Poppins-ExtraLightItalic.ttf │ │ │ └── Poppins-SemiBoldItalic.ttf │ │ └── montserrat │ │ │ └── Montserrat-Regular.ttf │ └── uploads │ │ ├── roles │ │ └── icons │ │ │ ├── 204011531.png │ │ │ └── default │ │ │ └── role.png │ │ └── user │ │ └── profile │ │ ├── 201041353.png │ │ ├── 201747257.png │ │ ├── 202322438.png │ │ ├── 203622693.png │ │ ├── 204324421.png │ │ ├── 204822942.png │ │ ├── 200120582.jpeg │ │ ├── 200240427.jpeg │ │ ├── 200328880.jpeg │ │ ├── 201911127.jpeg │ │ ├── 201946897.jpeg │ │ ├── 202452712.jpeg │ │ ├── 202548559.jpeg │ │ ├── 203938322.jpeg │ │ ├── 203938804.jpeg │ │ ├── 204852867.jpeg │ │ ├── 204931417.jpeg │ │ ├── 205022390.jpeg │ │ ├── 205400412.jpeg │ │ ├── 205830248.jpeg │ │ ├── 205846071.jpeg │ │ └── default │ │ └── profile.jpeg ├── Views │ ├── _ViewStart.cshtml │ ├── _ViewImports.cshtml │ ├── Password │ │ └── ResetPasswordConfirmation.cshtml │ └── Shared │ │ ├── _ValidationScriptsPartial.cshtml │ │ └── _Layout.cshtml ├── Areas │ └── Admin │ │ └── Views │ │ ├── Home │ │ └── Index.cshtml │ │ ├── Profile │ │ └── _ViewStart.cshtml │ │ ├── User │ │ └── _ViewStart.cshtml │ │ ├── Account │ │ ├── _ViewStart.cshtml │ │ └── AccessDenied.cshtml │ │ ├── UserRole │ │ ├── _ViewStart.cshtml │ │ └── Index.cshtml │ │ ├── EmailSettings │ │ └── _ViewStart.cshtml │ │ ├── SiteSettings │ │ └── _ViewImports.cshtml │ │ ├── _ViewImports.cshtml │ │ ├── Shared │ │ ├── _FooterLayout.cshtml │ │ ├── _ApplicationHeaderStylesPartial.cshtml │ │ ├── _ValidationScriptsPartial.cshtml │ │ ├── _UIScriptsPartial.cshtml │ │ ├── _AdminLayout.cshtml │ │ ├── _GetUsersLayout.cshtml │ │ ├── _AdminSiteSettingsLayout.cshtml │ │ └── _ContentLayout.cshtml │ │ └── _ViewStart.cshtml ├── Pages │ ├── _ViewImports.cshtml │ ├── Error.cshtml.cs │ └── Error.cshtml ├── appsettings.Development.json ├── WeatherForecast.cs ├── Properties │ └── launchSettings.json ├── Extensions │ ├── ServiceCollectionExtensions.cs │ └── UrlHelperExtensions.cs ├── Controllers │ ├── Api │ │ └── v1 │ │ │ └── CountryController.cs │ ├── WeatherForecastController.cs │ └── PasswordController.cs ├── bundleconfig.json ├── Migrations │ └── DataProtectionKeys │ │ ├── 20200728013902_InitialCreate.cs │ │ ├── 20200907032438_InitialCreate.cs │ │ ├── DataProtectionKeysContextModelSnapshot.cs │ │ ├── 20200728013902_InitialCreate.Designer.cs │ │ └── 20200907032438_InitialCreate.Designer.cs └── libman.json ├── FiltersService ├── AdminAuthenticationOptions.cs └── UserAuthenticationOptions.cs ├── DashboardService ├── IDashboardSvc.cs └── DashboardSvc.cs ├── EmailService └── IEmailSvc.cs ├── ModelService ├── DataProtectionKeys.cs ├── ResponseObject.cs ├── PermissionType.cs ├── ResponseStatusInfoModel.cs ├── TwoFactorRequestModel.cs ├── DashboardModel.cs ├── ModelService.csproj ├── SendGridOptions.cs ├── AppUserOptions.cs ├── AdminUserOptions.cs ├── TokenRequestModel.cs ├── TwoFactorResponseModel.cs ├── UserModel.cs ├── ApplicationRole.cs ├── LoginViewModel.cs ├── RolePermission.cs ├── SmtpOptions.cs ├── RegisterViewModel.cs ├── AdminBaseViewModel.cs ├── ActivityModel.cs ├── SiteWideSettings.cs ├── AppSettings.cs ├── CountryModel.cs ├── AddressModel.cs ├── TokenResponseModel.cs ├── ApplicationUser.cs ├── ProfileModel.cs ├── TokenModel.cs ├── ResetPasswordViewModel.cs ├── TwoFactorCodeModel.cs └── IdentityDefaultOptions.cs ├── CountryService └── ICountrySvc.cs ├── WritableOptionsService └── IWritableSvc.cs ├── ActivityService └── IActivitySvc.cs ├── .gitignore ├── DataService ├── DataProtectionKeysContext.cs ├── DataService.csproj ├── DbContextInitializer.cs └── ApplicationDbContext.cs ├── AuthService └── IAuthSvc.cs ├── AttributeService └── AjaxOnlyAttribute.cs ├── LoggingService ├── LoggingService.csproj ├── CustomConsoleThemes.cs ├── CustomTextFormatter.cs └── CustomConsoleTheme.cs ├── CookieService ├── ICookieSvc.cs └── IpInfo.cs ├── FunctionalService ├── FunctionalService.csproj └── IFunctionalSvc.cs ├── BackendService └── IAdminSvc.cs ├── RolesService └── IRoleSvc.cs ├── UserService └── IUserSvc.cs └── README.md /CMS_CORE_NG/ClientApp/src/assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/app.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/types.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/home/home.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/types.min.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/home/home.component.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/terms/terms.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/nav-menu/nav-menu.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user-settings/user-settings.component.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user.component.html: -------------------------------------------------------------------------------- 1 |

user works!

2 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Home/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Admin Home"; 3 | } 4 | 5 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/app.component.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/favicon.ico -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | export const environment = { 2 | production: true 3 | }; 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/images/bg.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/images/bg.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getAltAxis.min.js: -------------------------------------------------------------------------------- 1 | export default function getAltAxis(t){return"x"===t?"y":"x"}; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/interfaces/store-state.ts: -------------------------------------------------------------------------------- 1 | export interface StoreState { 2 | loggedInStatus: boolean; 3 | } 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/ClientApp/src/favicon.ico -------------------------------------------------------------------------------- /CMS_CORE_NG/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @namespace CMS_CORE_NG.Views 2 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 3 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getVariation.min.js: -------------------------------------------------------------------------------- 1 | export default function getVariation(t){return t.split("-")[1]}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getAltLen.min.js: -------------------------------------------------------------------------------- 1 | export default function getAltLen(t){return"width"===t?"height":"width"}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/within.min.js: -------------------------------------------------------------------------------- 1 | export default function within(t,n,a){return Math.max(t,Math.min(n,a))}; -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Profile/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Areas/Admin/Views/Shared/_ContentLayout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/User/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Areas/Admin/Views/Shared/_AdminUserLayout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Account/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Areas/Admin/Views/Shared/_AdminBlankLayout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/UserRole/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Areas/Admin/Views/Shared/_AdminUserRoleLayout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getAltAxis.js: -------------------------------------------------------------------------------- 1 | export default function getAltAxis(axis) { 2 | return axis === 'x' ? 'y' : 'x'; 3 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/EmailSettings/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Areas/Admin/Views/Shared/_AdminSiteSettingsLayout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/SiteSettings/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Areas/Admin/Views/Shared/_AdminSiteSettingsLayout.cshtml"; 3 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @namespace CMS_CORE_NG.Areas.Admin.Views 2 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 3 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Pages/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using CMS_CORE_NG 2 | @namespace CMS_CORE_NG.Pages 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getAltLen.js: -------------------------------------------------------------------------------- 1 | export default function getAltLen(len) { 2 | return len === 'width' ? 'height' : 'width'; 3 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getFreshSideObject.min.js: -------------------------------------------------------------------------------- 1 | export default function getFreshSideObject(){return{top:0,right:0,bottom:0,left:0}}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getVariation.js: -------------------------------------------------------------------------------- 1 | export default function getVariation(placement) { 2 | return placement.split('-')[1]; 3 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/assets/images/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/ClientApp/src/assets/images/spinner.gif -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Black.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Bold.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Italic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Light.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Medium.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Thin.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/within.js: -------------------------------------------------------------------------------- 1 | export default function within(min, value, max) { 2 | return Math.max(min, Math.min(value, max)); 3 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/assets/images/profilepic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/ClientApp/src/assets/images/profilepic.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-Regular.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-SemiBold.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/expandToHashMap.min.js: -------------------------------------------------------------------------------- 1 | export default function expandToHashMap(e,n){return n.reduce(function(n,r){return n[r]=e,n},{})}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/roles/icons/204011531.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/roles/icons/204011531.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/201041353.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/201041353.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/201747257.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/201747257.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/202322438.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/202322438.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/203622693.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/203622693.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/204324421.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/204324421.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/204822942.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/204822942.png -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/assets/images/bg-register.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/ClientApp/src/assets/images/bg-register.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-BlackItalic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-BoldItalic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ExtraBold.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ExtraLight.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-LightItalic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ThinItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ThinItalic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getBasePlacement.min.js: -------------------------------------------------------------------------------- 1 | import{auto}from"../enums.js";export default function getBasePlacement(t){return t.split("-")[0]}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/roles/icons/default/role.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/roles/icons/default/role.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/200120582.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/200120582.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/200240427.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/200240427.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/200328880.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/200328880.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/201911127.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/201911127.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/201946897.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/201946897.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/202452712.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/202452712.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/202548559.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/202548559.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/203938322.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/203938322.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/203938804.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/203938804.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/204852867.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/204852867.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/204931417.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/204931417.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/205022390.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/205022390.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/205400412.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/205400412.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/205830248.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/205830248.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/205846071.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/205846071.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-MediumItalic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/montserrat/Montserrat-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/montserrat/Montserrat-Regular.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getMainAxisFromPlacement.min.js: -------------------------------------------------------------------------------- 1 | export default function getMainAxisFromPlacement(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/fonts/Poppins/Poppins-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-solid-900.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-solid-900.eot -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-solid-900.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/popper-base.min.js: -------------------------------------------------------------------------------- 1 | import{createPopper,popperGenerator,detectOverflow}from"./index.js";export{createPopper,popperGenerator,detectOverflow}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/uploads/user/profile/default/profile.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/uploads/user/profile/default/profile.jpeg -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "none", 3 | "tabWidth": 4, 4 | "semi": true, 5 | "singleQuote": true, 6 | "printWidth": 150 7 | } 8 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-brands-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-brands-400.eot -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-brands-400.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-brands-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-brands-400.woff -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-regular-400.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-regular-400.eot -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-regular-400.ttf -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-solid-900.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-solid-900.woff -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-solid-900.woff2 -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-brands-400.woff2 -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-regular-400.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-regular-400.woff -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/font-awesome/webfonts/fa-regular-400.woff2 -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/jqueryui/images/ui-icons_444444_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nirzaf/CMS_CORE_NG/HEAD/CMS_CORE_NG/wwwroot/lib/jqueryui/images/ui-icons_444444_256x240.png -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/uniqueBy.min.js: -------------------------------------------------------------------------------- 1 | export default function uniqueBy(e,n){var r=new Set;return e.filter(function(e){var t=n(e);if(!r.has(t))return r.add(t),!0})}; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/interfaces/login.ts: -------------------------------------------------------------------------------- 1 | export interface Login { 2 | username: string; 3 | password: string; 4 | rememberMe: boolean; 5 | grant_type: string; 6 | } 7 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getBasePlacement.js: -------------------------------------------------------------------------------- 1 | import { auto } from "../enums.js"; 2 | export default function getBasePlacement(placement) { 3 | return placement.split('-')[0]; 4 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/interfaces/country.ts: -------------------------------------------------------------------------------- 1 | export interface Country { 2 | states: string; 3 | flag: string; 4 | id: number; 5 | name: string; 6 | twoDigitCode: string; 7 | } 8 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Views/Password/ResetPasswordConfirmation.cshtml: -------------------------------------------------------------------------------- 1 | @* 2 | For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 3 | *@ 4 | @{ 5 | } 6 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getMainAxisFromPlacement.js: -------------------------------------------------------------------------------- 1 | export default function getMainAxisFromPlacement(placement) { 2 | return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 3 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/custom/css/admin/user.min.css: -------------------------------------------------------------------------------- 1 | .card{width:100%;background:#fff;box-shadow:0 20px 50px rgba(0,0,0,.1);border-radius:10px;padding:20px}#profpicfile{display:none}#_profpicfile{display:none} -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getFreshSideObject.js: -------------------------------------------------------------------------------- 1 | export default function getFreshSideObject() { 2 | return { 3 | top: 0, 4 | right: 0, 5 | bottom: 0, 6 | left: 0 7 | }; 8 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/debounce.min.js: -------------------------------------------------------------------------------- 1 | export default function debounce(n){var e;return function(){return e||(e=new Promise(function(o){Promise.resolve().then(function(){e=void 0,o(n())})})),e}}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/rectToClientRect.min.js: -------------------------------------------------------------------------------- 1 | export default function rectToClientRect(t){return Object.assign(Object.assign({},t),{},{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getOppositeVariationPlacement.min.js: -------------------------------------------------------------------------------- 1 | var hash={start:"end",end:"start"};export default function getOppositeVariationPlacement(t){return t.replace(/start|end/g,function(t){return hash[t]})}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/mergePaddingObject.min.js: -------------------------------------------------------------------------------- 1 | import getFreshSideObject from"./getFreshSideObject.js";export default function mergePaddingObject(e){return Object.assign(Object.assign({},getFreshSideObject()),e)}; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/expandToHashMap.js: -------------------------------------------------------------------------------- 1 | export default function expandToHashMap(value, keys) { 2 | return keys.reduce(function (hashMap, key) { 3 | hashMap[key] = value; 4 | return hashMap; 5 | }, {}); 6 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/format.min.js: -------------------------------------------------------------------------------- 1 | export default function format(r){for(var e=arguments.length,n=new Array(e>1?e-1:0),t=1;t GetDashboardData(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /EmailService/IEmailSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | namespace EmailService 5 | { 6 | public interface IEmailSvc 7 | { 8 | Task SendEmailAsync(string email, string subject, string message, string template); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ModelService/DataProtectionKeys.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class DataProtectionKeys 5 | { 6 | public string ApplicationUserKey { get; set; } 7 | public string SendGridProtectionKey { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/contact-us/contact-us.component.css: -------------------------------------------------------------------------------- 1 | .input-group-prepend span { 2 | width: 50px; 3 | background-color: #ffc312; 4 | color: black; 5 | border: 0 !important; 6 | } 7 | 8 | .container { 9 | max-width: 600px !important; 10 | } 11 | -------------------------------------------------------------------------------- /ModelService/ResponseObject.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class ResponseObject 5 | { 6 | public bool IsValid { get; set; } 7 | public string Message { get; set; } 8 | public dynamic Data { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/rectToClientRect.js: -------------------------------------------------------------------------------- 1 | export default function rectToClientRect(rect) { 2 | return Object.assign(Object.assign({}, rect), {}, { 3 | left: rect.x, 4 | top: rect.y, 5 | right: rect.x + rect.width, 6 | bottom: rect.y + rect.height 7 | }); 8 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/app.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | templateUrl: './app.component.html', 6 | styleUrls: ['./app.component.css'] 7 | }) 8 | export class AppComponent { 9 | title = 'ClientApp'; 10 | } 11 | -------------------------------------------------------------------------------- /ModelService/PermissionType.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace ModelService 5 | { 6 | public class PermissionType 7 | { 8 | [Key] 9 | public int Id { get; set; } 10 | public string Type { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ModelService/ResponseStatusInfoModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | 4 | namespace ModelService 5 | { 6 | public class ResponseStatusInfoModel 7 | { 8 | public string Message { get; set; } 9 | 10 | public HttpStatusCode StatusCode { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Shared/_FooterLayout.cshtml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getOppositeVariationPlacement.js: -------------------------------------------------------------------------------- 1 | var hash = { 2 | start: 'end', 3 | end: 'start' 4 | }; 5 | export default function getOppositeVariationPlacement(placement) { 6 | return placement.replace(/start|end/g, function (matched) { 7 | return hash[matched]; 8 | }); 9 | } -------------------------------------------------------------------------------- /CountryService/ICountrySvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using ModelService; 5 | 6 | namespace CountryService 7 | { 8 | public interface ICountrySvc 9 | { 10 | Task> GetCountriesAsync(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /WritableOptionsService/IWritableSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.Extensions.Options; 3 | 4 | namespace WritableOptionsService 5 | { 6 | public interface IWritableSvc : IOptionsSnapshot where T : class, new() 7 | { 8 | bool Update(Action applyChanges); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/custom/css/admin/user.css: -------------------------------------------------------------------------------- 1 | .card { 2 | width: 100%; 3 | background: #fff; 4 | box-shadow: 0 20px 50px rgba(0,0,0,.1); 5 | border-radius: 10px; 6 | padding: 20px; 7 | } 8 | 9 | #profpicfile { 10 | display: none; 11 | } 12 | 13 | #_profpicfile { 14 | display: none; 15 | } 16 | -------------------------------------------------------------------------------- /ModelService/TwoFactorRequestModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class TwoFactorRequestModel 5 | { 6 | public string ProviderType { get; set; } 7 | public string TwoFactorToken { get; set; } 8 | public bool RememberDevice { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/interfaces/address.ts: -------------------------------------------------------------------------------- 1 | export interface Address { 2 | addressId: number; 3 | line1: string; 4 | line2: string; 5 | country: string; 6 | city: string; 7 | state: string; 8 | postalCode: string; 9 | type: string; 10 | unit: string; 11 | userId: string; 12 | } 13 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/interfaces/register.ts: -------------------------------------------------------------------------------- 1 | export interface Register { 2 | username: string; 3 | firstname: string; 4 | lastname: string; 5 | email: string; 6 | password: string; 7 | country: string; 8 | phone: string; 9 | gender: string; 10 | terms: boolean; 11 | dob: string; 12 | } 13 | -------------------------------------------------------------------------------- /ModelService/DashboardModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class DashboardModel 5 | { 6 | public int TotalUsers { get; set; } 7 | public int NewUsers { get; set; } 8 | public int PendingRequests { get; set; } 9 | public int TotalPosts { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ModelService/ModelService.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/uniqueBy.js: -------------------------------------------------------------------------------- 1 | export default function uniqueBy(arr, fn) { 2 | var identifiers = new Set(); 3 | return arr.filter(function (item) { 4 | var identifier = fn(item); 5 | 6 | if (!identifiers.has(identifier)) { 7 | identifiers.add(identifier); 8 | return true; 9 | } 10 | }); 11 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/getOppositePlacement.js: -------------------------------------------------------------------------------- 1 | var hash = { 2 | left: 'right', 3 | right: 'left', 4 | bottom: 'top', 5 | top: 'bottom' 6 | }; 7 | export default function getOppositePlacement(placement) { 8 | return placement.replace(/left|right|bottom|top/g, function (matched) { 9 | return hash[matched]; 10 | }); 11 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "_AdminLayout"; 3 | } 4 | 5 | @* The view start file tells Razor to use a layout file in the HTML that it generates, 6 | because this will help to reduce the amount of duplication in views. *@ 7 | @* create the view, add a Razor layout named _AdminLayout.cshtml to the Views/Shared folder. *@ 8 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/format.js: -------------------------------------------------------------------------------- 1 | export default function format(str) { 2 | for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 3 | args[_key - 1] = arguments[_key]; 4 | } 5 | 6 | return [].concat(args).reduce(function (p, c) { 7 | return p.replace(/%s/, c); 8 | }, str); 9 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/popperOffsets.min.js: -------------------------------------------------------------------------------- 1 | import computeOffsets from"../utils/computeOffsets.js";function popperOffsets(e){var t=e.state,s=e.name;t.modifiersData[s]=computeOffsets({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})}export default{name:"popperOffsets",enabled:!0,phase:"read",fn:popperOffsets,data:{}}; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see https://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | indent_size = 2 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | 11 | [*.ts] 12 | quote_type = single 13 | 14 | [*.md] 15 | max_line_length = off 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /ActivityService/IActivitySvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using ModelService; 5 | 6 | namespace ActivityService 7 | { 8 | public interface IActivitySvc 9 | { 10 | Task AddUserActivity(ActivityModel model); 11 | 12 | Task> GetUserActivity(string userId); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/e2e/src/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, by, element } from 'protractor'; 2 | 3 | export class AppPage { 4 | navigateTo(): Promise { 5 | return browser.get(browser.baseUrl) as Promise; 6 | } 7 | 8 | getTitleText(): Promise { 9 | return element(by.css('app-root .content span')).getText() as Promise; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/home/home.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-home', 5 | templateUrl: './home.component.html', 6 | styleUrls: ['./home.component.css'] 7 | }) 8 | export class HomeComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-user', 5 | templateUrl: './user.component.html', 6 | styleUrls: ['./user.component.css'] 7 | }) 8 | export class UserComponent implements OnInit { 9 | 10 | constructor() { } 11 | 12 | ngOnInit(): void { 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ClientApp 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /CMS_CORE_NG/WeatherForecast.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace CMS_CORE_NG 4 | { 5 | public class WeatherForecast 6 | { 7 | public DateTime Date { get; set; } 8 | 9 | public int TemperatureC { get; set; } 10 | 11 | public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); 12 | 13 | public string Summary { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/mergeByName.min.js: -------------------------------------------------------------------------------- 1 | export default function mergeByName(t){var e=t.reduce(function(t,e){var n=t[e.name];return t[e.name]=n?Object.assign(Object.assign(Object.assign({},n),e),{},{options:Object.assign(Object.assign({},n.options),e.options),data:Object.assign(Object.assign({},n.data),e.data)}):e,t},{});return Object.keys(e).map(function(t){return e[t]})}; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "../tsconfig.base.json", 4 | "compilerOptions": { 5 | "outDir": "../out-tsc/e2e", 6 | "module": "commonjs", 7 | "target": "es2018", 8 | "types": [ 9 | "jasmine", 10 | "jasminewd2", 11 | "node" 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ModelService/SendGridOptions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class SendGridOptions 5 | { 6 | public string SendGridUser { get; set; } 7 | public string SendGridKey { get; set; } 8 | public string FromEmail { get; set; } 9 | public string FromFullName { get; set; } 10 | public bool IsDefault { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.base.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/app", 6 | "types": ["jquery", "jqueryui", "bootstrap", "chosen-js"] 7 | }, 8 | "files": ["src/main.ts", "src/polyfills.ts"], 9 | "include": ["src/**/*.d.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/debounce.js: -------------------------------------------------------------------------------- 1 | export default function debounce(fn) { 2 | var pending; 3 | return function () { 4 | if (!pending) { 5 | pending = new Promise(function (resolve) { 6 | Promise.resolve().then(function () { 7 | pending = undefined; 8 | resolve(fn()); 9 | }); 10 | }); 11 | } 12 | 13 | return pending; 14 | }; 15 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/custom/js/admin/admin.min.js: -------------------------------------------------------------------------------- 1 | function getCookie(n){for(var t,r=n+"=",f=decodeURIComponent(document.cookie),u=f.split(";"),i=0;i console.error(err)); 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | #ignore thumbnails created by windows 2 | Thumbs.db 3 | #Ignore files build by Visual Studio 4 | *.user 5 | *.aps 6 | *.pch 7 | *.vspscc 8 | *_i.c 9 | *_p.c 10 | *.ncb 11 | *.suo 12 | *.bak 13 | *.cache 14 | *.ilk 15 | *.log 16 | [Bb]in 17 | [Dd]ebug*/ 18 | *.sbr 19 | obj/ 20 | [Rr]elease*/ 21 | _ReSharper*/ 22 | CMS_CORE_NG/[Bb]in 23 | LoggingService/[Bb]in 24 | CMS_CORE_NG/obj 25 | LoggingService/obj 26 | CMS_CORE_NG/.vs 27 | LoggingService/.vs -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "extends": "./tsconfig.base.json", 4 | "compilerOptions": { 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jasmine" 8 | ] 9 | }, 10 | "files": [ 11 | "src/test.ts", 12 | "src/polyfills.ts" 13 | ], 14 | "include": [ 15 | "src/**/*.spec.ts", 16 | "src/**/*.d.ts" 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /ModelService/TwoFactorResponseModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class TwoFactorResponseModel 5 | { 6 | public bool IsValid { get; set; } 7 | public string Email { get; set; } 8 | public string Code { get; set; } 9 | public bool RememberDevice { get; set; } 10 | public int Attempts { get; set; } 11 | public ResponseStatusInfoModel ResponseMessage { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ModelService/UserModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class UserModel 5 | { 6 | public string Username { get; set; } 7 | public string Email { get; set; } 8 | public string Firstname { get; set; } 9 | public string Lastname { get; set; } 10 | public string ProfilePic { get; set; } 11 | public bool IsProfileComplete { get; set; } 12 | public bool IsActive { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Account/AccessDenied.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "Access denied"; 3 | } 4 | 5 |
6 |

401

7 |

Access Denied

8 |
9 | 10 | @section Scripts 11 | { 12 | 13 | 19 | 20 | 21 | } -------------------------------------------------------------------------------- /ModelService/ApplicationRole.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Microsoft.AspNetCore.Identity; 4 | 5 | namespace ModelService 6 | { 7 | public class ApplicationRole : IdentityRole 8 | { 9 | public string RoleName { get; set; } 10 | public string RoleIcon { get; set; } 11 | public string Handle { get; set; } 12 | public bool IsActive { get; set; } 13 | public ICollection Permissions { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ModelService/LoginViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace ModelService 5 | { 6 | public class LoginViewModel 7 | { 8 | [Required] 9 | [EmailAddress] 10 | public string Email { get; set; } 11 | 12 | [Required] 13 | [DataType(DataType.Password)] 14 | public string Password { get; set; } 15 | 16 | [Display(Name = "Remember me?")] 17 | public bool RememberMe { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/popper-lite.min.js: -------------------------------------------------------------------------------- 1 | import{popperGenerator,detectOverflow}from"./index.js";import eventListeners from"./modifiers/eventListeners.js";import popperOffsets from"./modifiers/popperOffsets.js";import computeStyles from"./modifiers/computeStyles.js";import applyStyles from"./modifiers/applyStyles.js";var defaultModifiers=[eventListeners,popperOffsets,computeStyles,applyStyles],createPopper=popperGenerator({defaultModifiers:defaultModifiers});export{createPopper,popperGenerator,defaultModifiers,detectOverflow}; -------------------------------------------------------------------------------- /ModelService/RolePermission.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace ModelService 5 | { 6 | public class RolePermission 7 | { 8 | [Key] 9 | public int Id { get; set; } 10 | public bool Read { get; set; } 11 | public bool Delete { get; set; } 12 | public bool Update { get; set; } 13 | public bool Add { get; set; } 14 | public string Type { get; set; } 15 | public string ApplicationRoleId { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ModelService/SmtpOptions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class SmtpOptions 5 | { 6 | public string SmtpUserName { get; set; } 7 | public string SmtpPassword { get; set; } 8 | public string SmtpHost { get; set; } 9 | public int SmtpPort { get; set; } 10 | public bool SmtpSsl { get; set; } 11 | public string FromEmail { get; set; } 12 | public string FromFullName { get; set; } 13 | public bool IsDefault { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/orderModifiers.min.js: -------------------------------------------------------------------------------- 1 | import{modifierPhases}from"../enums.js";function order(r){var e=new Map,n=new Set,o=[];return r.forEach(function(r){e.set(r.name,r)}),r.forEach(function(r){n.has(r.name)||function r(t){n.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach(function(o){if(!n.has(o)){var t=e.get(o);t&&r(t)}}),o.push(t)}(r)}),o}export default function orderModifiers(r){var e=order(r);return modifierPhases.reduce(function(r,n){return r.concat(e.filter(function(r){return r.phase===n}))},[])}; -------------------------------------------------------------------------------- /DataService/DataProtectionKeysContext.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.AspNetCore.DataProtection.EntityFrameworkCore; 3 | using Microsoft.EntityFrameworkCore; 4 | 5 | namespace DataService 6 | { 7 | public class DataProtectionKeysContext : DbContext, IDataProtectionKeyContext 8 | { 9 | public DataProtectionKeysContext(DbContextOptions options) 10 | : base(options) { } 11 | 12 | public DbSet DataProtectionKeys { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Views/Shared/_ValidationScriptsPartial.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/send-code/send-code.component.css: -------------------------------------------------------------------------------- 1 | .container { 2 | height: 100%; 3 | align-content: center; 4 | margin-top: 10%; 5 | } 6 | 7 | .card { 8 | height: 350px; 9 | margin-top: auto; 10 | margin-bottom: auto; 11 | width: 450px; 12 | background-color: rgba(0, 0, 0, 0.8) !important; 13 | } 14 | 15 | .card-header h3 { 16 | color: white; 17 | font-size: 1.5rem; 18 | } 19 | 20 | .card-footer { 21 | overflow: hidden; 22 | color: white; 23 | } 24 | 25 | .errorMessage, 26 | .remember { 27 | color: white; 28 | } 29 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/tsconfig.base.json: -------------------------------------------------------------------------------- 1 | /* To learn more about this file see: https://angular.io/config/tsconfig. */ 2 | { 3 | "compileOnSave": false, 4 | "compilerOptions": { 5 | "baseUrl": "./", 6 | "outDir": "./dist/out-tsc", 7 | "sourceMap": true, 8 | "declaration": false, 9 | "downlevelIteration": true, 10 | "experimentalDecorators": true, 11 | "moduleResolution": "node", 12 | "importHelpers": true, 13 | "target": "es2015", 14 | "module": "es2020", 15 | "lib": [ 16 | "es2018", 17 | "dom" 18 | ] 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /AuthService/IAuthSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using ModelService; 5 | 6 | namespace AuthService 7 | { 8 | public interface IAuthSvc 9 | { 10 | 11 | Task Auth(LoginViewModel model); 12 | Task Auth(TokenRequestModel model); 13 | Task GenerateNewToken(); 14 | Task LogoutUserAsync(); 15 | void DeleteAllCookies(IEnumerable cookiesToDelete); 16 | void DeleteCookie(string name); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/validate-code/validate-code.component.css: -------------------------------------------------------------------------------- 1 | .container { 2 | height: 100%; 3 | align-content: center; 4 | margin-top: 10%; 5 | } 6 | 7 | .card { 8 | height: 300px; 9 | margin-top: auto; 10 | margin-bottom: auto; 11 | width: 450px; 12 | background-color: rgba(0, 0, 0, 0.8) !important; 13 | } 14 | 15 | .card-header h3 { 16 | color: white; 17 | font-size: 1.5rem; 18 | } 19 | 20 | .card-footer { 21 | overflow: hidden; 22 | color: white; 23 | } 24 | 25 | .errorMessage, 26 | .remember { 27 | color: white; 28 | } 29 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/tsconfig.json: -------------------------------------------------------------------------------- 1 | /* 2 | This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience. 3 | It is not intended to be used to perform a compilation. 4 | 5 | To learn more about this file see: https://angular.io/config/solution-tsconfig. 6 | */ 7 | { 8 | "files": [], 9 | "references": [ 10 | { 11 | "path": "./tsconfig.app.json" 12 | }, 13 | { 14 | "path": "./tsconfig.spec.json" 15 | }, 16 | { 17 | "path": "./e2e/tsconfig.json" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /AttributeService/AjaxOnlyAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.AspNetCore.Mvc.Abstractions; 3 | using Microsoft.AspNetCore.Mvc.ActionConstraints; 4 | using Microsoft.AspNetCore.Routing; 5 | 6 | namespace AttributeService 7 | { 8 | public class AjaxOnlyAttribute : ActionMethodSelectorAttribute 9 | { 10 | public override bool IsValidForRequest(RouteContext routeContext, ActionDescriptor action) 11 | { 12 | var isAjaxCall = routeContext.HttpContext.Request.Headers["x-requested-with"] == "XMLHttpRequest"; 13 | return isAjaxCall; 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/terms/terms.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-terms', 5 | templateUrl: './terms.component.html', 6 | styleUrls: ['./terms.component.css'] 7 | }) 8 | export class TermsComponent implements OnInit { 9 | ngOnInit(): void { 10 | this.setBackgroundImage(); 11 | } 12 | 13 | setBackgroundImage() { 14 | $('body').css({ 15 | 'background-image': 'none', 16 | 'background-repeat': 'no-repeat', 17 | 'background-size': 'cover' 18 | }); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /LoggingService/LoggingService.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /ModelService/RegisterViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class RegisterViewModel 5 | { 6 | public string Email { get; set; } 7 | public string Username { get; set; } 8 | public string Password { get; set; } 9 | public string Phone { get; set; } 10 | public string Country { get; set; } 11 | public string Dob { get; set; } 12 | public string Firstname { get; set; } 13 | public string Lastname { get; set; } 14 | public string Gender { get; set; } 15 | public bool Terms { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ModelService/AdminBaseViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class AdminBaseViewModel 5 | { 6 | public ProfileModel Profile { get; set; } 7 | public AddUserModel AddUser { get; set; } 8 | public DashboardModel Dashboard { get; set; } 9 | public AppSettings AppSetting { get; set; } 10 | public SendGridOptions SendGridOption { get; set; } 11 | public SmtpOptions SmtpOption { get; set; } 12 | public ResetPasswordViewModel ResetPassword { get; set; } 13 | public SiteWideSettings SiteWideSetting { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Shared/_ApplicationHeaderStylesPartial.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /ModelService/ActivityModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace ModelService 5 | { 6 | public class ActivityModel 7 | { 8 | [Key] 9 | public int Id { get; set; } 10 | public string Type { get; set; } 11 | public string IpAddress { get; set; } 12 | public string Location { get; set; } 13 | public string OperatingSystem { get; set; } 14 | public DateTime Date { get; set; } 15 | public string UserId { get; set; } 16 | public string Color { get; set; } 17 | public string Icon { get; set; } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ModelService/SiteWideSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class SiteWideSettings 5 | { 6 | public string WebsiteName { get; set; } 7 | public string WebsiteTitle { get; set; } 8 | public string WebsiteDescription { get; set; } 9 | public string WebsiteKeywords { get; set; } 10 | public string WebsiteFooter { get; set; } 11 | public string WebsiteAuthor { get; set; } 12 | public string WebsiteStatus { get; set; } 13 | public bool WebsiteRegistration { get; set; } 14 | public bool AgeVerification { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CookieService/ICookieSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Microsoft.AspNetCore.Http; 4 | 5 | namespace CookieService 6 | { 7 | public interface ICookieSvc 8 | { 9 | void SetCookie(string key, string value, int? expireTime, bool isSecure, bool isHttpOnly); 10 | void SetCookie(string key, string value, int? expireTime); 11 | void DeleteCookie(string key); 12 | void DeleteAllCookies(IEnumerable cookiesToDelete); 13 | string Get(string key); 14 | string GetUserIP(); 15 | string GetUserCountry(); 16 | string GetUserOS(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/interfaces/profile.ts: -------------------------------------------------------------------------------- 1 | import { Address } from './address'; 2 | 3 | export interface Profile { 4 | userid: string; 5 | userRole: string; 6 | email: string; 7 | username: string; 8 | phone: string; 9 | birthday: string; 10 | gender: string; 11 | displayname: string; 12 | shippingAddress: Address; 13 | billingAddress: Address; 14 | profpicfile: string; 15 | firstname: string; 16 | lastname: string; 17 | middlename: string; 18 | isTwoFactorOn: boolean; 19 | isPhoneVerified: boolean; 20 | isEmailVerified: boolean; 21 | isTermsAccepted: boolean; 22 | } 23 | -------------------------------------------------------------------------------- /ModelService/AppSettings.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class AppSettings 5 | { 6 | public string Site { get; set; } 7 | public string Audience { get; set; } 8 | public string ExpireTime { get; set; } 9 | public string RtExpireTime { get; set; } 10 | public string Secret { get; set; } 11 | public bool ValidateIssuerSigningKey { get; set; } 12 | public bool ValidateIssuer { get; set; } 13 | public bool ValidateAudience { get; set; } 14 | public string ClientId { get; set; } 15 | public bool AllowSiteWideTokenRefresh { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/UserRole/Index.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | ViewData["Title"] = "User Roles"; 3 | } 4 | 5 |
6 | @await Html.PartialAsync("_GetRolesLayout") 7 |
8 | 9 | @section Styles 10 | { 11 | 12 | 13 | } 14 | 15 | @section Scripts 16 | { 17 | 18 | 19 | 20 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/about-us/about-us.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-about-us', 5 | templateUrl: './about-us.component.html', 6 | styleUrls: ['./about-us.component.css'] 7 | }) 8 | export class AboutUsComponent implements OnInit { 9 | constructor() {} 10 | 11 | ngOnInit(): void { 12 | this.setBackgroundImage(); 13 | } 14 | 15 | setBackgroundImage() { 16 | $('body').css({ 17 | 'background-image': 'none', 18 | 'background-repeat': 'no-repeat', 19 | 'background-size': 'cover' 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ModelService/CountryModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | using System.ComponentModel.DataAnnotations.Schema; 4 | 5 | namespace ModelService 6 | { 7 | public class CountryModel 8 | { 9 | [Key] 10 | public int Id { get; set; } 11 | public int CountryId { get; set; } 12 | public string TwoDigitCode { get; set; } 13 | public string Name { get; set; } 14 | public string PhoneCode { get; set; } 15 | public string Flag { get; set; } 16 | public string States { get; set; } 17 | [NotMapped] 18 | public string[] StatesList { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/popper-lite.js: -------------------------------------------------------------------------------- 1 | import { popperGenerator, detectOverflow } from "./index.js"; 2 | import eventListeners from "./modifiers/eventListeners.js"; 3 | import popperOffsets from "./modifiers/popperOffsets.js"; 4 | import computeStyles from "./modifiers/computeStyles.js"; 5 | import applyStyles from "./modifiers/applyStyles.js"; 6 | var defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles]; 7 | var createPopper = /*#__PURE__*/popperGenerator({ 8 | defaultModifiers: defaultModifiers 9 | }); // eslint-disable-next-line import/no-unused-modules 10 | 11 | export { createPopper, popperGenerator, defaultModifiers, detectOverflow }; -------------------------------------------------------------------------------- /FunctionalService/FunctionalService.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/mergeByName.js: -------------------------------------------------------------------------------- 1 | export default function mergeByName(modifiers) { 2 | var merged = modifiers.reduce(function (merged, current) { 3 | var existing = merged[current.name]; 4 | merged[current.name] = existing ? Object.assign(Object.assign(Object.assign({}, existing), current), {}, { 5 | options: Object.assign(Object.assign({}, existing.options), current.options), 6 | data: Object.assign(Object.assign({}, existing.data), current.data) 7 | }) : current; 8 | return merged; 9 | }, {}); // IE11 does not support Object.values 10 | 11 | return Object.keys(merged).map(function (key) { 12 | return merged[key]; 13 | }); 14 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/eventListeners.min.js: -------------------------------------------------------------------------------- 1 | import getWindow from"../dom-utils/getWindow.js";var passive={passive:!0};function effect(e){var t=e.state,n=e.instance,s=e.options,r=s.scroll,i=void 0===r||r,o=s.resize,a=void 0===o||o,p=getWindow(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return i&&c.forEach(function(e){e.addEventListener("scroll",n.update,passive)}),a&&p.addEventListener("resize",n.update,passive),function(){i&&c.forEach(function(e){e.removeEventListener("scroll",n.update,passive)}),a&&p.removeEventListener("resize",n.update,passive)}}export default{name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:effect,data:{}}; -------------------------------------------------------------------------------- /FunctionalService/IFunctionalSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | 4 | namespace FunctionalService 5 | { 6 | public interface IFunctionalSvc 7 | { 8 | Task CreateDefaultAdminUser(); 9 | Task CreateDefaultUser(); 10 | Task SendEmailByGmailAsync(string fromEmail, string fromFullName, string subject, 11 | string messageBody, string toEmail, string toFullName, string smtpUser, string smtpPassword, 12 | string smtpHost, int smtpPort, bool smtpSSL); 13 | Task SendEmailBySendGridAsync(string apiKey, string fromEmail, string fromFullName, string subject, 14 | string message, string email); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user-activity/user-activity.component.css: -------------------------------------------------------------------------------- 1 | .text-light { 2 | color: #848d91 !important; 3 | } 4 | 5 | .alert i { 6 | font-size: 30px !important; 7 | } 8 | 9 | .alert.alert-wth-icon .alert-icon-wrap { 10 | display: block; 11 | text-align: center; 12 | padding-top: 18px; 13 | height: 100%; 14 | width: 54px; 15 | left: 0; 16 | top: 0; 17 | position: absolute; 18 | } 19 | .alert-details { 20 | margin-left: 2rem !important; 21 | } 22 | 23 | @media only screen and (max-width: 600px) { 24 | .alert i { 25 | display: none !important; 26 | } 27 | .alert-details { 28 | margin-left: 0 !important; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/tabulator/js/modules/resize_table.min.js: -------------------------------------------------------------------------------- 1 | /* Tabulator v4.4.3 (c) Oliver Folkerd */ 2 | var ResizeTable=function(e){this.table=e,this.binding=!1,this.observer=!1};ResizeTable.prototype.initialize=function(e){var i=this.table;"undefined"!=typeof ResizeObserver&&"virtual"===i.rowManager.getRenderMode()?(this.observer=new ResizeObserver(function(e){i.redraw()}),this.observer.observe(i.element)):(this.binding=function(){i.redraw()},window.addEventListener("resize",this.binding))},ResizeTable.prototype.clearBindings=function(e){this.binding&&window.removeEventListener("resize",this.binding),this.observer&&this.observer.unobserve(this.table.element)},Tabulator.prototype.registerModule("resizeTable",ResizeTable); -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/css/solid.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} -------------------------------------------------------------------------------- /BackendService/IAdminSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using Microsoft.AspNetCore.Http; 5 | using ModelService; 6 | 7 | namespace BackendService 8 | { 9 | public interface IAdminSvc 10 | { 11 | Task GetUserProfileByUsernameAsync(string username); 12 | Task> GetAllUsersAsync(); 13 | Task UpdateProfileAsync(string userId, IFormCollection formData); 14 | Task>> AddUserAsync(ApplicationUser user, string password); 15 | Task> ResetPasswordAsync(string username); 16 | Task DeleteUserAsync(string username); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/css/brands.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands";font-weight:400} -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/css/regular.min.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400} -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # For the full list of supported browsers by the Angular framework, please see: 6 | # https://angular.io/guide/browser-support 7 | 8 | # You can see what browsers were selected by your queries by running: 9 | # npx browserslist 10 | 11 | last 1 Chrome version 12 | last 1 Firefox version 13 | last 2 Edge major versions 14 | last 2 Safari major version 15 | last 2 iOS major versions 16 | Firefox ESR 17 | not IE 9-11 # For IE 9-11 support, remove 'not'. 18 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Shared/_ValidationScriptsPartial.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/home/home.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { HomeComponent } from './home.component'; 4 | 5 | describe('HomeComponent', () => { 6 | let component: HomeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ HomeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(HomeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserComponent } from './user.component'; 4 | 5 | describe('UserComponent', () => { 6 | let component: UserComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // This file can be replaced during build by using the `fileReplacements` array. 2 | // `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. 3 | // The list of file replacements can be found in `angular.json`. 4 | 5 | export const environment = { 6 | production: false 7 | }; 8 | 9 | /* 10 | * For easier debugging in development mode, you can import the following file 11 | * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. 12 | * 13 | * This import should be commented out in production mode because it will have a negative impact 14 | * on performance if an error is thrown. 15 | */ 16 | // import 'zone.js/dist/zone-error'; // Included with Angular CLI. 17 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/popper.min.js: -------------------------------------------------------------------------------- 1 | import{popperGenerator,detectOverflow}from"./index.js";import eventListeners from"./modifiers/eventListeners.js";import popperOffsets from"./modifiers/popperOffsets.js";import computeStyles from"./modifiers/computeStyles.js";import applyStyles from"./modifiers/applyStyles.js";import offset from"./modifiers/offset.js";import flip from"./modifiers/flip.js";import preventOverflow from"./modifiers/preventOverflow.js";import arrow from"./modifiers/arrow.js";import hide from"./modifiers/hide.js";var defaultModifiers=[eventListeners,popperOffsets,computeStyles,applyStyles,offset,flip,preventOverflow,arrow,hide],createPopper=popperGenerator({defaultModifiers:defaultModifiers});export{createPopper,popperGenerator,defaultModifiers,detectOverflow}; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/e2e/src/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { AppPage } from './app.po'; 2 | import { browser, logging } from 'protractor'; 3 | 4 | describe('workspace-project App', () => { 5 | let page: AppPage; 6 | 7 | beforeEach(() => { 8 | page = new AppPage(); 9 | }); 10 | 11 | it('should display welcome message', () => { 12 | page.navigateTo(); 13 | expect(page.getTitleText()).toEqual('ClientApp app is running!'); 14 | }); 15 | 16 | afterEach(async () => { 17 | // Assert that there are no errors emitted from the browser 18 | const logs = await browser.manage().logs().get(logging.Type.BROWSER); 19 | expect(logs).not.toContain(jasmine.objectContaining({ 20 | level: logging.Level.SEVERE, 21 | } as logging.Entry)); 22 | }); 23 | }); 24 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/login/login.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { LoginComponent } from './login.component'; 4 | 5 | describe('LoginComponent', () => { 6 | let component: LoginComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ LoginComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(LoginComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/terms/terms.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { TermsComponent } from './terms.component'; 4 | 5 | describe('TermsComponent', () => { 6 | let component: TermsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ TermsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(TermsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:62663", 7 | "sslPort": 44348 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "CMS_CORE_NG": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "applicationUrl": "https://localhost:5001;http://localhost:5000", 22 | "environmentVariables": { 23 | "ASPNETCORE_ENVIRONMENT": "Development" 24 | } 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/about-us/about-us.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { AboutUsComponent } from './about-us.component'; 4 | 5 | describe('AboutUsComponent', () => { 6 | let component: AboutUsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ AboutUsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(AboutUsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/nav-menu/nav-menu.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { NavMenuComponent } from './nav-menu.component'; 4 | 5 | describe('NavMenuComponent', () => { 6 | let component: NavMenuComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ NavMenuComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(NavMenuComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/register/register.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { RegisterComponent } from './register.component'; 4 | 5 | describe('RegisterComponent', () => { 6 | let component: RegisterComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ RegisterComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(RegisterComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/send-code/send-code.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { SendCodeComponent } from './send-code.component'; 4 | 5 | describe('SendCodeComponent', () => { 6 | let component: SendCodeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ SendCodeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(SendCodeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/contact-us/contact-us.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ContactUsComponent } from './contact-us.component'; 4 | 5 | describe('ContactUsComponent', () => { 6 | let component: ContactUsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ContactUsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ContactUsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Shared/_UIScriptsPartial.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/css/solid.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 900; 9 | font-display: block; 10 | src: url("../webfonts/fa-solid-900.eot"); 11 | src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); } 12 | 13 | .fa, 14 | .fas { 15 | font-family: 'Font Awesome 5 Free'; 16 | font-weight: 900; } 17 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/css/brands.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Brands'; 7 | font-style: normal; 8 | font-weight: 400; 9 | font-display: block; 10 | src: url("../webfonts/fa-brands-400.eot"); 11 | src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } 12 | 13 | .fab { 14 | font-family: 'Font Awesome 5 Brands'; 15 | font-weight: 400; } 16 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/font-awesome/css/regular.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 5.13.0 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | */ 5 | @font-face { 6 | font-family: 'Font Awesome 5 Free'; 7 | font-style: normal; 8 | font-weight: 400; 9 | font-display: block; 10 | src: url("../webfonts/fa-regular-400.eot"); 11 | src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); } 12 | 13 | .far { 14 | font-family: 'Font Awesome 5 Free'; 15 | font-weight: 400; } 16 | -------------------------------------------------------------------------------- /ModelService/AddressModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | using System.ComponentModel.DataAnnotations.Schema; 3 | 4 | namespace ModelService 5 | { 6 | public class AddressModel 7 | { 8 | [Key] 9 | public int AddressId { get; set; } 10 | public string Line1 { get; set; } 11 | public string Line2 { get; set; } 12 | public string Unit { get; set; } 13 | [Required] 14 | public string Country { get; set; } 15 | public string State { get; set; } 16 | public string City { get; set; } 17 | public string PostalCode { get; set; } 18 | public string Type { get; set; } 19 | [ForeignKey("UserId")] 20 | public string UserId { get; set; } 21 | public virtual ApplicationUser User { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user-profile/user-profile.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserProfileComponent } from './user-profile.component'; 4 | 5 | describe('UserProfileComponent', () => { 6 | let component: UserProfileComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserProfileComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserProfileComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/validate-code/validate-code.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ValidateCodeComponent } from './validate-code.component'; 4 | 5 | describe('ValidateCodeComponent', () => { 6 | let component: ValidateCodeComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ValidateCodeComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ValidateCodeComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/offset.min.js: -------------------------------------------------------------------------------- 1 | import getBasePlacement from"../utils/getBasePlacement.js";import{top,left,right,placements}from"../enums.js";export function distanceAndSkiddingToXY(e,t,s){var n=getBasePlacement(e),f=[left,top].indexOf(n)>=0?-1:1,a="function"==typeof s?s(Object.assign(Object.assign({},t),{},{placement:e})):s,i=a[0],o=a[1];return i=i||0,o=(o||0)*f,[left,right].indexOf(n)>=0?{x:o,y:i}:{x:i,y:o}};function offset(e){var t=e.state,s=e.options,n=e.name,f=s.offset,a=void 0===f?[0,0]:f,i=placements.reduce(function(e,s){return e[s]=distanceAndSkiddingToXY(s,t.rects,a),e},{}),o=i[t.placement],r=o.x,p=o.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=r,t.modifiersData.popperOffsets.y+=p),t.modifiersData[n]=i}export default{name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:offset}; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user-activity/user-activity.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserActivityComponent } from './user-activity.component'; 4 | 5 | describe('UserActivityComponent', () => { 6 | let component: UserActivityComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserActivityComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserActivityComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user-settings/user-settings.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { UserSettingsComponent } from './user-settings.component'; 4 | 5 | describe('UserSettingsComponent', () => { 6 | let component: UserSettingsComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ UserSettingsComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(UserSettingsComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CookieService/IpInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Newtonsoft.Json; 3 | 4 | namespace CookieService 5 | { 6 | public class IpInfo 7 | { 8 | [JsonProperty("ip")] 9 | public string Ip { get; set; } 10 | 11 | [JsonProperty("hostname")] 12 | public string Hostname { get; set; } 13 | 14 | [JsonProperty("city")] 15 | public string City { get; set; } 16 | 17 | [JsonProperty("region")] 18 | public string Region { get; set; } 19 | 20 | [JsonProperty("country")] 21 | public string Country { get; set; } 22 | 23 | [JsonProperty("loc")] 24 | public string Loc { get; set; } 25 | 26 | [JsonProperty("org")] 27 | public string Org { get; set; } 28 | 29 | [JsonProperty("postal")] 30 | public string Postal { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/forgot-password/forgot-password.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { async, ComponentFixture, TestBed } from '@angular/core/testing'; 2 | 3 | import { ForgotPasswordComponent } from './forgot-password.component'; 4 | 5 | describe('ForgotPasswordComponent', () => { 6 | let component: ForgotPasswordComponent; 7 | let fixture: ComponentFixture; 8 | 9 | beforeEach(async(() => { 10 | TestBed.configureTestingModule({ 11 | declarations: [ ForgotPasswordComponent ] 12 | }) 13 | .compileComponents(); 14 | })); 15 | 16 | beforeEach(() => { 17 | fixture = TestBed.createComponent(ForgotPasswordComponent); 18 | component = fixture.componentInstance; 19 | fixture.detectChanges(); 20 | }); 21 | 22 | it('should create', () => { 23 | expect(component).toBeTruthy(); 24 | }); 25 | }); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/popperOffsets.js: -------------------------------------------------------------------------------- 1 | import computeOffsets from "../utils/computeOffsets.js"; 2 | 3 | function popperOffsets(_ref) { 4 | var state = _ref.state, 5 | name = _ref.name; 6 | // Offsets are the actual position the popper needs to have to be 7 | // properly positioned near its reference element 8 | // This is the most basic placement, and will be adjusted by 9 | // the modifiers in the next step 10 | state.modifiersData[name] = computeOffsets({ 11 | reference: state.rects.reference, 12 | element: state.rects.popper, 13 | strategy: 'absolute', 14 | placement: state.placement 15 | }); 16 | } // eslint-disable-next-line import/no-unused-modules 17 | 18 | 19 | export default { 20 | name: 'popperOffsets', 21 | enabled: true, 22 | phase: 'read', 23 | fn: popperOffsets, 24 | data: {} 25 | }; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | /out-tsc 7 | # Only exists if Bazel was run 8 | /bazel-out 9 | 10 | # dependencies 11 | /node_modules 12 | 13 | # profiling files 14 | chrome-profiler-events*.json 15 | speed-measure-plugin*.json 16 | 17 | # IDEs and editors 18 | /.idea 19 | .project 20 | .classpath 21 | .c9/ 22 | *.launch 23 | .settings/ 24 | *.sublime-workspace 25 | 26 | # IDE - VSCode 27 | .vscode/* 28 | !.vscode/settings.json 29 | !.vscode/tasks.json 30 | !.vscode/launch.json 31 | !.vscode/extensions.json 32 | .history/* 33 | 34 | # misc 35 | /.sass-cache 36 | /connect.lock 37 | /coverage 38 | /libpeerconnection.log 39 | npm-debug.log 40 | yarn-error.log 41 | testem.log 42 | /typings 43 | 44 | # System Files 45 | .DS_Store 46 | Thumbs.db 47 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/computeOffsets.min.js: -------------------------------------------------------------------------------- 1 | import getBasePlacement from"./getBasePlacement.js";import getVariation from"./getVariation.js";import getMainAxisFromPlacement from"./getMainAxisFromPlacement.js";import{top,right,bottom,left,start,end}from"../enums.js";export default function computeOffsets(e){var t,a=e.reference,r=e.element,i=e.placement,o=i?getBasePlacement(i):null,n=i?getVariation(i):null,l=a.x+a.width/2-r.width/2,h=a.y+a.height/2-r.height/2;switch(o){case top:t={x:l,y:a.y-r.height};break;case bottom:t={x:l,y:a.y+a.height};break;case right:t={x:a.x+a.width,y:h};break;case left:t={x:a.x-r.width,y:h};break;default:t={x:a.x,y:a.y}}var m=o?getMainAxisFromPlacement(o):null;if(null!=m){var s="y"===m?"height":"width";switch(n){case start:t[m]=Math.floor(t[m])-Math.floor(a[s]/2-r[s]/2);break;case end:t[m]=Math.floor(t[m])+Math.ceil(a[s]/2-r[s]/2)}}return t}; -------------------------------------------------------------------------------- /ModelService/TokenResponseModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Security.Claims; 3 | 4 | namespace ModelService 5 | { 6 | public class TokenResponseModel 7 | { 8 | public string Token { get; set; } // jwt token 9 | public DateTime Expiration { get; set; } // expiry time 10 | public DateTime RefreshTokenExpiration { get; set; } // expiry time 11 | public string RefreshToken { get; set; } // refresh token 12 | public string Role { get; set; } // user role 13 | public string Username { get; set; } // user name 14 | public string UserId { get; set; } // user id 15 | public bool TwoFactorLoginOn { get; set; } // if two factor validation is on 16 | public ClaimsPrincipal Principal { get; set; } 17 | public ResponseStatusInfoModel ResponseInfo { get; set; } // user name 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /RolesService/IRoleSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using Microsoft.AspNetCore.Http; 5 | using Microsoft.AspNetCore.Identity; 6 | using ModelService; 7 | 8 | namespace RolesService 9 | { 10 | public interface IRoleSvc 11 | { 12 | Task> GetAllRolesAsync(); 13 | Task AddToRolesAsync(IFormCollection formData); 14 | Task DeleteRoleAsync(string roleId); 15 | Task UpdateRoleAsync(IFormCollection formData); 16 | Task AddRolePermissionAsync(string rolePermissionName); 17 | Task> GetAllRolePermissionsAsync(); 18 | Task DeleteRolePermissionAsync(int rolePermissionId); 19 | Task> GetAllRolePermissionsTypesAsync(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | 4 | import { UserRoutingModule } from './user-routing.module'; 5 | import { UserProfileComponent } from './user-profile/user-profile.component'; 6 | import { UserSettingsComponent } from './user-settings/user-settings.component'; 7 | import { UserActivityComponent } from './user-activity/user-activity.component'; 8 | import { FormsModule, ReactiveFormsModule } from '@angular/forms'; 9 | import { AuthGuardService } from '../services/auth-guard.service'; 10 | 11 | @NgModule({ 12 | declarations: [UserProfileComponent, UserSettingsComponent, UserActivityComponent], 13 | imports: [CommonModule, UserRoutingModule, FormsModule, ReactiveFormsModule], 14 | providers: [AuthGuardService] 15 | }) 16 | export class UserModule {} 17 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/computeAutoPlacement.min.js: -------------------------------------------------------------------------------- 1 | import getVariation from"./getVariation.js";import{variationPlacements,basePlacements,placements as allPlacements}from"../enums.js";import detectOverflow from"./detectOverflow.js";import getBasePlacement from"./getBasePlacement.js";export default function computeAutoPlacement(e,t){void 0===t&&(t={});var a=t,n=a.placement,r=a.boundary,o=a.rootBoundary,i=a.padding,l=a.flipVariations,c=a.allowedAutoPlacements,m=void 0===c?allPlacements:c,s=getVariation(n),u=s?l?variationPlacements:variationPlacements.filter(function(e){return getVariation(e)===s}):basePlacements,d=u.filter(function(e){return m.indexOf(e)>=0});0===d.length&&(d=u);var f=d.reduce(function(t,a){return t[a]=detectOverflow(e,{placement:a,boundary:r,rootBoundary:o,padding:i})[getBasePlacement(a)],t},{});return Object.keys(f).sort(function(e,t){return f[e]-f[t]})}; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/contact-us/contact-us.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { FormGroup, FormBuilder } from '@angular/forms'; 3 | 4 | @Component({ 5 | selector: 'app-contact-us', 6 | templateUrl: './contact-us.component.html', 7 | styleUrls: ['./contact-us.component.css'] 8 | }) 9 | export class ContactUsComponent implements OnInit { 10 | contactForm: FormGroup; 11 | 12 | constructor(private fb: FormBuilder) {} 13 | 14 | ngOnInit(): void { 15 | this.setBackgroundImage(); 16 | this.contactForm = this.fb.group({}); 17 | } 18 | 19 | onSubmit() {} 20 | 21 | setBackgroundImage() { 22 | $('body').css({ 23 | 'background-image': 'none', 24 | 'background-repeat': 'no-repeat', 25 | 'background-size': 'cover' 26 | }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/test.ts: -------------------------------------------------------------------------------- 1 | // This file is required by karma.conf.js and loads recursively all the .spec and framework files 2 | 3 | import 'zone.js/dist/zone-testing'; 4 | import { getTestBed } from '@angular/core/testing'; 5 | import { 6 | BrowserDynamicTestingModule, 7 | platformBrowserDynamicTesting 8 | } from '@angular/platform-browser-dynamic/testing'; 9 | 10 | declare const require: { 11 | context(path: string, deep?: boolean, filter?: RegExp): { 12 | keys(): string[]; 13 | (id: string): T; 14 | }; 15 | }; 16 | 17 | // First, initialize the Angular testing environment. 18 | getTestBed().initTestEnvironment( 19 | BrowserDynamicTestingModule, 20 | platformBrowserDynamicTesting() 21 | ); 22 | // Then we find all the tests. 23 | const context = require.context('./', true, /\.spec\.ts$/); 24 | // And load the modules. 25 | context.keys().map(context); 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/custom/css/notification/notification.min.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Open+Sans');@import url('https://fonts.googleapis.com/css?family=Montserrat');body{margin:0;padding:0;font-family:'Montserrat',sans-serif}.card{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:300px;min-height:350px;background:#fff;box-shadow:0 20px 50px rgba(0,0,0,.1);border-radius:10px;transition:.5s}.card:hover{box-shadow:0 30px 70px rgba(0,0,0,.2)}.card .box{position:absolute;top:50%;left:0;transform:translateY(-50%);text-align:center;padding:20px;box-sizing:border-box;width:100%}.card .box .img{width:100%;height:100%;overflow:hidden}.card .box .img img{width:100%;height:100%}.card .box h2{font-size:20px;color:#262626;margin:20px auto}.card .box h2 span{font-size:14px;background:#e91e63;color:#fff;display:inline-block;padding:4px 10px;border-radius:15px}.card .box p{color:#262626} -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/custom/js/admin/admin.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | 'use strict'; 3 | 4 | $(initSidebar); 5 | 6 | function initSidebar() { 7 | 8 | $(document).ready(function () { 9 | 10 | $('#sidebarCollapse').on('click', function () { 11 | 12 | $('#sidebar').toggleClass('active'); 13 | }); 14 | 15 | }); 16 | 17 | } 18 | })(); 19 | 20 | /* EXTENSION METHOD TO GET BROWSER COOKIE */ 21 | function getCookie(cname) { 22 | var name = cname + "="; 23 | var decodedCookie = decodeURIComponent(document.cookie); 24 | var ca = decodedCookie.split(';'); 25 | for (var i = 0; i < ca.length; i++) { 26 | var c = ca[i]; 27 | while (c.charAt(0) === ' ') { 28 | c = c.substring(1); 29 | } 30 | if (c.indexOf(name) === 0) { 31 | return c.substring(name.length, c.length); 32 | } 33 | } 34 | return ""; 35 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/popper.js: -------------------------------------------------------------------------------- 1 | import { popperGenerator, detectOverflow } from "./index.js"; 2 | import eventListeners from "./modifiers/eventListeners.js"; 3 | import popperOffsets from "./modifiers/popperOffsets.js"; 4 | import computeStyles from "./modifiers/computeStyles.js"; 5 | import applyStyles from "./modifiers/applyStyles.js"; 6 | import offset from "./modifiers/offset.js"; 7 | import flip from "./modifiers/flip.js"; 8 | import preventOverflow from "./modifiers/preventOverflow.js"; 9 | import arrow from "./modifiers/arrow.js"; 10 | import hide from "./modifiers/hide.js"; 11 | var defaultModifiers = [eventListeners, popperOffsets, computeStyles, applyStyles, offset, flip, preventOverflow, arrow, hide]; 12 | var createPopper = /*#__PURE__*/popperGenerator({ 13 | defaultModifiers: defaultModifiers 14 | }); // eslint-disable-next-line import/no-unused-modules 15 | 16 | export { createPopper, popperGenerator, defaultModifiers, detectOverflow }; -------------------------------------------------------------------------------- /CMS_CORE_NG/Pages/Error.cshtml.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using Microsoft.AspNetCore.Mvc; 7 | using Microsoft.AspNetCore.Mvc.RazorPages; 8 | using Microsoft.Extensions.Logging; 9 | 10 | namespace CMS_CORE_NG.Pages 11 | { 12 | [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] 13 | public class ErrorModel : PageModel 14 | { 15 | private readonly ILogger _logger; 16 | 17 | public ErrorModel(ILogger logger) 18 | { 19 | _logger = logger; 20 | } 21 | 22 | public string RequestId { get; set; } 23 | 24 | public bool ShowRequestId => !string.IsNullOrEmpty(RequestId); 25 | 26 | public void OnGet() 27 | { 28 | RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Pages/Error.cshtml: -------------------------------------------------------------------------------- 1 | @page 2 | @model ErrorModel 3 | @{ 4 | ViewData["Title"] = "Error"; 5 | } 6 | 7 |

Error.

8 |

An error occurred while processing your request.

9 | 10 | @if (Model.ShowRequestId) 11 | { 12 |

13 | Request ID: @Model.RequestId 14 |

15 | } 16 | 17 |

Development Mode

18 |

19 | Swapping to the Development environment displays detailed information about the error that occurred. 20 |

21 |

22 | The Development environment shouldn't be enabled for deployed applications. 23 | It can result in displaying sensitive information from exceptions to end users. 24 | For local debugging, enable the Development environment by setting the ASPNETCORE_ENVIRONMENT environment variable to Development 25 | and restarting the app. 26 |

27 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user-activity/user-activity.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { AccountService } from 'src/app/services/account.service'; 3 | import { ToastrService } from 'ngx-toastr'; 4 | 5 | @Component({ 6 | selector: 'app-user-activity', 7 | templateUrl: './user-activity.component.html', 8 | styleUrls: ['./user-activity.component.css'] 9 | }) 10 | export class UserActivityComponent implements OnInit { 11 | userActivities: any = []; 12 | 13 | constructor(private acct: AccountService, private toastr: ToastrService) {} 14 | 15 | ngOnInit(): void { 16 | this.loadUserActivity(); 17 | } 18 | 19 | loadUserActivity() { 20 | this.acct 21 | .getUserActivity() 22 | .toPromise() 23 | .then((result) => { 24 | this.userActivities = result.data; 25 | this.toastr.success(result.message); 26 | }); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/services/country.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { HttpClient } from '@angular/common/http'; 3 | import { Observable } from 'rxjs'; 4 | import { shareReplay, map } from 'rxjs/operators'; 5 | import { Country } from '../interfaces/country'; 6 | 7 | @Injectable({ 8 | providedIn: 'root' 9 | }) 10 | export class CountryService { 11 | private countryListUrl: string = '/api/v1/country/getcountries'; 12 | 13 | private country$: Observable; 14 | 15 | constructor(private http: HttpClient) {} 16 | 17 | getCountries() { 18 | if (!this.country$) { 19 | this.country$ = this.http.get(this.countryListUrl).pipe( 20 | shareReplay(), 21 | map((result) => { 22 | return result; 23 | }) 24 | ); 25 | } 26 | 27 | // if countries cache exists return it 28 | return this.country$; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/enums.min.js: -------------------------------------------------------------------------------- 1 | export var top="top";export var bottom="bottom";export var right="right";export var left="left";export var auto="auto";export var basePlacements=[top,bottom,right,left];export var start="start";export var end="end";export var clippingParents="clippingParents";export var viewport="viewport";export var popper="popper";export var reference="reference";export var variationPlacements=basePlacements.reduce(function(e,r){return e.concat([r+"-"+start,r+"-"+end])},[]);export var placements=[].concat(basePlacements,[auto]).reduce(function(e,r){return e.concat([r,r+"-"+start,r+"-"+end])},[]);export var beforeRead="beforeRead";export var read="read";export var afterRead="afterRead";export var beforeMain="beforeMain";export var main="main";export var afterMain="afterMain";export var beforeWrite="beforeWrite";export var write="write";export var afterWrite="afterWrite";export var modifierPhases=[beforeRead,read,afterRead,beforeMain,main,afterMain,beforeWrite,write,afterWrite]; -------------------------------------------------------------------------------- /CMS_CORE_NG/Extensions/ServiceCollectionExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.AspNetCore.Hosting; 3 | using Microsoft.Extensions.Configuration; 4 | using Microsoft.Extensions.DependencyInjection; 5 | using Microsoft.Extensions.Options; 6 | using WritableOptionsService; 7 | 8 | namespace CMS_CORE_NG.Extensions 9 | { 10 | public static class ServiceCollectionExtensions 11 | { 12 | public static void ConfigureWritable(this IServiceCollection services, IConfigurationSection section, string filename) where T : class, new() 13 | { 14 | services.Configure(section); 15 | 16 | services.AddTransient>(provider => 17 | { 18 | var environment = provider.GetService(); 19 | var options = provider.GetService>(); 20 | return new WritableSvc(environment, options, section.Key, filename); 21 | }); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { Routes, RouterModule } from '@angular/router'; 3 | import { UserProfileComponent } from './user-profile/user-profile.component'; 4 | import { UserSettingsComponent } from './user-settings/user-settings.component'; 5 | import { UserActivityComponent } from './user-activity/user-activity.component'; 6 | import { AuthGuardService } from '../services/auth-guard.service'; 7 | 8 | const routes: Routes = [ 9 | { path: '', component: UserProfileComponent }, 10 | { path: 'myaccount', component: UserProfileComponent, canActivate: [AuthGuardService] }, 11 | { path: 'settings', component: UserSettingsComponent, canActivate: [AuthGuardService] }, 12 | { path: 'activity', component: UserActivityComponent, canActivate: [AuthGuardService] } 13 | ]; 14 | 15 | @NgModule({ 16 | imports: [RouterModule.forChild(routes)], 17 | exports: [RouterModule] 18 | }) 19 | export class UserRoutingModule {} 20 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/hide.min.js: -------------------------------------------------------------------------------- 1 | import{top,bottom,left,right}from"../enums.js";import detectOverflow from"../utils/detectOverflow.js";function getSideOffsets(e,t,r){return void 0===r&&(r={x:0,y:0}),{top:e.top-t.height-r.y,right:e.right-t.width+r.x,bottom:e.bottom-t.height+r.y,left:e.left-t.width-r.x}}function isAnySideFullyClipped(e){return[top,right,bottom,left].some(function(t){return e[t]>=0})}function hide(e){var t=e.state,r=e.name,i=t.rects.reference,p=t.rects.popper,o=t.modifiersData.preventOverflow,s=detectOverflow(t,{elementContext:"reference"}),f=detectOverflow(t,{altBoundary:!0}),n=getSideOffsets(s,i),d=getSideOffsets(f,p,o),a=isAnySideFullyClipped(n),l=isAnySideFullyClipped(d);t.modifiersData[r]={referenceClippingOffsets:n,popperEscapeOffsets:d,isReferenceHidden:a,hasPopperEscaped:l},t.attributes.popper=Object.assign(Object.assign({},t.attributes.popper),{},{"data-popper-reference-hidden":a,"data-popper-escaped":l})}export default{name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hide}; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/e2e/protractor.conf.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | // Protractor configuration file, see link for more information 3 | // https://github.com/angular/protractor/blob/master/lib/config.ts 4 | 5 | const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter'); 6 | 7 | /** 8 | * @type { import("protractor").Config } 9 | */ 10 | exports.config = { 11 | allScriptsTimeout: 11000, 12 | specs: [ 13 | './src/**/*.e2e-spec.ts' 14 | ], 15 | capabilities: { 16 | browserName: 'chrome' 17 | }, 18 | directConnect: true, 19 | baseUrl: 'http://localhost:4200/', 20 | framework: 'jasmine', 21 | jasmineNodeOpts: { 22 | showColors: true, 23 | defaultTimeoutInterval: 30000, 24 | print: function() {} 25 | }, 26 | onPrepare() { 27 | require('ts-node').register({ 28 | project: require('path').join(__dirname, './tsconfig.json') 29 | }); 30 | jasmine.getEnv().addReporter(new SpecReporter({ 31 | spec: { 32 | displayStacktrace: StacktraceOption.PRETTY 33 | } 34 | })); 35 | } 36 | }; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/custom/js/common/password-generator.js: -------------------------------------------------------------------------------- 1 | function password_generator(len) { 2 | var length = (len) ? (len) : (10); 3 | var string = "abcdefghijklmnopqrstuvwxyz"; //to upper 4 | var numeric = '0123456789'; 5 | var punctuation = '#?!@$%^&*-]'; 6 | var password = ""; 7 | var character = ""; 8 | while (password.length < length) { 9 | entity1 = Math.ceil(string.length * Math.random() * Math.random()); 10 | entity2 = Math.ceil(numeric.length * Math.random() * Math.random()); 11 | entity3 = Math.ceil(punctuation.length * Math.random() * Math.random()); 12 | hold = string.charAt(entity1); 13 | hold = (password.length % 2 == 0) ? (hold.toUpperCase()) : (hold); 14 | character += hold; 15 | character += numeric.charAt(entity2); 16 | character += punctuation.charAt(entity3); 17 | password = character; 18 | } 19 | password = password.split('').sort(function () { return 0.5 - Math.random() }).join(''); 20 | return password.substr(0, len); 21 | } 22 | -------------------------------------------------------------------------------- /ModelService/ApplicationUser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Microsoft.AspNetCore.Identity; 4 | 5 | namespace ModelService 6 | { 7 | public class ApplicationUser : IdentityUser 8 | { 9 | public string Notes { get; set; } 10 | public string DisplayName { get; set; } 11 | public string Firstname { get; set; } 12 | public string Middlename { get; set; } 13 | public string Lastname { get; set; } 14 | public string Gender { get; set; } 15 | public string ProfilePic { get; set; } 16 | public string Birthday { get; set; } 17 | public bool IsProfileComplete { get; set; } 18 | public bool Terms { get; set; } 19 | public bool IsEmployee { get; set; } 20 | public string UserRole { get; set; } 21 | public DateTime AccountCreatedOn { get; set; } 22 | public bool RememberMe { get; set; } 23 | public bool IsActive { get; set; } 24 | public ICollection UserAddresses { get; set; } 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Controllers/Api/v1/CountryController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using DataService; 6 | using Microsoft.AspNetCore.Mvc; 7 | using Microsoft.EntityFrameworkCore; 8 | 9 | // For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 10 | 11 | namespace CMS_CORE_NG.Controllers.Api.v1 12 | { 13 | [ApiVersion("1.0")] 14 | [ApiController] 15 | [Route("api/v{version:apiVersion}/[controller]")] 16 | [AutoValidateAntiforgeryToken] 17 | public class CountryController : ControllerBase 18 | { 19 | private readonly ApplicationDbContext _db; 20 | 21 | public CountryController(ApplicationDbContext db) 22 | { 23 | _db = db; 24 | } 25 | 26 | [HttpGet("[action]")] 27 | public async Task GetCountries() 28 | { 29 | var countries = await _db.Countries.OrderBy(x => x.Name).ToListAsync(); 30 | 31 | return Ok(countries); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/tabulator/js/modules/resize_table.js: -------------------------------------------------------------------------------- 1 | /* Tabulator v4.4.3 (c) Oliver Folkerd */ 2 | 3 | var ResizeTable = function ResizeTable(table) { 4 | this.table = table; //hold Tabulator object 5 | this.binding = false; 6 | this.observer = false; 7 | }; 8 | 9 | ResizeTable.prototype.initialize = function (row) { 10 | var table = this.table, 11 | observer; 12 | 13 | if (typeof ResizeObserver !== "undefined" && table.rowManager.getRenderMode() === "virtual") { 14 | this.observer = new ResizeObserver(function (entry) { 15 | table.redraw(); 16 | }); 17 | 18 | this.observer.observe(table.element); 19 | } else { 20 | this.binding = function () { 21 | table.redraw(); 22 | }; 23 | 24 | window.addEventListener("resize", this.binding); 25 | } 26 | }; 27 | 28 | ResizeTable.prototype.clearBindings = function (row) { 29 | if (this.binding) { 30 | window.removeEventListener("resize", this.binding); 31 | } 32 | 33 | if (this.observer) { 34 | this.observer.unobserve(this.table.element); 35 | } 36 | }; 37 | 38 | Tabulator.prototype.registerModule("resizeTable", ResizeTable); -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/forgot-password/forgot-password.component.css: -------------------------------------------------------------------------------- 1 | .errorMessage { 2 | color: #fff; 3 | } 4 | 5 | .container { 6 | height: 100%; 7 | align-content: center; 8 | margin-top: 10%; 9 | } 10 | 11 | .card { 12 | height: 250px; 13 | margin-top: 10%; 14 | margin-bottom: auto; 15 | width: 400px; 16 | background-color: rgba(0, 0, 0, 0.8) !important; 17 | } 18 | 19 | .card-header h3 { 20 | color: white; 21 | } 22 | 23 | .card-footer { 24 | overflow: hidden; 25 | } 26 | 27 | .input-group-prepend span { 28 | width: 50px; 29 | background-color: #ffc312; 30 | color: black; 31 | border: 0 !important; 32 | } 33 | 34 | input:focus { 35 | outline: 0 0 0 0 !important; 36 | box-shadow: 0 0 0 0 !important; 37 | } 38 | 39 | .forgot_btn { 40 | color: black; 41 | background-color: #ffc312; 42 | width: 100px; 43 | } 44 | 45 | .forgot_btn:hover { 46 | color: black; 47 | background-color: white; 48 | } 49 | 50 | .links { 51 | color: white; 52 | margin-bottom: 8px; 53 | } 54 | 55 | .links a { 56 | margin-left: 4px; 57 | } 58 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/nav-menu/nav-menu.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, OnInit } from '@angular/core'; 2 | import { BehaviorSubject, Observable } from 'rxjs'; 3 | import { Router } from '@angular/router'; 4 | import { AccountService } from '../services/account.service'; 5 | 6 | @Component({ 7 | selector: 'app-nav-menu', 8 | templateUrl: './nav-menu.component.html', 9 | styleUrls: ['./nav-menu.component.css'] 10 | }) 11 | export class NavMenuComponent implements OnInit { 12 | LoginStatus$ = new BehaviorSubject(null); 13 | Username$: Observable; 14 | 15 | constructor(private acct: AccountService, private router: Router) {} 16 | 17 | ngOnInit(): void { 18 | this.acct.globalStateChanged.subscribe((state) => { 19 | this.LoginStatus$.next(state.loggedInStatus); 20 | }); 21 | 22 | this.Username$ = this.acct.currentUserName; 23 | } 24 | 25 | onLogout() { 26 | this.acct.logout().subscribe((result) => { 27 | console.log('Logged Out Successfully'); 28 | }); 29 | 30 | this.router.navigate(['/login']); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Extensions/UrlHelperExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using Microsoft.AspNetCore.Http; 4 | using Newtonsoft.Json; 5 | 6 | namespace CMS_CORE_NG.Extensions 7 | { 8 | public static class UrlHelperExtensions 9 | { 10 | public static string AbsoluteUrl(this IHttpContextAccessor httpContextAccessor, string relativeUrl, object parameters = null) 11 | { 12 | var request = httpContextAccessor.HttpContext.Request; 13 | 14 | var url = new Uri(new Uri($"{request.Scheme}://{request.Host.Value}"), relativeUrl).ToString(); 15 | 16 | if (parameters != null) 17 | { 18 | url = Microsoft.AspNetCore.WebUtilities.QueryHelpers.AddQueryString(url, ToDictionary(parameters)); 19 | } 20 | 21 | return url; 22 | } 23 | 24 | private static Dictionary ToDictionary(object obj) 25 | { 26 | var json = JsonConvert.SerializeObject(obj); 27 | return JsonConvert.DeserializeObject>(json); 28 | } 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Controllers/WeatherForecastController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using Microsoft.Extensions.Logging; 7 | 8 | namespace CMS_CORE_NG.Controllers 9 | { 10 | [ApiController] 11 | [Route("[controller]")] 12 | public class WeatherForecastController : ControllerBase 13 | { 14 | private static readonly string[] Summaries = new[] 15 | { 16 | "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" 17 | }; 18 | 19 | 20 | [HttpGet] 21 | public IEnumerable Get() 22 | { 23 | 24 | var rng = new Random(); 25 | return Enumerable.Range(1, 5).Select(index => new WeatherForecast 26 | { 27 | Date = DateTime.Now.AddDays(index), 28 | TemperatureC = rng.Next(-20, 55), 29 | Summary = Summaries[rng.Next(Summaries.Length)] 30 | }) 31 | .ToArray(); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/applyStyles.min.js: -------------------------------------------------------------------------------- 1 | import getNodeName from"../dom-utils/getNodeName.js";import{isHTMLElement}from"../dom-utils/instanceOf.js";function applyStyles(e){var t=e.state;Object.keys(t.elements).forEach(function(e){var s=t.styles[e]||{},r=t.attributes[e]||{},n=t.elements[e];isHTMLElement(n)&&getNodeName(n)&&(Object.assign(n.style,s),Object.keys(r).forEach(function(e){var t=r[e];!1===t?n.removeAttribute(e):n.setAttribute(e,!0===t?"":t)}))})}function effect(e){var t=e.state,s={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,s.popper),t.elements.arrow&&Object.assign(t.elements.arrow.style,s.arrow),function(){Object.keys(t.elements).forEach(function(e){var r=t.elements[e],n=t.attributes[e]||{},o=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:s[e]).reduce(function(e,t){return e[t]="",e},{});isHTMLElement(r)&&getNodeName(r)&&(Object.assign(r.style,o),Object.keys(n).forEach(function(e){r.removeAttribute(e)}))})}}export default{name:"applyStyles",enabled:!0,phase:"write",fn:applyStyles,effect:effect,requires:["computeStyles"]}; -------------------------------------------------------------------------------- /CMS_CORE_NG/bundleconfig.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "outputFileName": "wwwroot/lib/custom/css/admin/admin.min.css", 4 | "inputFiles": [ 5 | "wwwroot/lib/custom/css/admin/admin.css" 6 | ] 7 | }, 8 | { 9 | "outputFileName": "wwwroot/lib/custom/css/admin/login.min.css", 10 | "inputFiles": [ 11 | "wwwroot/lib/custom/css/admin/login.css" 12 | ] 13 | }, 14 | { 15 | "outputFileName": "wwwroot/lib/custom/css/admin/user.min.css", 16 | "inputFiles": [ 17 | "wwwroot/lib/custom/css/admin/user.css" 18 | ] 19 | }, 20 | { 21 | "outputFileName": "wwwroot/lib/custom/css/notification/notification.min.css", 22 | "inputFiles": [ 23 | "wwwroot/lib/custom/css/notification/notification.css" 24 | ] 25 | }, 26 | { 27 | "outputFileName": "wwwroot/lib/custom/js/account/forgot-password.min.js", 28 | "inputFiles": [ 29 | "wwwroot/lib/custom/js/account/forgot-password.js" 30 | ] 31 | }, 32 | { 33 | "outputFileName": "wwwroot/lib/custom/js/admin/admin.min.js", 34 | "inputFiles": [ 35 | "wwwroot/lib/custom/js/admin/admin.js" 36 | ], 37 | "sourceMap": false 38 | } 39 | ] -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/README.md: -------------------------------------------------------------------------------- 1 | # ClientApp 2 | 3 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.0. 4 | 5 | ## Development server 6 | 7 | Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The app will automatically reload if you change any of the source files. 8 | 9 | ## Code scaffolding 10 | 11 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. 12 | 13 | ## Build 14 | 15 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. Use the `--prod` flag for a production build. 16 | 17 | ## Running unit tests 18 | 19 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). 20 | 21 | ## Running end-to-end tests 22 | 23 | Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/). 24 | 25 | ## Further help 26 | 27 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). 28 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration file, see link for more information 2 | // https://karma-runner.github.io/1.0/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | basePath: '', 7 | frameworks: ['jasmine', '@angular-devkit/build-angular'], 8 | plugins: [ 9 | require('karma-jasmine'), 10 | require('karma-chrome-launcher'), 11 | require('karma-jasmine-html-reporter'), 12 | require('karma-coverage-istanbul-reporter'), 13 | require('@angular-devkit/build-angular/plugins/karma') 14 | ], 15 | client: { 16 | clearContext: false // leave Jasmine Spec Runner output visible in browser 17 | }, 18 | coverageIstanbulReporter: { 19 | dir: require('path').join(__dirname, './coverage/ClientApp'), 20 | reports: ['html', 'lcovonly', 'text-summary'], 21 | fixWebpackSourcePaths: true 22 | }, 23 | reporters: ['progress', 'kjhtml'], 24 | port: 9876, 25 | colors: true, 26 | logLevel: config.LOG_INFO, 27 | autoWatch: true, 28 | browsers: ['Chrome'], 29 | singleRun: false, 30 | restartOnFileChange: true 31 | }); 32 | }; 33 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/services/common/validator.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { AbstractControl, ValidatorFn } from '@angular/forms'; 3 | 4 | @Injectable({ 5 | providedIn: 'root' 6 | }) 7 | export class ValidatorService { 8 | constructor() {} 9 | 10 | MustMatch(firstControl: AbstractControl): ValidatorFn { 11 | return ( 12 | secondControl: AbstractControl 13 | ): { [key: string]: boolean } | null => { 14 | // return null if controls haven't initialised yet 15 | if (!firstControl && !secondControl) { 16 | return null; 17 | } 18 | 19 | // return null if another validator has already found an error on the matchingControl 20 | if (secondControl.hasError && !firstControl.hasError) { 21 | return null; 22 | } 23 | // set error on matchingControl if validation fails 24 | if (firstControl.value !== secondControl.value) { 25 | return { mustMatch: true }; 26 | } else { 27 | return null; 28 | } 29 | }; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Migrations/DataProtectionKeys/20200728013902_InitialCreate.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore.Migrations; 2 | 3 | namespace CMS_CORE_NG.Migrations.DataProtectionKeys 4 | { 5 | public partial class InitialCreate : Migration 6 | { 7 | protected override void Up(MigrationBuilder migrationBuilder) 8 | { 9 | migrationBuilder.CreateTable( 10 | name: "DataProtectionKeys", 11 | columns: table => new 12 | { 13 | Id = table.Column(nullable: false) 14 | .Annotation("SqlServer:Identity", "1, 1"), 15 | FriendlyName = table.Column(nullable: true), 16 | Xml = table.Column(nullable: true) 17 | }, 18 | constraints: table => 19 | { 20 | table.PrimaryKey("PK_DataProtectionKeys", x => x.Id); 21 | }); 22 | } 23 | 24 | protected override void Down(MigrationBuilder migrationBuilder) 25 | { 26 | migrationBuilder.DropTable( 27 | name: "DataProtectionKeys"); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Migrations/DataProtectionKeys/20200907032438_InitialCreate.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore.Migrations; 2 | 3 | namespace CMS_CORE_NG.Migrations.DataProtectionKeys 4 | { 5 | public partial class InitialCreate : Migration 6 | { 7 | protected override void Up(MigrationBuilder migrationBuilder) 8 | { 9 | migrationBuilder.CreateTable( 10 | name: "DataProtectionKeys", 11 | columns: table => new 12 | { 13 | Id = table.Column(nullable: false) 14 | .Annotation("SqlServer:Identity", "1, 1"), 15 | FriendlyName = table.Column(nullable: true), 16 | Xml = table.Column(nullable: true) 17 | }, 18 | constraints: table => 19 | { 20 | table.PrimaryKey("PK_DataProtectionKeys", x => x.Id); 21 | }); 22 | } 23 | 24 | protected override void Down(MigrationBuilder migrationBuilder) 25 | { 26 | migrationBuilder.DropTable( 27 | name: "DataProtectionKeys"); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ModelService/ProfileModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace ModelService 5 | { 6 | public class ProfileModel 7 | { 8 | public string Email { get; set; } 9 | public string Username { get; set; } 10 | public string Phone { get; set; } 11 | public string Birthday { get; set; } 12 | public string Gender { get; set; } 13 | public string Displayname { get; set; } 14 | public string Firstname { get; set; } 15 | public string Middlename { get; set; } 16 | public string UserRole { get; set; } 17 | public string Lastname { get; set; } 18 | public bool IsTwoFactorOn { get; set; } 19 | public bool IsPhoneVerified { get; set; } 20 | public bool IsEmailVerified { get; set; } 21 | public bool IsTermsAccepted { get; set; } 22 | public string ProfilePic { get; set; } 23 | public bool IsAccountLocked { get; set; } 24 | public bool IsEmployee { get; set; } 25 | public string UserId { get; set; } 26 | public ICollection UseAddress { get; set; } 27 | public ICollection Activities { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /ModelService/TokenModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | using System.ComponentModel.DataAnnotations.Schema; 4 | 5 | namespace ModelService 6 | { 7 | public class TokenModel 8 | { 9 | [Key] 10 | public int Id { get; set; } 11 | 12 | // The ClientId, where it comes from 13 | [Required] 14 | public string ClientId { get; set; } 15 | 16 | // Value of the Token 17 | [Required] 18 | public string Value { get; set; } 19 | 20 | // Get the Token Creation Date 21 | [Required] 22 | public DateTime CreatedDate { get; set; } 23 | 24 | // The UserId it was issued to 25 | [Required] 26 | public string UserId { get; set; } 27 | 28 | [Required] 29 | public DateTime LastModifiedDate { get; set; } 30 | 31 | [Required] 32 | public DateTime ExpiryTime { get; set; } 33 | 34 | [Required] 35 | public string EncryptionKeyRt { get; set; } 36 | 37 | [Required] 38 | public string EncryptionKeyJwt { get; set; } 39 | 40 | [ForeignKey("UserId")] 41 | public virtual ApplicationUser User { get; set; } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/app.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { TestBed, async } from '@angular/core/testing'; 2 | import { RouterTestingModule } from '@angular/router/testing'; 3 | import { AppComponent } from './app.component'; 4 | 5 | describe('AppComponent', () => { 6 | beforeEach(async(() => { 7 | TestBed.configureTestingModule({ 8 | imports: [ 9 | RouterTestingModule 10 | ], 11 | declarations: [ 12 | AppComponent 13 | ], 14 | }).compileComponents(); 15 | })); 16 | 17 | it('should create the app', () => { 18 | const fixture = TestBed.createComponent(AppComponent); 19 | const app = fixture.componentInstance; 20 | expect(app).toBeTruthy(); 21 | }); 22 | 23 | it(`should have as title 'ClientApp'`, () => { 24 | const fixture = TestBed.createComponent(AppComponent); 25 | const app = fixture.componentInstance; 26 | expect(app.title).toEqual('ClientApp'); 27 | }); 28 | 29 | it('should render title', () => { 30 | const fixture = TestBed.createComponent(AppComponent); 31 | fixture.detectChanges(); 32 | const compiled = fixture.nativeElement; 33 | expect(compiled.querySelector('.content span').textContent).toContain('ClientApp app is running!'); 34 | }); 35 | }); 36 | -------------------------------------------------------------------------------- /ModelService/ResetPasswordViewModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace ModelService 5 | { 6 | public class ResetPasswordViewModel 7 | { 8 | [Required] 9 | [EmailAddress] 10 | [RegularExpression(@"^[_a-z0-9-]+(.[a-z0-9-]+)@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,4})$", ErrorMessage = "Please enter a valid email address")] 11 | public string Email { get; set; } 12 | 13 | [Required] 14 | [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)] 15 | [RegularExpression(@"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$", ErrorMessage = "Please enter a valid password")] 16 | [DataType(DataType.Password)] 17 | public string Password { get; set; } 18 | 19 | [DataType(DataType.Password)] 20 | [Display(Name = "Confirm password")] 21 | [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 22 | public string ConfirmPassword { get; set; } 23 | 24 | public string Code { get; set; } 25 | 26 | [DataType(DataType.Password)] 27 | public string OldPassword { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Shared/_AdminLayout.cshtml: -------------------------------------------------------------------------------- 1 | @model ModelService.AdminBaseViewModel 2 | 3 | 4 | 5 | 6 | 7 | 8 | ADMIN | Home Page 9 | 10 | 11 | 12 | 13 | @await Html.PartialAsync("_ApplicationHeaderStylesPartial") 14 | @RenderSection("Styles", required: false) 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | @await Html.PartialAsync("_SidebarLayout") 23 |
24 | @await Html.PartialAsync("_TopbarLayout") 25 | @await Html.PartialAsync("_StatsLayout") 26 | @RenderBody() 27 |
28 |
29 | @await Html.PartialAsync("_FooterLayout") 30 | @await Html.PartialAsync("_UIScriptsPartial") 31 | @RenderSection("Scripts", required: false) 32 | 33 | -------------------------------------------------------------------------------- /DataService/DataService.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netcoreapp3.1 5 | 6 | 7 | 8 | 9 | 10 | 11 | runtime; build; native; contentfiles; analyzers; buildtransitive 12 | all 13 | 14 | 15 | runtime; build; native; contentfiles; analyzers; buildtransitive 16 | all 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/jquery-validate/localization/messages_ka.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery Validation Plugin - v1.19.1 - 6/15/2019 2 | * https://jqueryvalidation.org/ 3 | * Copyright (c) 2019 Jörn Zaefferer; Licensed MIT */ 4 | !function(a){"function"==typeof define&&define.amd?define(["jquery","../jquery.validate.min"],a):"object"==typeof module&&module.exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){return a.extend(a.validator.messages,{required:"ამ ველის შევსება აუცილებელია.",remote:"გთხოვთ მიუთითოთ სწორი მნიშვნელობა.",email:"გთხოვთ მიუთითოთ ელ-ფოსტის კორექტული მისამართი.",url:"გთხოვთ მიუთითოთ კორექტული URL.",date:"გთხოვთ მიუთითოთ კორექტული თარიღი.",dateISO:"გთხოვთ მიუთითოთ კორექტული თარიღი ISO ფორმატში.",number:"გთხოვთ მიუთითოთ ციფრი.",digits:"გთხოვთ მიუთითოთ მხოლოდ ციფრები.",creditcard:"გთხოვთ მიუთითოთ საკრედიტო ბარათის კორექტული ნომერი.",equalTo:"გთხოვთ მიუთითოთ ასეთივე მნიშვნელობა კიდევ ერთხელ.",extension:"გთხოვთ აირჩიოთ ფაილი კორექტული გაფართოებით.",maxlength:a.validator.format("დასაშვებია არაუმეტეს {0} სიმბოლო."),minlength:a.validator.format("აუცილებელია შეიყვანოთ მინიმუმ {0} სიმბოლო."),rangelength:a.validator.format("ტექსტში სიმბოლოების რაოდენობა უნდა იყოს {0}-დან {1}-მდე."),range:a.validator.format("გთხოვთ შეიყვანოთ ციფრი {0}-დან {1}-მდე."),max:a.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც ნაკლებია ან უდრის {0}-ს."),min:a.validator.format("გთხოვთ შეიყვანოთ ციფრი რომელიც მეტია ან უდრის {0}-ს.")}),a}); -------------------------------------------------------------------------------- /UserService/IUserSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using Microsoft.AspNetCore.Http; 5 | using ModelService; 6 | 7 | namespace UserService 8 | { 9 | public interface IUserSvc 10 | { 11 | Task GetUserProfileByIdAsync(string userId); 12 | Task GetUserProfileByUsernameAsync(string username); 13 | Task GetUserProfileByEmailAsync(string email); 14 | Task CheckPasswordAsync(ProfileModel model, string password); 15 | Task UpdateProfileAsync(IFormCollection formData); 16 | Task AddUserActivity(ActivityModel model); 17 | Task ChangePasswordAsync(ProfileModel model, string newPassword); 18 | Task> GetUserActivity(string username); 19 | Task RegisterUserAsync(RegisterViewModel model); 20 | Task ForgotPassword(string email); 21 | Task ResetPassword(ResetPasswordViewModel model); 22 | Task SendTwoFactorAsync(TwoFactorRequestModel model); 23 | Task GenerateTwoFactorCodeAsync(bool authRequired, string userId); 24 | Task ExpireUserSessionAsync(string userId); 25 | Task ValidateTwoFactorCodeAsync(string code); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /CMS_CORE_NG/libman.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0", 3 | "defaultProvider": "cdnjs", 4 | "libraries": [ 5 | { 6 | "library": "jquery@3.5.1", 7 | "destination": "wwwroot/lib/jquery" 8 | }, 9 | { 10 | "library": "popper.js@2.4.3", 11 | "destination": "wwwroot/lib/popper.js" 12 | }, 13 | { 14 | "library": "twitter-bootstrap@4.5.0", 15 | "destination": "wwwroot/lib/bootstrap" 16 | }, 17 | { 18 | "library": "font-awesome@5.13.0", 19 | "destination": "wwwroot/lib/font-awesome" 20 | }, 21 | { 22 | "library": "limonte-sweetalert2@8.11.8", 23 | "destination": "wwwroot/lib/limonte-sweetalert2" 24 | }, 25 | { 26 | "library": "jqueryui@1.12.1", 27 | "destination": "wwwroot/lib/jqueryui" 28 | }, 29 | { 30 | "library": "chosen@1.8.7", 31 | "destination": "wwwroot/lib/chosen" 32 | }, 33 | { 34 | "library": "jquery-validate@1.19.1", 35 | "destination": "wwwroot/lib/jquery-validate" 36 | }, 37 | { 38 | "library": "jquery-ajax-unobtrusive@3.2.6", 39 | "destination": "wwwroot/lib/jquery-ajax-unobtrusive" 40 | }, 41 | { 42 | "library": "jquery-validation-unobtrusive@3.2.11", 43 | "destination": "wwwroot/lib/jquery-validation-unobtrusive" 44 | }, 45 | { 46 | "library": "tabulator@4.4.3", 47 | "destination": "wwwroot/lib/tabulator" 48 | } 49 | ] 50 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/orderModifiers.js: -------------------------------------------------------------------------------- 1 | import { modifierPhases } from "../enums.js"; // source: https://stackoverflow.com/questions/49875255 2 | 3 | function order(modifiers) { 4 | var map = new Map(); 5 | var visited = new Set(); 6 | var result = []; 7 | modifiers.forEach(function (modifier) { 8 | map.set(modifier.name, modifier); 9 | }); // On visiting object, check for its dependencies and visit them recursively 10 | 11 | function sort(modifier) { 12 | visited.add(modifier.name); 13 | var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 14 | requires.forEach(function (dep) { 15 | if (!visited.has(dep)) { 16 | var depModifier = map.get(dep); 17 | 18 | if (depModifier) { 19 | sort(depModifier); 20 | } 21 | } 22 | }); 23 | result.push(modifier); 24 | } 25 | 26 | modifiers.forEach(function (modifier) { 27 | if (!visited.has(modifier.name)) { 28 | // check for visited object 29 | sort(modifier); 30 | } 31 | }); 32 | return result; 33 | } 34 | 35 | export default function orderModifiers(modifiers) { 36 | // order based on dependencies 37 | var orderedModifiers = order(modifiers); // order based on phase 38 | 39 | return modifierPhases.reduce(function (acc, phase) { 40 | return acc.concat(orderedModifiers.filter(function (modifier) { 41 | return modifier.phase === phase; 42 | })); 43 | }, []); 44 | } -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/login/login.component.css: -------------------------------------------------------------------------------- 1 | .errorMessage { 2 | color: #fff; 3 | } 4 | 5 | .container { 6 | height: 100%; 7 | align-content: center; 8 | } 9 | 10 | .card { 11 | height: 370px; 12 | margin-top: auto; 13 | margin-bottom: auto; 14 | width: 400px; 15 | background-color: rgba(0, 0, 0, 0.8) !important; 16 | } 17 | 18 | .social_icon span { 19 | font-size: 60px; 20 | margin-left: 10px; 21 | color: #ffc312; 22 | } 23 | 24 | .social_icon span:hover { 25 | color: white; 26 | cursor: pointer; 27 | } 28 | 29 | .card-header h3 { 30 | color: white; 31 | } 32 | 33 | .social_icon { 34 | position: absolute; 35 | right: 20px; 36 | top: -45px; 37 | } 38 | 39 | .input-group-prepend span { 40 | width: 50px; 41 | background-color: #ffc312; 42 | color: black; 43 | border: 0 !important; 44 | } 45 | 46 | input:focus { 47 | outline: 0 0 0 0 !important; 48 | box-shadow: 0 0 0 0 !important; 49 | } 50 | 51 | .remember { 52 | color: white; 53 | } 54 | 55 | .remember input { 56 | width: 20px; 57 | height: 20px; 58 | margin-left: 15px; 59 | margin-right: 5px; 60 | } 61 | 62 | .login_btn { 63 | color: black; 64 | background-color: #ffc312; 65 | width: 100px; 66 | } 67 | 68 | .login_btn:hover { 69 | color: black; 70 | background-color: white; 71 | } 72 | 73 | .links { 74 | color: white; 75 | } 76 | 77 | .links a { 78 | margin-left: 4px; 79 | } 80 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/enums.js: -------------------------------------------------------------------------------- 1 | export var top = 'top'; 2 | export var bottom = 'bottom'; 3 | export var right = 'right'; 4 | export var left = 'left'; 5 | export var auto = 'auto'; 6 | export var basePlacements = [top, bottom, right, left]; 7 | export var start = 'start'; 8 | export var end = 'end'; 9 | export var clippingParents = 'clippingParents'; 10 | export var viewport = 'viewport'; 11 | export var popper = 'popper'; 12 | export var reference = 'reference'; 13 | export var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 14 | return acc.concat([placement + "-" + start, placement + "-" + end]); 15 | }, []); 16 | export var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 17 | return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 18 | }, []); // modifiers that need to read the DOM 19 | 20 | export var beforeRead = 'beforeRead'; 21 | export var read = 'read'; 22 | export var afterRead = 'afterRead'; // pure-logic modifiers 23 | 24 | export var beforeMain = 'beforeMain'; 25 | export var main = 'main'; 26 | export var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 27 | 28 | export var beforeWrite = 'beforeWrite'; 29 | export var write = 'write'; 30 | export var afterWrite = 'afterWrite'; 31 | export var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/user/user-profile/user-profile.component.css: -------------------------------------------------------------------------------- 1 | .badge.badge-outline.badge-dark { 2 | border-color: #324148; 3 | color: #324148; 4 | } 5 | .badge.badge-outline { 6 | background: transparent; 7 | border: 2px solid; 8 | } 9 | .badge { 10 | font-weight: 500; 11 | border-radius: 4px; 12 | padding: 5px 7px; 13 | font-size: 72%; 14 | letter-spacing: 0.3px; 15 | vertical-align: middle; 16 | display: inline-block; 17 | text-align: center; 18 | text-transform: capitalize; 19 | } 20 | 21 | .card { 22 | width: 100%; 23 | background: #fff; 24 | box-shadow: 0 20px 50px rgba(0, 0, 0, 0.1); 25 | border-radius: 10px; 26 | padding: 20px; 27 | } 28 | 29 | .form-control { 30 | color: #324148; 31 | border-width: 2px; 32 | border-color: #eaecec; 33 | padding: 0.375rem 0.75rem; 34 | height: calc(2.25rem + 4px); 35 | } 36 | 37 | #datepickeDob:hover { 38 | cursor: pointer; 39 | } 40 | 41 | #profpicfile { 42 | display: none; 43 | } 44 | 45 | .loading { 46 | margin: 10% 0 0 50%; 47 | } 48 | 49 | #profile-img-btn { 50 | margin: 5px 0 0 auto; 51 | border: 2px solid #000; 52 | } 53 | 54 | #profile-img-btn input { 55 | display: none; 56 | } 57 | 58 | @media all and (max-width: 480px) { 59 | .btn-custom-class { 60 | width: 100%; 61 | display: block; 62 | } 63 | img { 64 | width: 100%; 65 | } 66 | #profile-img-btn a { 67 | width: 100%; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Controllers/PasswordController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using Microsoft.AspNetCore.Mvc; 6 | using ModelService; 7 | using UserService; 8 | 9 | // For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 10 | 11 | namespace CMS_CORE_NG.Controllers 12 | { 13 | public class PasswordController : Controller 14 | { 15 | private readonly IUserSvc _userSvc; 16 | 17 | public PasswordController(IUserSvc userSvc) 18 | { 19 | _userSvc = userSvc; 20 | } 21 | 22 | public IActionResult ResetPassword(ResetPasswordViewModel model) 23 | { 24 | return View(model); 25 | } 26 | 27 | [HttpPost("[action]")] 28 | [ValidateAntiForgeryToken] 29 | public async Task UpdatePassword([FromBody] ResetPasswordViewModel model) 30 | { 31 | if (ModelState.IsValid) 32 | { 33 | var result = await _userSvc.ResetPassword(model); 34 | 35 | if (result.IsValid) 36 | { 37 | return RedirectToAction("ResetPasswordConfirmation"); 38 | } 39 | } 40 | return BadRequest("Fail"); 41 | } 42 | 43 | public IActionResult ResetPasswordConfirmation() 44 | { 45 | return View(); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /DataService/DbContextInitializer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Threading.Tasks; 4 | using CountryService; 5 | using FunctionalService; 6 | 7 | namespace DataService 8 | { 9 | public static class DbContextInitializer 10 | { 11 | public static async Task Initialize(DataProtectionKeysContext dataProtectionKeysContext, ApplicationDbContext applicationDbContext, IFunctionalSvc functionalSvc, ICountrySvc countrySvc) 12 | { 13 | // Check, if db DataProtectionKeysContext is created 14 | // Check, if db ApplicationDbContext is created 15 | await dataProtectionKeysContext.Database.EnsureCreatedAsync(); 16 | await applicationDbContext.Database.EnsureCreatedAsync(); 17 | 18 | // Check, if db contains any users. If db is not empty, then db has been already seeded 19 | if (applicationDbContext.ApplicationUsers.Any()) 20 | { 21 | return; 22 | } 23 | 24 | // If empty create Admin User and App User 25 | await functionalSvc.CreateDefaultAdminUser(); 26 | await functionalSvc.CreateDefaultUser(); 27 | 28 | // Populate Country database 29 | var countries = await countrySvc.GetCountriesAsync(); 30 | if (countries.Count > 0) 31 | { 32 | await applicationDbContext.Countries.AddRangeAsync(countries); 33 | await applicationDbContext.SaveChangesAsync(); 34 | } 35 | 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/eventListeners.js: -------------------------------------------------------------------------------- 1 | import getWindow from "../dom-utils/getWindow.js"; // eslint-disable-next-line import/no-unused-modules 2 | 3 | var passive = { 4 | passive: true 5 | }; 6 | 7 | function effect(_ref) { 8 | var state = _ref.state, 9 | instance = _ref.instance, 10 | options = _ref.options; 11 | var _options$scroll = options.scroll, 12 | scroll = _options$scroll === void 0 ? true : _options$scroll, 13 | _options$resize = options.resize, 14 | resize = _options$resize === void 0 ? true : _options$resize; 15 | var window = getWindow(state.elements.popper); 16 | var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 17 | 18 | if (scroll) { 19 | scrollParents.forEach(function (scrollParent) { 20 | scrollParent.addEventListener('scroll', instance.update, passive); 21 | }); 22 | } 23 | 24 | if (resize) { 25 | window.addEventListener('resize', instance.update, passive); 26 | } 27 | 28 | return function () { 29 | if (scroll) { 30 | scrollParents.forEach(function (scrollParent) { 31 | scrollParent.removeEventListener('scroll', instance.update, passive); 32 | }); 33 | } 34 | 35 | if (resize) { 36 | window.removeEventListener('resize', instance.update, passive); 37 | } 38 | }; 39 | } // eslint-disable-next-line import/no-unused-modules 40 | 41 | 42 | export default { 43 | name: 'eventListeners', 44 | enabled: true, 45 | phase: 'write', 46 | fn: function fn() {}, 47 | effect: effect, 48 | data: {} 49 | }; -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/detectOverflow.min.js: -------------------------------------------------------------------------------- 1 | import getBoundingClientRect from"../dom-utils/getBoundingClientRect.js";import getClippingRect from"../dom-utils/getClippingRect.js";import getDocumentElement from"../dom-utils/getDocumentElement.js";import computeOffsets from"./computeOffsets.js";import rectToClientRect from"./rectToClientRect.js";import{clippingParents,reference,popper,bottom,top,right,basePlacements,viewport}from"../enums.js";import{isElement}from"../dom-utils/instanceOf.js";import mergePaddingObject from"./mergePaddingObject.js";import expandToHashMap from"./expandToHashMap.js";export default function detectOverflow(e,t){void 0===t&&(t={});var o=t,n=o.placement,p=void 0===n?e.placement:n,r=o.boundary,i=void 0===r?clippingParents:r,m=o.rootBoundary,s=void 0===m?viewport:m,c=o.elementContext,l=void 0===c?popper:c,a=o.altBoundary,f=void 0!==a&&a,d=o.padding,g=void 0===d?0:d,u=mergePaddingObject("number"!=typeof g?g:expandToHashMap(g,basePlacements)),b=l===popper?reference:popper,j=e.elements.reference,v=e.rects.popper,O=e.elements[f?b:l],h=getClippingRect(isElement(O)?O:O.contextElement||getDocumentElement(e.elements.popper),i,s),C=getBoundingClientRect(j),x=computeOffsets({reference:C,element:v,strategy:"absolute",placement:p}),R=rectToClientRect(Object.assign(Object.assign({},v),x)),y=l===popper?R:C,E={top:h.top-y.top+u.top,bottom:y.bottom-h.bottom+u.bottom,left:h.left-y.left+u.left,right:y.right-h.right+u.right},P=e.modifiersData.offset;if(l===popper&&P){var T=P[p];Object.keys(E).forEach(function(e){var t=[right,bottom].indexOf(e)>=0?1:-1,o=[top,bottom].indexOf(e)>=0?"y":"x";E[e]+=T[o]*t})}return E}; -------------------------------------------------------------------------------- /LoggingService/CustomConsoleThemes.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Serilog.Sinks.SystemConsole.Themes; 3 | 4 | namespace LoggingService 5 | { 6 | public static class CustomConsoleThemes 7 | { 8 | public static CustomConsoleTheme VisualStudioMacLight 9 | { 10 | get; 11 | } = new CustomConsoleTheme(new Dictionary 12 | { 13 | [ConsoleThemeStyle.Text] = "\u001b[30m", 14 | [ConsoleThemeStyle.SecondaryText] = "\u001b[30m", 15 | [ConsoleThemeStyle.TertiaryText] = "\u001b[30m", 16 | [ConsoleThemeStyle.Invalid] = "\u001b[30m", 17 | [ConsoleThemeStyle.Null] = "\u001b[30m", 18 | [ConsoleThemeStyle.Name] = "\u001b[30m", 19 | [ConsoleThemeStyle.String] = "\u001b[30m", 20 | [ConsoleThemeStyle.Number] = "\u001b[30m", 21 | [ConsoleThemeStyle.Boolean] = "\u001b[30m", 22 | [ConsoleThemeStyle.Scalar] = "\u001b[30m", 23 | [ConsoleThemeStyle.LevelVerbose] = "\u001b[30m", 24 | [ConsoleThemeStyle.LevelDebug] = "\u001b[44;1m\u001b[37;1m", 25 | [ConsoleThemeStyle.LevelInformation] = "\u001b[42;1m\u001b[37;1m", 26 | [ConsoleThemeStyle.LevelWarning] = "\u001b[43;1m\u001b[37;1m", 27 | [ConsoleThemeStyle.LevelError] = "\u001b[41;1m\u001b[37;1m", 28 | [ConsoleThemeStyle.LevelFatal] = "\u001b[46;1m\u001b[37;1m" 29 | }); 30 | 31 | } 32 | } 33 | 34 | /* CUSTOM THEME CREATED BY TECHHOWDY FOR SERILOG => VISUALSTUDIOMACLIGHT 35 | * BLOG => https://www.techhowdy.com 36 | * YOUTUBE CHANNEL => https://www.youtube.com/channel/UC58AAnVqw_sF6LBAKJJES4Q 37 | * FOR ANSI CODES => https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html 38 | */ 39 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/forgot-password/forgot-password.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

Password Recovery

6 |
7 |
8 |
9 |
10 |
11 | 12 |
13 | 14 |
15 |
16 | 17 |
18 |
19 |
20 | Email is required. 21 |
22 |
23 |
24 |
25 | 28 |
29 |
30 |
31 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/arrow.min.js: -------------------------------------------------------------------------------- 1 | import getBasePlacement from"../utils/getBasePlacement.js";import getLayoutRect from"../dom-utils/getLayoutRect.js";import contains from"../dom-utils/contains.js";import getOffsetParent from"../dom-utils/getOffsetParent.js";import getMainAxisFromPlacement from"../utils/getMainAxisFromPlacement.js";import within from"../utils/within.js";import mergePaddingObject from"../utils/mergePaddingObject.js";import expandToHashMap from"../utils/expandToHashMap.js";import{left,right,basePlacements,top,bottom}from"../enums.js";import{isHTMLElement}from"../dom-utils/instanceOf.js";function arrow(e){var t,r=e.state,i=e.name,s=r.elements.arrow,a=r.modifiersData.popperOffsets,o=getBasePlacement(r.placement),n=getMainAxisFromPlacement(o),m=[left,right].indexOf(o)>=0?"height":"width";if(s&&a){var f=r.modifiersData[i+"#persistent"].padding,p=getLayoutRect(s),c="y"===n?top:left,l="y"===n?bottom:right,d=r.rects.reference[m]+r.rects.reference[n]-a[n]-r.rects.popper[m],g=a[n]-r.rects.reference[n],u=getOffsetParent(s),h=u?"y"===n?u.clientHeight||0:u.clientWidth||0:0,P=d/2-g/2,j=f[c],O=h-p[m]-f[l],w=h/2-p[m]/2+P,b=within(j,w,O),x=n;r.modifiersData[i]=((t={})[x]=b,t.centerOffset=b-w,t)}}function effect(e){var t=e.state,r=e.options,i=e.name,s=r.element,a=void 0===s?"[data-popper-arrow]":s,o=r.padding,n=void 0===o?0:o;null!=a&&("string"!=typeof a||(a=t.elements.popper.querySelector(a)))&&contains(t.elements.popper,a)&&(t.elements.arrow=a,t.modifiersData[i+"#persistent"]={padding:mergePaddingObject("number"!=typeof n?n:expandToHashMap(n,basePlacements))})}export default{name:"arrow",enabled:!0,phase:"main",fn:arrow,effect:effect,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]}; -------------------------------------------------------------------------------- /LoggingService/CustomTextFormatter.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using Serilog.Events; 4 | using Serilog.Formatting; 5 | 6 | namespace LoggingService 7 | { 8 | public class CustomTextFormatter : ITextFormatter 9 | { 10 | public void Format(LogEvent logEvent, TextWriter output) 11 | { 12 | if (logEvent.Level.ToString() != "Information") 13 | { 14 | output.WriteLine("----------------------------------------------------------------------"); 15 | output.WriteLine($"Timestamp - {logEvent.Timestamp} | Level - {logEvent.Level} |"); 16 | output.WriteLine("----------------------------------------------------------------------"); 17 | foreach (var item in logEvent.Properties) 18 | { 19 | output.WriteLine(item.Key + " : " + item.Value); 20 | } 21 | if (logEvent.Exception != null) 22 | { 23 | output.WriteLine("----------------------EXCEPTION DETAILS-------------------------------"); 24 | output.Write("Exception - {0}", logEvent.Exception); 25 | output.Write("StackTrace - {0}", logEvent.Exception.StackTrace); 26 | output.Write("Message - {0}", logEvent.Exception.Message); 27 | output.Write("Source - {0}", logEvent.Exception.Source); 28 | output.Write("InnerException - {0}", logEvent.Exception.InnerException); 29 | } 30 | output.WriteLine("---------------------------------------------------------------------------"); 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/custom/js/common/image.js: -------------------------------------------------------------------------------- 1 | // Function to read uploaded files and generate a preview 2 | 3 | function PreviewImage(value) { 4 | let file = []; 5 | let type = $(value).data('type'); 6 | // First get all the selected file and store it in a variable. 7 | if (type === "editForm") { 8 | file = document.querySelector("#_profpicfile").files; 9 | } 10 | if (type === "addForm") { 11 | file = document.querySelector("#profpicfile").files; 12 | } 13 | if (file.length <= 0) { 14 | return; 15 | } 16 | // Make sure `file.name` matches our extensions criteria 17 | if (!/\.(jpe?g|png|gif)$/i.test(file[0].name)) { 18 | console.log("Please upload valid image type"); 19 | } 20 | console.log(file[0].name); 21 | var reader = new FileReader(); 22 | reader.onload = function () { 23 | if (type === "editForm") { 24 | $("#_imgProfile").attr('src', reader.result); 25 | } 26 | if (type === "addForm") { 27 | $("#imgProfile").attr('src', reader.result); 28 | } 29 | }; 30 | // readAsDataURL is used to read the contents of the file, when the file reading is done , the loaded event is triggered 31 | reader.readAsDataURL(file[0]); 32 | } 33 | 34 | // Function to open file explorer when change phote button is clicked 35 | 36 | function openFileExplorer(item) { 37 | let type = $(item).data('type'); 38 | 39 | if (type === "editForm") { 40 | $(item).closest("div").find("#_profpicfile").trigger('click'); 41 | } 42 | if (type === "addForm") { 43 | $(item).closest("div").find("#profpicfile").trigger('click'); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/app-routing.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { Routes, RouterModule } from '@angular/router'; 3 | import { HomeComponent } from './home/home.component'; 4 | import { LoginComponent } from "./login/login.component"; 5 | import { RegisterComponent } from "./register/register.component"; 6 | import { ForgotPasswordComponent } from "./forgot-password/forgot-password.component"; 7 | import { ValidateCodeComponent } from "./validate-code/validate-code.component"; 8 | import { SendCodeComponent } from "./send-code/send-code.component"; 9 | import { AboutUsComponent } from "./about-us/about-us.component"; 10 | import { TermsComponent } from "./terms/terms.component"; 11 | import { ContactUsComponent } from "./contact-us/contact-us.component"; 12 | 13 | 14 | const routes: Routes = [ 15 | { path: "home", component: HomeComponent }, 16 | { path: '', component: HomeComponent, pathMatch: 'full' }, 17 | { path: 'login', component: LoginComponent }, 18 | { path: 'register', component: RegisterComponent }, 19 | { path: 'forgot-password', component: ForgotPasswordComponent }, 20 | { path: 'validate-code', component: ValidateCodeComponent }, 21 | { path: 'myaccount', loadChildren: () => import(`./user/user.module`).then(m => m.UserModule) }, 22 | { path: 'send-code', component: SendCodeComponent }, 23 | { path: 'about-us', component: AboutUsComponent }, 24 | { path: 'terms', component: TermsComponent }, 25 | { path: 'contact-us', component: ContactUsComponent }, 26 | { path: '**', component: HomeComponent } 27 | ]; 28 | 29 | @NgModule({ 30 | imports: [RouterModule.forRoot(routes)], 31 | exports: [RouterModule] 32 | }) 33 | export class AppRoutingModule { } 34 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/tabulator/js/modules/resize_rows.min.js: -------------------------------------------------------------------------------- 1 | /* Tabulator v4.4.3 (c) Oliver Folkerd */ 2 | var ResizeRows=function(e){this.table=e,this.startColumn=!1,this.startY=!1,this.startHeight=!1,this.handle=null,this.prevHandle=null};ResizeRows.prototype.initializeRow=function(e){var t=this,o=e.getElement(),s=document.createElement("div");s.className="tabulator-row-resize-handle";var n=document.createElement("div");n.className="tabulator-row-resize-handle prev",s.addEventListener("click",function(e){e.stopPropagation()});var a=function(o){t.startRow=e,t._mouseDown(o,e,s)};s.addEventListener("mousedown",a,{passive:!0}),s.addEventListener("touchstart",a),n.addEventListener("click",function(e){e.stopPropagation()});var r=function(o){var s=t.table.rowManager.prevDisplayRow(e);s&&(t.startRow=s,t._mouseDown(o,s,n))};n.addEventListener("mousedown",r),n.addEventListener("touchstart",r,{passive:!0}),o.appendChild(s),o.appendChild(n)},ResizeRows.prototype._mouseDown=function(e,t,o){function s(e){t.setHeight(a.startHeight+((void 0===e.screenY?e.touches[0].screenY:e.screenY)-a.startY))}function n(e){document.body.removeEventListener("mouseup",s),document.body.removeEventListener("mousemove",s),o.removeEventListener("touchmove",s),o.removeEventListener("touchend",n),a.table.element.classList.remove("tabulator-block-select"),a.table.options.rowResized.call(this.table,t.getComponent())}var a=this;a.table.element.classList.add("tabulator-block-select"),e.stopPropagation(),a.startY=void 0===e.screenY?e.touches[0].screenY:e.screenY,a.startHeight=t.getHeight(),document.body.addEventListener("mousemove",s),document.body.addEventListener("mouseup",n),o.addEventListener("touchmove",s,{passive:!0}),o.addEventListener("touchend",n)},Tabulator.prototype.registerModule("resizeRows",ResizeRows); -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CMS_CORE_NG 2 | CMS_CORE_NG is an open source CMS application build with ASP.NET CORE 3.x and Angular 10. 3 | The UI is created using Bootstrap 4 and the Admin Template is created using the 4 | SB Admin 2 is an open source admin dashboard theme for Bootstrap created by Start Bootstrap. 5 | This CMS_CORE_NG source code can be used in you open source projects and for educational purposes. Any modification of the code does not require permission from the author 6 | Techhowdy aka Lyoid Lopes. 7 | Using the source code for commercial purposes requires the user to included the below copyright notice and permission in 8 | all copies or substantial portions of the Software the intend to build. 9 | 10 | /* 11 | The MIT License (MIT) 12 | 13 | Copyright (c) 2019-2020 Techhowdy.com aka Lyoid Lopes 14 | 15 | Permission is hereby granted, free of charge, to any person obtaining a copy 16 | of this software and associated documentation files (the "Software"), to deal 17 | in the Software without restriction, including without limitation the rights 18 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 19 | copies of the Software, and to permit persons to whom the Software is 20 | furnished to do so, subject to the following conditions: 21 | 22 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 23 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 25 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 27 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 28 | THE SOFTWARE. 29 | */ 30 | -------------------------------------------------------------------------------- /ModelService/TwoFactorCodeModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | using System.ComponentModel.DataAnnotations.Schema; 4 | 5 | namespace ModelService 6 | { 7 | public class TwoFactorCodeModel 8 | { 9 | [Key] 10 | public int Id { get; set; } 11 | 12 | [Required] 13 | public string TwoFactorCode { get; set; } 14 | 15 | [Required] 16 | public bool RememberDevice { get; set; } 17 | 18 | [Required] 19 | public string SelectedProvider { get; set; } 20 | 21 | [ForeignKey("UserId")] 22 | public string UserId { get; set; } 23 | 24 | [Required] 25 | public DateTime ExpiryDate { get; set; } 26 | 27 | [Required] 28 | public DateTime CreatedDate { get; set; } 29 | 30 | [Required] 31 | public string EncryptionKey2Fa { get; set; } 32 | 33 | [Required] 34 | public string Token { get; set; } 35 | 36 | [Required] 37 | public string DeviceId { get; set; } 38 | 39 | [Required] 40 | public int Attempts { get; set; } 41 | 42 | [Required] 43 | public string IpAddress { get; set; } 44 | 45 | [Required] 46 | public bool CodeExpired { get; set; } 47 | 48 | [Required] 49 | public bool CodeIsUsed { get; set; } 50 | 51 | [Required] 52 | public string UserAgent { get; set; } 53 | 54 | [Required] 55 | public string EncryptionKeyForDeviceId { get; set; } 56 | 57 | [Required] 58 | public DateTime DeviceIdExpiry { get; set; } 59 | 60 | [Required] 61 | public bool IsDeviceIdExpired { get; set; } 62 | 63 | [NotMapped] 64 | public bool AuthCodeRequired { get; set; } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/custom/css/notification/notification.css: -------------------------------------------------------------------------------- 1 | 2 | @import url('https://fonts.googleapis.com/css?family=Open+Sans'); 3 | @import url('https://fonts.googleapis.com/css?family=Montserrat'); 4 | 5 | 6 | 7 | body { 8 | margin: 0; 9 | padding: 0; 10 | font-family: 'Montserrat', sans-serif; 11 | } 12 | 13 | .card { 14 | position: absolute; 15 | top: 50%; 16 | left: 50%; 17 | transform: translate(-50%,-50%); 18 | width: 300px; 19 | min-height: 350px; 20 | background: #fff; 21 | box-shadow: 0 20px 50px rgba(0,0,0,.1); 22 | border-radius: 10px; 23 | transition: 0.5s; 24 | } 25 | 26 | .card:hover { 27 | box-shadow: 0 30px 70px rgba(0,0,0,.2); 28 | } 29 | 30 | .card .box { 31 | position: absolute; 32 | top: 50%; 33 | left: 0; 34 | transform: translateY(-50%); 35 | text-align: center; 36 | padding: 20px; 37 | box-sizing: border-box; 38 | width: 100%; 39 | } 40 | 41 | .card .box .img { 42 | width: 100%; 43 | height: 100%; 44 | overflow: hidden; 45 | } 46 | 47 | .card .box .img img { 48 | width: 100%; 49 | height: 100%; 50 | } 51 | 52 | .card .box h2 { 53 | font-size: 20px; 54 | color: #262626; 55 | margin: 20px auto; 56 | } 57 | 58 | .card .box h2 span { 59 | font-size: 14px; 60 | background: #e91e63; 61 | color: #fff; 62 | display: inline-block; 63 | padding: 4px 10px; 64 | border-radius: 15px; 65 | } 66 | 67 | .card .box p { 68 | color: #262626; 69 | } 70 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Migrations/DataProtectionKeys/DataProtectionKeysContextModelSnapshot.cs: -------------------------------------------------------------------------------- 1 | // 2 | using DataService; 3 | using Microsoft.EntityFrameworkCore; 4 | using Microsoft.EntityFrameworkCore.Infrastructure; 5 | using Microsoft.EntityFrameworkCore.Metadata; 6 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; 7 | 8 | namespace CMS_CORE_NG.Migrations.DataProtectionKeys 9 | { 10 | [DbContext(typeof(DataProtectionKeysContext))] 11 | partial class DataProtectionKeysContextModelSnapshot : ModelSnapshot 12 | { 13 | protected override void BuildModel(ModelBuilder modelBuilder) 14 | { 15 | #pragma warning disable 612, 618 16 | modelBuilder 17 | .HasAnnotation("ProductVersion", "3.1.6") 18 | .HasAnnotation("Relational:MaxIdentifierLength", 128) 19 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 20 | 21 | modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => 22 | { 23 | b.Property("Id") 24 | .ValueGeneratedOnAdd() 25 | .HasColumnType("int") 26 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 27 | 28 | b.Property("FriendlyName") 29 | .HasColumnType("nvarchar(max)"); 30 | 31 | b.Property("Xml") 32 | .HasColumnType("nvarchar(max)"); 33 | 34 | b.HasKey("Id"); 35 | 36 | b.ToTable("DataProtectionKeys"); 37 | }); 38 | #pragma warning restore 612, 618 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/modifiers/offset.js: -------------------------------------------------------------------------------- 1 | import getBasePlacement from "../utils/getBasePlacement.js"; 2 | import { top, left, right, placements } from "../enums.js"; 3 | export function distanceAndSkiddingToXY(placement, rects, offset) { 4 | var basePlacement = getBasePlacement(placement); 5 | var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; 6 | 7 | var _ref = typeof offset === 'function' ? offset(Object.assign(Object.assign({}, rects), {}, { 8 | placement: placement 9 | })) : offset, 10 | skidding = _ref[0], 11 | distance = _ref[1]; 12 | 13 | skidding = skidding || 0; 14 | distance = (distance || 0) * invertDistance; 15 | return [left, right].indexOf(basePlacement) >= 0 ? { 16 | x: distance, 17 | y: skidding 18 | } : { 19 | x: skidding, 20 | y: distance 21 | }; 22 | } 23 | 24 | function offset(_ref2) { 25 | var state = _ref2.state, 26 | options = _ref2.options, 27 | name = _ref2.name; 28 | var _options$offset = options.offset, 29 | offset = _options$offset === void 0 ? [0, 0] : _options$offset; 30 | var data = placements.reduce(function (acc, placement) { 31 | acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 32 | return acc; 33 | }, {}); 34 | var _data$state$placement = data[state.placement], 35 | x = _data$state$placement.x, 36 | y = _data$state$placement.y; 37 | 38 | if (state.modifiersData.popperOffsets != null) { 39 | state.modifiersData.popperOffsets.x += x; 40 | state.modifiersData.popperOffsets.y += y; 41 | } 42 | 43 | state.modifiersData[name] = data; 44 | } // eslint-disable-next-line import/no-unused-modules 45 | 46 | 47 | export default { 48 | name: 'offset', 49 | enabled: true, 50 | phase: 'main', 51 | requires: ['popperOffsets'], 52 | fn: offset 53 | }; -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Shared/_GetUsersLayout.cshtml: -------------------------------------------------------------------------------- 1 | @*@Html.AntiForgeryToken()*@ 2 | 3 |
4 |
5 |
6 |
7 |

Applicaiton Users

8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | 17 | 18 | 39 | 40 | @await Html.PartialAsync("_AddUserLayout") 41 | @await Html.PartialAsync("_EditUserLayout") -------------------------------------------------------------------------------- /LoggingService/CustomConsoleTheme.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using Serilog.Sinks.SystemConsole.Themes; 6 | 7 | namespace LoggingService 8 | { 9 | public class CustomConsoleTheme : ConsoleTheme 10 | { 11 | private readonly IReadOnlyDictionary _styles; 12 | 13 | public CustomConsoleTheme(IReadOnlyDictionary styles) 14 | { 15 | if (styles == null) 16 | { 17 | throw new ArgumentNullException(nameof(styles)); 18 | } 19 | 20 | this._styles = styles.ToDictionary(kv => kv.Key, kv => kv.Value); 21 | } 22 | 23 | public static CustomConsoleTheme VisualStudioMacLight { get; } = CustomConsoleThemes.VisualStudioMacLight; 24 | 25 | public override bool CanBuffer 26 | { 27 | get 28 | { 29 | return true; 30 | } 31 | } 32 | 33 | protected override int ResetCharCount { get; } = "\x001B[0m".Length; 34 | 35 | public override int Set(TextWriter output, ConsoleThemeStyle style) 36 | { 37 | string str; 38 | if (!this._styles.TryGetValue(style, out str)) 39 | return 0; 40 | output.Write(str); 41 | return str.Length; 42 | } 43 | 44 | public override void Reset(TextWriter output) 45 | { 46 | output.Write("\x001B[0m"); 47 | } 48 | } 49 | } 50 | 51 | /* CUSTOM THEME CREATED BY TECHHOWDY FOR SERILOG => VISUALSTUDIOMACLIGHT 52 | * BLOG => https://www.techhowdy.com 53 | * YOUTUBE CHANNEL => https://www.youtube.com/channel/UC58AAnVqw_sF6LBAKJJES4Q 54 | * FOR ANSI CODES => https://www.lihaoyi.com/post/BuildyourownCommandLinewithANSIescapecodes.html 55 | */ 56 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Migrations/DataProtectionKeys/20200728013902_InitialCreate.Designer.cs: -------------------------------------------------------------------------------- 1 | // 2 | using DataService; 3 | using Microsoft.EntityFrameworkCore; 4 | using Microsoft.EntityFrameworkCore.Infrastructure; 5 | using Microsoft.EntityFrameworkCore.Metadata; 6 | using Microsoft.EntityFrameworkCore.Migrations; 7 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; 8 | 9 | namespace CMS_CORE_NG.Migrations.DataProtectionKeys 10 | { 11 | [DbContext(typeof(DataProtectionKeysContext))] 12 | [Migration("20200728013902_InitialCreate")] 13 | partial class InitialCreate 14 | { 15 | protected override void BuildTargetModel(ModelBuilder modelBuilder) 16 | { 17 | #pragma warning disable 612, 618 18 | modelBuilder 19 | .HasAnnotation("ProductVersion", "3.1.6") 20 | .HasAnnotation("Relational:MaxIdentifierLength", 128) 21 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 22 | 23 | modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => 24 | { 25 | b.Property("Id") 26 | .ValueGeneratedOnAdd() 27 | .HasColumnType("int") 28 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 29 | 30 | b.Property("FriendlyName") 31 | .HasColumnType("nvarchar(max)"); 32 | 33 | b.Property("Xml") 34 | .HasColumnType("nvarchar(max)"); 35 | 36 | b.HasKey("Id"); 37 | 38 | b.ToTable("DataProtectionKeys"); 39 | }); 40 | #pragma warning restore 612, 618 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Migrations/DataProtectionKeys/20200907032438_InitialCreate.Designer.cs: -------------------------------------------------------------------------------- 1 | // 2 | using DataService; 3 | using Microsoft.EntityFrameworkCore; 4 | using Microsoft.EntityFrameworkCore.Infrastructure; 5 | using Microsoft.EntityFrameworkCore.Metadata; 6 | using Microsoft.EntityFrameworkCore.Migrations; 7 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion; 8 | 9 | namespace CMS_CORE_NG.Migrations.DataProtectionKeys 10 | { 11 | [DbContext(typeof(DataProtectionKeysContext))] 12 | [Migration("20200907032438_InitialCreate")] 13 | partial class InitialCreate 14 | { 15 | protected override void BuildTargetModel(ModelBuilder modelBuilder) 16 | { 17 | #pragma warning disable 612, 618 18 | modelBuilder 19 | .HasAnnotation("ProductVersion", "3.1.6") 20 | .HasAnnotation("Relational:MaxIdentifierLength", 128) 21 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 22 | 23 | modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => 24 | { 25 | b.Property("Id") 26 | .ValueGeneratedOnAdd() 27 | .HasColumnType("int") 28 | .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); 29 | 30 | b.Property("FriendlyName") 31 | .HasColumnType("nvarchar(max)"); 32 | 33 | b.Property("Xml") 34 | .HasColumnType("nvarchar(max)"); 35 | 36 | b.HasKey("Id"); 37 | 38 | b.ToTable("DataProtectionKeys"); 39 | }); 40 | #pragma warning restore 612, 618 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Views/Shared/_Layout.cshtml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | @ViewBag.Title 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | @await RenderSectionAsync("Styles", required: false) 22 | 23 | 24 |
25 | @RenderBody() 26 |
27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | @await RenderSectionAsync("Scripts", required: false) 40 | 41 | -------------------------------------------------------------------------------- /ModelService/IdentityDefaultOptions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | namespace ModelService 3 | { 4 | public class IdentityDefaultOptions 5 | { 6 | /*---------------------------------------------------------------------------------------------------*/ 7 | /* Password Properties */ 8 | /*---------------------------------------------------------------------------------------------------*/ 9 | public bool PasswordRequireDigit { get; set; } 10 | public int PasswordRequiredLength { get; set; } 11 | public bool PasswordRequireNonAlphanumeric { get; set; } 12 | public bool PasswordRequireUppercase { get; set; } 13 | public bool PasswordRequireLowercase { get; set; } 14 | public int PasswordRequiredUniqueChars { get; set; } 15 | /*---------------------------------------------------------------------------------------------------*/ 16 | /* Lockout Properties */ 17 | /*---------------------------------------------------------------------------------------------------*/ 18 | public double LockoutDefaultLockoutTimeSpanInMinutes { get; set; } 19 | public int LockoutMaxFailedAccessAttempts { get; set; } 20 | public bool LockoutAllowedForNewUsers { get; set; } 21 | /*---------------------------------------------------------------------------------------------------*/ 22 | /* User Properties */ 23 | /*---------------------------------------------------------------------------------------------------*/ 24 | public bool UserRequireUniqueEmail { get; set; } 25 | public bool SignInRequireConfirmedEmail { get; set; } 26 | public string AccessDeniedPath { get; set; } 27 | 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /CMS_CORE_NG/wwwroot/lib/popper.js/esm/utils/validateModifiers.min.js: -------------------------------------------------------------------------------- 1 | import format from"./format.js";import{modifierPhases}from"../enums.js";var INVALID_MODIFIER_ERROR='Popper: modifier "%s" provided an invalid %s property, expected %s but got %s',MISSING_DEPENDENCY_ERROR='Popper: modifier "%s" requires "%s", but "%s" modifier is not available',VALID_PROPERTIES=["name","enabled","phase","fn","effect","requires","options"];export default function validateModifiers(e){e.forEach(function(r){Object.keys(r).forEach(function(o){switch(o){case"name":"string"!=typeof r.name&&console.error(format(INVALID_MODIFIER_ERROR,String(r.name),'"name"','"string"','"'+String(r.name)+'"'));break;case"enabled":"boolean"!=typeof r.enabled&&console.error(format(INVALID_MODIFIER_ERROR,r.name,'"enabled"','"boolean"','"'+String(r.enabled)+'"'));case"phase":modifierPhases.indexOf(r.phase)<0&&console.error(format(INVALID_MODIFIER_ERROR,r.name,'"phase"',"either "+modifierPhases.join(", "),'"'+String(r.phase)+'"'));break;case"fn":"function"!=typeof r.fn&&console.error(format(INVALID_MODIFIER_ERROR,r.name,'"fn"','"function"','"'+String(r.fn)+'"'));break;case"effect":"function"!=typeof r.effect&&console.error(format(INVALID_MODIFIER_ERROR,r.name,'"effect"','"function"','"'+String(r.fn)+'"'));break;case"requires":Array.isArray(r.requires)||console.error(format(INVALID_MODIFIER_ERROR,r.name,'"requires"','"array"','"'+String(r.requires)+'"'));break;case"requiresIfExists":Array.isArray(r.requiresIfExists)||console.error(format(INVALID_MODIFIER_ERROR,r.name,'"requiresIfExists"','"array"','"'+String(r.requiresIfExists)+'"'));break;case"options":case"data":break;default:console.error('PopperJS: an invalid property has been provided to the "'+r.name+'" modifier, valid properties are '+VALID_PROPERTIES.map(function(e){return'"'+e+'"'}).join(", ")+'; but "'+o+'" was provided.')}r.requires&&r.requires.forEach(function(o){null==e.find(function(e){return e.name===o})&&console.error(format(MISSING_DEPENDENCY_ERROR,String(r.name),o,o))})})})}; -------------------------------------------------------------------------------- /DashboardService/DashboardSvc.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Threading.Tasks; 4 | using DataService; 5 | using Microsoft.EntityFrameworkCore; 6 | using ModelService; 7 | using Serilog; 8 | 9 | namespace DashboardService 10 | { 11 | public class DashboardSvc : IDashboardSvc 12 | { 13 | private readonly ApplicationDbContext _db; 14 | 15 | public DashboardSvc(ApplicationDbContext db) 16 | { 17 | _db = db; 18 | } 19 | 20 | public async Task GetDashboardData() 21 | { 22 | DashboardModel dashboardModel = new DashboardModel(); 23 | 24 | try 25 | { 26 | await using var dbContextTransaction = _db.Database.BeginTransaction(); 27 | 28 | try 29 | { 30 | dashboardModel.TotalUsers = await _db.ApplicationUsers.CountAsync(); 31 | dashboardModel.TotalPosts = 3516; 32 | dashboardModel.PendingRequests = 50; 33 | dashboardModel.NewUsers = await _db.ApplicationUsers 34 | .Where(x => x.AccountCreatedOn == DateTime.Today).CountAsync(); 35 | } 36 | catch (Exception ex) 37 | { 38 | Log.Error("An error occurred while seeding the database {Error} {StackTrace} {InnerException} {Source}", 39 | ex.Message, ex.StackTrace, ex.InnerException, ex.Source); 40 | 41 | dbContextTransaction.Rollback(); 42 | } 43 | 44 | } 45 | catch (Exception ex) 46 | { 47 | Log.Error("An error occurred while seeding the database {Error} {StackTrace} {InnerException} {Source}", 48 | ex.Message, ex.StackTrace, ex.InnerException, ex.Source); 49 | } 50 | 51 | return dashboardModel; 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/register/register.component.css: -------------------------------------------------------------------------------- 1 | #gender { 2 | color: #fff; 3 | font-size: 14px; 4 | } 5 | 6 | .loading { 7 | margin: 20% 0 0 50%; 8 | } 9 | 10 | .errorMessage { 11 | color: #fff; 12 | } 13 | 14 | legend { 15 | color: #fff; 16 | font-size: 14px; 17 | width: auto; 18 | } 19 | 20 | fieldset { 21 | display: block; 22 | margin-left: 2px; 23 | margin-right: 2px; 24 | padding-top: 0.35em; 25 | padding-bottom: 0.625em; 26 | padding-left: 0.75em; 27 | padding-right: 0.75em; 28 | border: 2px groove; 29 | } 30 | 31 | .container { 32 | height: 100%; 33 | align-content: center; 34 | } 35 | 36 | .card { 37 | height: auto; 38 | margin-top: auto; 39 | margin-bottom: auto; 40 | width: 800px; 41 | background-color: rgba(0,0,0,0.8) !important; 42 | } 43 | 44 | .social_icon span { 45 | font-size: 60px; 46 | margin-left: 10px; 47 | color: #FFC312; 48 | } 49 | 50 | .social_icon span:hover { 51 | color: white; 52 | cursor: pointer; 53 | } 54 | 55 | .card-header h3 { 56 | color: white; 57 | } 58 | 59 | .social_icon { 60 | position: absolute; 61 | right: 20px; 62 | top: -45px; 63 | } 64 | 65 | .input-group-prepend span { 66 | width: 50px; 67 | background-color: #FFC312; 68 | color: black; 69 | border: 0 !important; 70 | } 71 | 72 | input:focus { 73 | outline: 0 0 0 0 !important; 74 | box-shadow: 0 0 0 0 !important; 75 | } 76 | 77 | .remember { 78 | color: white; 79 | } 80 | 81 | .remember input { 82 | width: 20px; 83 | height: 20px; 84 | margin-left: 15px; 85 | margin-right: 5px; 86 | } 87 | 88 | .login_btn { 89 | color: black; 90 | background-color: #FFC312; 91 | width: 100px; 92 | } 93 | 94 | .login_btn:hover { 95 | color: black; 96 | background-color: white; 97 | } 98 | 99 | .links { 100 | color: white; 101 | } 102 | 103 | .links a { 104 | margin-left: 4px; 105 | } 106 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Shared/_AdminSiteSettingsLayout.cshtml: -------------------------------------------------------------------------------- 1 | @model ModelService.AdminBaseViewModel 2 | 3 | 4 | 5 | 6 | 7 | 8 | @ViewBag.Title 9 | 10 | 11 | 12 | 13 | 14 | @await Html.PartialAsync("_ApplicationHeaderStylesPartial") 15 | @RenderSection("Styles", required: false) 16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | @await Html.PartialAsync("_SidebarLayout") 24 |
25 | @await Html.PartialAsync("_TopbarLayout") 26 | @RenderBody() 27 |
28 | @await Html.PartialAsync("_FooterLayout") 29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | @RenderSection("Scripts", required: false) 49 | 50 | 51 | -------------------------------------------------------------------------------- /DataService/ApplicationDbContext.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.AspNetCore.Identity; 3 | using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 4 | using Microsoft.EntityFrameworkCore; 5 | using ModelService; 6 | 7 | namespace DataService 8 | { 9 | public class ApplicationDbContext : IdentityDbContext 10 | { 11 | public ApplicationDbContext(DbContextOptions options) : base (options) 12 | { 13 | } 14 | 15 | protected override void OnModelCreating(ModelBuilder builder) 16 | { 17 | base.OnModelCreating(builder); 18 | 19 | builder.Entity().HasData( 20 | new { Id = "1", Name = "Administrator", NormalizedName = "ADMINISTRATOR", RoleName = "Administrator", Handle = "administrator", RoleIcon = "/uploads/roles/icons/default/role.png", IsActive = true }, 21 | new { Id = "2", Name = "Customer", NormalizedName = "CUSTOMER", RoleName = "customer", Handle = "customer", RoleIcon = "/uploads/roles/icons/default/role.png", IsActive = true } 22 | ); 23 | } 24 | 25 | 26 | public DbSet ApplicationUsers { get; set; } 27 | public DbSet Addresses { get; set; } 28 | public DbSet Tokens { get; set; } 29 | public DbSet Activities { get; set; } 30 | public DbSet Countries { get; set; } 31 | public DbSet ApplicationRoles { get; set; } 32 | public DbSet RolePermissions { get; set; } 33 | public DbSet PermissionTypes { get; set; } 34 | public DbSet TwoFactorCodes { get; set; } 35 | } 36 | } 37 | 38 | 39 | /* NUGET PACKAGES TO INSTALL 40 | * Microsoft.AspNetCore.DataProtection.EntityFrameworkCore 41 | * Microsoft.AspNetCore.Identity.EntityFrameworkCore 42 | * Microsoft.EntityFrameworkCore.Design 43 | * Microsoft.EntityFrameworkCore.Tools 44 | */ 45 | -------------------------------------------------------------------------------- /CMS_CORE_NG/ClientApp/src/app/validate-code/validate-code.component.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |

Validate Authentication Code

6 |
7 |
8 |
9 |
10 |
11 | 12 |
13 | 14 |
15 | 18 |
19 |
20 |
21 |
22 | Invalid Code - Attempts Remaining :{{ 24 | attemptsRemaining 25 | }} 27 |
28 |
29 |
30 |
31 | 36 |
37 |
38 |
39 | -------------------------------------------------------------------------------- /CMS_CORE_NG/Areas/Admin/Views/Shared/_ContentLayout.cshtml: -------------------------------------------------------------------------------- 1 | @model ModelService.AdminBaseViewModel 2 | 3 | 4 | 5 | 6 | 7 | 8 | @Model.SiteWideSetting.WebsiteName | @ViewBag.Title 9 | 10 | 11 | 12 | 13 | @await Html.PartialAsync("_ApplicationHeaderStylesPartial") 14 | @RenderSection("Styles", required: false) 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | @await Html.PartialAsync("_SidebarLayout") 23 |
24 | @await Html.PartialAsync("_TopbarLayout") 25 | @RenderBody() 26 |
27 | 28 | 29 | @await Html.PartialAsync("_FooterLayout") 30 |
31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | @RenderSection("Scripts", required: false) 50 | 51 | 52 | --------------------------------------------------------------------------------