├── .gitignore ├── ChilliCoreTemplate.Data ├── Api │ ├── DataContext.cs │ └── User.cs ├── ChilliCoreTemplate.Data.csproj ├── DataContext │ ├── DataContext.cs │ ├── DataContext_Project.cs │ └── DataSeed.cs ├── EmailAccount │ ├── BulkImport.cs │ ├── Company.cs │ ├── DataContext.cs │ ├── Email.cs │ ├── ErrorLog.cs │ ├── IExternalId.cs │ ├── PushNotification.cs │ ├── SmsQueueItem.cs │ ├── User.cs │ ├── UserActivity.cs │ ├── UserDevice.cs │ ├── UserOAuth.cs │ ├── UserRole.cs │ ├── UserSession.cs │ └── UserToken.cs ├── Migrations │ ├── 20220627064305_migration_1.Designer.cs │ ├── 20220627064305_migration_1.cs │ ├── 20221205004249_migration_2.Designer.cs │ ├── 20221205004249_migration_2.cs │ └── DataContextModelSnapshot.cs ├── Models │ ├── Location.cs │ ├── Payment.cs │ └── Payout.cs └── Webhook │ ├── DataContext.cs │ ├── Webhook_Inbound.cs │ └── Webhook_Outbound.cs ├── ChilliCoreTemplate.IntegrationTests ├── AsynDispatchEmailQueueTests.cs ├── ChilliCoreTemplate.IntegrationTests.csproj ├── Helpers │ └── TestServerFixture.cs ├── ImmediateDispatchEmailQueueTests.cs ├── Properties │ └── launchSettings.json ├── TemplateViewRendererTests.cs ├── TestHelper.cs ├── TestViewModel.cs ├── Views │ ├── Emails │ │ └── EmailAccounts │ │ │ └── NestedTemplate.cshtml │ ├── TestGenericInterfaceClassView.cshtml │ ├── TestView.cshtml │ └── TestView2.cshtml └── appsettings.json ├── ChilliCoreTemplate.Models ├── Admin │ ├── ChangeAccountModels.cs │ ├── ChartDataVM.cs │ ├── StatisticsModel.cs │ └── UserModel.cs ├── Api │ ├── Base │ │ ├── ApiAccount.cs │ │ ├── CompanyApiModels.cs │ │ └── DevicePinApiModel.cs │ ├── Library │ │ ├── ApiLogEntry.cs │ │ ├── ApiMessageResult.cs │ │ ├── ApiPagedList.cs │ │ ├── ApiPaging.cs │ │ ├── ApiPostReferenceAttribute.cs │ │ ├── ApiResourceReferenceAttribute.cs │ │ ├── ErrorResult.cs │ │ ├── IInterceptApiModel.cs │ │ ├── OAuthApiModels.cs │ │ ├── PushNotificationApiModels.cs │ │ ├── PushNotificationSettings.cs │ │ └── WebhookModels.cs │ └── PaymentApiModel.cs ├── ChilliCoreTemplate.Models.csproj ├── Common │ ├── Constants.cs │ ├── DataLinkModel.cs │ ├── Enum.cs │ ├── FileStorageHelpers.cs │ ├── Library.cs │ ├── MediaTypeNames.cs │ ├── MyServer.cs │ ├── PdfModel.cs │ └── Select2QueryModel.cs ├── EmailAccount │ ├── Account.cs │ ├── AccountActivity.cs │ ├── AccountCommon.cs │ ├── AccountRoleProvider.cs │ ├── BulkImportModels.cs │ ├── CompanyModels.cs │ ├── EmailModels.cs │ ├── ErrorLogModels.cs │ ├── IPrincipalExtensions.cs │ ├── PushNotificationModels.cs │ ├── SessionData.cs │ └── UserData.cs ├── IMvcActionDefinition.cs ├── IMvcRouterAccessor.cs ├── Models │ ├── CompanyModels.cs │ ├── LocationModels.cs │ └── RazorTemplate.cs ├── PhoneNumberAttribute.cs ├── ProjectConfigurationSection.cs ├── RemoteStorageMiddlewareOptions.cs ├── Sms │ ├── SmsModels.cs │ └── TwilioModels.cs ├── StreamExtensions.cs └── Stripe │ ├── StripeConfigurationSection.cs │ ├── StripeCustomerModels.cs │ ├── StripeExtensions.cs │ ├── StripeManagedAccountApiModels.cs │ ├── StripeManagedAccountModels.cs │ └── StripePayoutModels.cs ├── ChilliCoreTemplate.Service ├── Admin │ └── AdminService.cs ├── Api │ ├── Base │ │ ├── ApiServices.cs │ │ ├── BaseApiService.cs │ │ ├── CompanyApiService.cs │ │ ├── PushNotificationApiService.cs │ │ ├── UserApiMobileService.cs │ │ └── UserApiWebService.cs │ ├── External │ │ └── SlackApiService.cs │ ├── Library │ │ ├── ApiPagingHelper.cs │ │ └── MaterializerApiExtensions.cs │ ├── MyApiService.cs │ ├── PaymentApiService.cs │ └── Webhook │ │ ├── WebhookServiceConfiguration.cs │ │ ├── WebhookService_Inbound.cs │ │ ├── WebhookService_Outbound.cs │ │ ├── WebhookService_Stripe.cs │ │ └── WebhookService_Twilio.cs ├── AutoMapperConfiguration.cs ├── ChilliCoreTemplate.Service.csproj ├── ChilliCoreTemplate.Service_BACKUP_9072.csproj ├── ChilliCoreTemplate.Service_BASE_9072.csproj ├── ChilliCoreTemplate.Service_LOCAL_9072.csproj ├── ChilliCoreTemplate.Service_REMOTE_9072.csproj ├── DatabaseInitialization.cs ├── DateTimeExtensions.cs ├── EmailAccount │ ├── AccountCompanyService.cs │ ├── AccountInviteService.cs │ ├── AccountService.cs │ ├── AsyncDispatchEmailQueue.cs │ ├── BulkImportService.cs │ ├── CompanyService.cs │ ├── EmailSender.cs │ ├── EmailService.cs │ ├── ErrorService.cs │ ├── IEmailQueue.cs │ ├── ImmediateDispatchEmailQueue.cs │ ├── PushNotificationService.cs │ ├── RazorTemplates.cs │ ├── TemplateViewRenderer.cs │ ├── UserActivityService.cs │ ├── UserOAuthService.cs │ ├── UserPasswordService.cs │ ├── UserSessionService.cs │ └── UserTokenService.cs ├── FileStorageHelper.cs ├── FileStoragePath.cs ├── Library │ ├── IQueryableExtensions.cs │ └── MaterializerExtension.cs ├── LinqMappers.cs ├── PdfService.cs ├── RazorTemplates.cs ├── ReplacementClasses │ └── Mixpanel.cs ├── ScopeContextFactory.cs ├── Service.cs ├── ServiceRegistration.cs ├── Services │ ├── BaseService.cs │ ├── CompanyServices.cs │ ├── LocationServices.cs │ ├── Services.cs │ └── ServicesLibrary.cs ├── SessionTicketStore.cs ├── Sms │ ├── AsyncDispatchSmsQueue.cs │ ├── EmailSmsService.cs │ ├── ISmsQueue.cs │ ├── ISmsService.cs │ ├── SmsAdminService.cs │ ├── SmsService.cs │ └── TwilioSmsService.cs ├── Stripe │ ├── StripeAccountService.cs │ ├── StripeAutoMapperConfiguration.cs │ ├── StripeBalanceTransactionService.cs │ ├── StripeChargeServices.cs │ ├── StripeCouponService.cs │ ├── StripeCustomerServices.cs │ ├── StripeEventService.cs │ ├── StripeFileServices.cs │ ├── StripeHelperService.cs │ ├── StripeInvoiceService.cs │ ├── StripeManagedAccountService.cs │ ├── StripePaymentIntentService.cs │ ├── StripePersonService.cs │ ├── StripePriceServices.cs │ ├── StripeProductServices.cs │ ├── StripeService.cs │ ├── StripeSubscriptionService.cs │ ├── StripeTransferService.cs │ └── StripeWebhookService.cs └── Task │ └── TaskQueue.cs ├── ChilliCoreTemplate.Tests ├── ChilliCoreTemplate.Tests.csproj ├── EmailSenderTests.cs ├── TestHelper.cs ├── appsettings.json └── test.txt ├── ChilliCoreTemplate.Web ├── Api │ ├── Controllers │ │ ├── CompanyApiController.cs │ │ ├── CompanyUsersApiController.cs │ │ ├── ConfigurationsApiController.cs │ │ ├── PaymentsApiController.cs │ │ ├── ServerController.cs │ │ ├── Users │ │ │ ├── DevicePinsController.cs │ │ │ ├── UsersApiController.cs │ │ │ └── UsersSessionApiController.cs │ │ └── Webhook │ │ │ ├── StripeWebhookController.cs │ │ │ ├── TwilioWebhookController.cs │ │ │ ├── Webhook_InboundController.cs │ │ │ └── Webhook_OutboundController.cs │ └── Library │ │ ├── ApiKeyActionFilter.cs │ │ ├── ApiKeyIgnoreAttribute.cs │ │ ├── ControllerExtensionsForApi.cs │ │ ├── HttpLogMiddleware.cs │ │ ├── UserKeyMiddleware.cs │ │ └── ValidateTwilioRequestAttribute.cs ├── AppSettingsEnvironment.Debug.cs ├── AppSettingsEnvironment.Develop.cs ├── AppSettingsEnvironment.Release.cs ├── AppSettingsEnvironment.Staging.cs ├── AppSettingsEnvironment.cs ├── Areas │ ├── Admin │ │ ├── Controllers │ │ │ ├── CompanyController.cs │ │ │ ├── DefaultController.cs │ │ │ └── UserController.cs │ │ └── Views │ │ │ ├── Company │ │ │ ├── CompanyAdminAdd.cshtml │ │ │ ├── CompanyAdminDelete.cshtml │ │ │ ├── CompanyDelete.cshtml │ │ │ ├── CompanyDetail.cshtml │ │ │ ├── CompanyEdit.cshtml │ │ │ ├── CompanyList.cshtml │ │ │ ├── CompanyPurge.cshtml │ │ │ └── _CreateCompany.cshtml │ │ │ ├── User │ │ │ ├── Activity.cshtml │ │ │ ├── ActivityDetail.cshtml │ │ │ ├── ChangeDetails.cshtml │ │ │ ├── ChangeRole.cshtml │ │ │ ├── ChangeStatus.cshtml │ │ │ ├── Emails.cshtml │ │ │ ├── EmailsDetail.cshtml │ │ │ ├── EmailsPreview.cshtml │ │ │ ├── ErrorDetail.cshtml │ │ │ ├── ErrorList.cshtml │ │ │ ├── NotificationDetail.cshtml │ │ │ ├── NotificationList.cshtml │ │ │ ├── Purge.cshtml │ │ │ ├── ResetPassword.cshtml │ │ │ ├── SmsDetail.cshtml │ │ │ ├── SmsList.cshtml │ │ │ ├── Statistics.cshtml │ │ │ ├── Users.cshtml │ │ │ ├── UsersDetails.cshtml │ │ │ ├── UsersImport.cshtml │ │ │ ├── UsersInvite.cshtml │ │ │ ├── UsersInvite_Upload.cshtml │ │ │ ├── _InviteUser.cshtml │ │ │ ├── _Statistic.cshtml │ │ │ └── _UsersImport_Script.cshtml │ │ │ ├── _ViewImports.cshtml │ │ │ └── _ViewStart.cshtml │ └── Company │ │ ├── Controllers │ │ ├── DefaultController.cs │ │ ├── LocationController.cs │ │ └── UserController.cs │ │ └── Views │ │ ├── Location │ │ ├── LocationDelete.cshtml │ │ ├── LocationDetail.cshtml │ │ ├── LocationEdit.cshtml │ │ ├── LocationList.cshtml │ │ ├── LocationUserAdd.cshtml │ │ ├── LocationUserDelete.cshtml │ │ └── _CreateLocation.cshtml │ │ ├── User │ │ ├── ChangeDetails.cshtml │ │ ├── ChangeRole.cshtml │ │ ├── ChangeStatus.cshtml │ │ ├── ResetPassword.cshtml │ │ ├── UserDetail.cshtml │ │ ├── UserInvite.cshtml │ │ ├── UserList.cshtml │ │ └── _InviteUser.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml ├── ChilliCoreTemplate.Web.csproj ├── Controllers │ ├── ControllerExtensions.cs │ ├── EmailAccountController.cs │ ├── EntryController.cs │ ├── ErrorController.cs │ └── PublicController.cs ├── Library │ ├── BundleHelper.cs │ ├── CoreHostingEnvironment.cs │ ├── CustomAuthorizeAttribute.cs │ ├── DryIocSetup.cs │ ├── EmailBuilder │ │ ├── DefaultEmailBuilder.cs │ │ └── EmailBuilder.cs │ ├── FieldTemplateOptions │ │ ├── CheckboxFieldTemplateOptions.cs │ │ ├── CheckboxListFieldTemplateOptions.cs │ │ ├── ClockPickerFieldTemplateOptions.cs │ │ ├── DateFieldTemplateOptions.cs │ │ ├── DatePickerFieldTemplateOptions.cs │ │ ├── DateTimePickerFieldTemplateOptions.cs │ │ ├── FieldImageUploadWithCropitOptions.cs │ │ ├── FieldImageUploadWithPreviewOptions.cs │ │ ├── FieldTemplateOptions.cs │ │ ├── FileFieldTemplateOptions.cs │ │ ├── HtmlFieldTemplateOptions.cs │ │ ├── InputFieldTemplateOptions.cs │ │ ├── RadioFieldTemplateOptions.cs │ │ ├── RadioListFieldTemplateOptions.cs │ │ ├── ReadonlyFieldTemplateOptions.cs │ │ ├── SelectFieldTemplateOptions.cs │ │ ├── SelectListFieldTemplateOptionsBase.cs │ │ └── TextAreaFieldTemplateOptions.cs │ ├── FireBaseConfig.json │ ├── HttpContextExtensions.cs │ ├── ImageSharp │ │ └── ImageSharpExtensions.cs │ ├── IndexPageMiddleware.cs │ ├── MenuConfigByRole.cs │ ├── MenuHtmlHelper.cs │ ├── ModalViewModel.cs │ ├── MvcActionContainer.cs │ ├── MvcActionDefinitionExtensions.cs │ ├── MvcActionDefinitionHtmlHelper.cs │ ├── MvcActions.cs │ ├── MvcInfrastructureHelper.cs │ ├── MvcRouterAccessor.cs │ ├── OAuthProviderRouteConstraint.cs │ ├── RemoteStorageMiddleware.cs │ ├── Resources │ │ └── EmailButton.html │ ├── Serilog │ │ ├── ConfigurationExtensions.cs │ │ ├── ExceptionMessageEnricher.cs │ │ ├── SerilogConfiguration.cs │ │ └── UserIdEnricher.cs │ ├── StreamedContentResourceFilter.cs │ ├── Swagger │ │ ├── AddSwaggerFoolProofSchemaFilter.cs │ │ ├── HybridOperationFilter.cs │ │ ├── SwaggerConfig.cs │ │ └── SwaggerOperationFilter.cs │ ├── TagHelpers │ │ ├── AnchorTagHelper.cs │ │ ├── BoxTagHelper.cs │ │ ├── ConditionTagHelper.cs │ │ ├── HeadingTagHelper.cs │ │ ├── LabelTagHelper.cs │ │ ├── PageTagHelper.cs │ │ ├── TabTagHelper.cs │ │ └── TableTagHelper.cs │ ├── Tasks │ │ ├── CleanUpTask.cs │ │ ├── EmailDeliveryTask.cs │ │ ├── ErrorLogTask.cs │ │ ├── SmsDeliveryTask.cs │ │ ├── TaskConfig.cs │ │ └── WebhookTask.cs │ ├── Template │ │ ├── BreadcrumbOptions.cs │ │ ├── ButtonTemplate.cs │ │ ├── FieldDateRangeFor.cs │ │ ├── MvcActionDefinitionTemplate.cs │ │ ├── PageMessage.cs │ │ └── TemplateTypes.cs │ └── TypedRoute.cs ├── Program.cs ├── Properties │ ├── PublishProfiles │ │ └── Profile.pubxml │ ├── launchSettings.json │ └── web.config ├── Startup.cs ├── Views │ ├── EmailAccount │ │ ├── ChangeDetails.cshtml │ │ ├── ChangePassword.cshtml │ │ ├── ChooseRole.cshtml │ │ ├── ConfirmInvite.cshtml │ │ ├── ConfirmInviteSuccess.cshtml │ │ ├── EmailUnsubscribe.cshtml │ │ ├── ForgotPassword.cshtml │ │ ├── ForgotPasswordSent.cshtml │ │ ├── Login.cshtml │ │ ├── Registration.cshtml │ │ ├── RegistrationActivationSent.cshtml │ │ ├── RegistrationComplete.cshtml │ │ ├── ResetPassword.cshtml │ │ ├── ResetPasswordSuccess.cshtml │ │ └── _ViewStart.cshtml │ ├── Emails │ │ ├── Admin │ │ │ ├── ErrorAlert.cshtml │ │ │ └── ErrorDaily.cshtml │ │ ├── Company │ │ │ ├── PaymentInvoiceFailed.cshtml │ │ │ └── SubscriptionCreated.cshtml │ │ ├── EmailAccount │ │ │ ├── AccountAlreadyRegistered.cshtml │ │ │ ├── AccountNotRegistered.cshtml │ │ │ ├── ForgotPin.cshtml │ │ │ ├── InviteUser.cshtml │ │ │ ├── OneTimePassword.cshtml │ │ │ ├── PasswordChanged.cshtml │ │ │ ├── RegistrationComplete.cshtml │ │ │ ├── ResetPassword.cshtml │ │ │ ├── SendSMSViaEmail.cshtml │ │ │ └── WelcomeEmail.cshtml │ │ └── _EmailLayout.cshtml │ ├── Error │ │ ├── Index.cshtml │ │ └── NotFound.cshtml │ ├── Shared │ │ ├── ConfirmationModalHandlebars.cshtml │ │ ├── Error.cshtml │ │ ├── FieldTemplateLayouts │ │ │ ├── HiddenField.cshtml │ │ │ ├── ModalField.cshtml │ │ │ ├── OptionalField.cshtml │ │ │ ├── StandardField.cshtml │ │ │ └── VerticalField.cshtml │ │ ├── FieldTemplates │ │ │ ├── Checkbox.cshtml │ │ │ ├── CheckboxList.cshtml │ │ │ ├── ClockPicker.cshtml │ │ │ ├── Date.cshtml │ │ │ ├── DatePicker.cshtml │ │ │ ├── DateRange.cshtml │ │ │ ├── DateTimePicker.cshtml │ │ │ ├── File.cshtml │ │ │ ├── Html.cshtml │ │ │ ├── ImageUploadWithCropit.cshtml │ │ │ ├── ImageUploadWithPreview.cshtml │ │ │ ├── Input.cshtml │ │ │ ├── Radio.cshtml │ │ │ ├── RadioList.cshtml │ │ │ ├── ReadOnly.cshtml │ │ │ ├── Select.cshtml │ │ │ ├── TextArea.cshtml │ │ │ ├── _RegisterDateScript.cshtml │ │ │ └── _RegisterICheckScript.cshtml │ │ ├── Layout │ │ │ ├── Menus │ │ │ │ ├── _LeftMenu.cshtml │ │ │ │ ├── _MenuIcon.cshtml │ │ │ │ └── _TopMenu.cshtml │ │ │ ├── _Breadcrumb.cshtml │ │ │ ├── _EmailAccountLayout.cshtml │ │ │ ├── _Footer.cshtml │ │ │ ├── _Icons.cshtml │ │ │ ├── _Layout.cshtml │ │ │ ├── _LoginPartial.cshtml │ │ │ ├── _MiniProfiler.cshtml │ │ │ ├── _Modal.cshtml │ │ │ ├── _NavigationLeft.cshtml │ │ │ ├── _NavigationLeft_Navbar.cshtml │ │ │ ├── _NavigationTop.cshtml │ │ │ └── _NavigationTop_UserPartial.cshtml │ │ ├── NotFound.cshtml │ │ └── Templates │ │ │ ├── Button.cshtml │ │ │ ├── GoogleAnalytics.cshtml │ │ │ ├── PageButtons.cshtml │ │ │ ├── PageContainerLeft.cshtml │ │ │ ├── PageContainerTop.cshtml │ │ │ ├── PageMessage.cshtml │ │ │ └── ValidationSummary.cshtml │ ├── Sms │ │ └── User │ │ │ └── OneTimePassword.cshtml │ ├── _ViewImports.cshtml │ └── _ViewStart.cshtml ├── appsettings.json ├── bundleconfig.json ├── bundleconfig.json.bindings ├── gulpfile.js ├── package-lock.json ├── package.json ├── packages.lock.json ├── web.config └── wwwroot │ ├── Images │ ├── Generic │ │ ├── 1by1.png │ │ ├── 4by3.png │ │ ├── 9by5.png │ │ ├── GenericLogo.png │ │ ├── default-image.jpg │ │ └── default-profile-image.jpg │ ├── Icons │ │ ├── apple-touch--icon-57x57.png │ │ ├── apple-touch--icon-72x72.png │ │ ├── apple-touch-icon-114x114.png │ │ ├── apple-touch-icon-120x120.png │ │ ├── apple-touch-icon-144x144.png │ │ ├── apple-touch-icon-152x152.png │ │ ├── apple-touch-icon-180x180.png │ │ ├── apple-touch-icon-76x76.png │ │ ├── apple-touch-icon.png │ │ ├── favicon.ico │ │ ├── powered-by-dark.png │ │ └── powered-by-light.png │ ├── bg-image.png │ ├── imagesharp-logo.png │ ├── loading.gif │ └── nav-user-bg-image.png │ ├── Scripts │ ├── handlebars.min.js │ ├── includeAll │ │ ├── ajax-chosen.js │ │ ├── app.js │ │ ├── bindladda.js │ │ ├── confirmation.js │ │ ├── googleAddress.js │ │ ├── googleMap.js │ │ ├── googleTimezone.js │ │ ├── jquery.bluechilli-mvc.js │ │ ├── jquery.bluechilli.analytics.form.js │ │ ├── jquery.bluechilli.file-preview.js │ │ ├── jquery.bluechilli.image-cropit.js │ │ ├── jquery.bluechilli.image-preview.js │ │ ├── jquery.bluechilli.load-options.js │ │ └── mvcfoolproof.unobtrusive.min.js │ ├── inspinia │ │ ├── app │ │ │ └── inspinia.js │ │ └── plugins │ │ │ ├── chartJs │ │ │ └── Chart.min.js │ │ │ ├── clockpicker │ │ │ └── clockpicker.js │ │ │ ├── dataTables │ │ │ └── datatables.min.js │ │ │ ├── ladda │ │ │ ├── BC modification notes.txt │ │ │ ├── ladda.jquery.js │ │ │ ├── ladda.js │ │ │ └── spin.js │ │ │ ├── metisMenu │ │ │ └── metisMenu.min.js │ │ │ ├── pace │ │ │ └── pace.min.js │ │ │ ├── slimscroll │ │ │ └── jquery.slimscroll.min.js │ │ │ └── switchery │ │ │ └── switchery.js │ ├── modernizr-2.6.2.js │ ├── moment.js │ └── moment.min.js │ ├── Styles │ ├── _app.scss │ ├── _core.scss │ ├── _pull.scss │ ├── bootstrap-patch.scss │ ├── bootstrap.scss │ ├── fontawesome-patch.scss │ ├── includeAll │ │ └── readme.txt │ ├── inspinia │ │ ├── _patch.scss │ │ ├── _variables.scss │ │ ├── base │ │ │ ├── badges_labels.scss │ │ │ ├── base.scss │ │ │ ├── buttons.scss │ │ │ ├── chat.scss │ │ │ ├── custom.scss │ │ │ ├── elements.scss │ │ │ ├── glyphicons.scss │ │ │ ├── landing.scss │ │ │ ├── md-skin.scss │ │ │ ├── media.scss │ │ │ ├── metismenu.scss │ │ │ ├── mixins.scss │ │ │ ├── navigation.scss │ │ │ ├── pages.scss │ │ │ ├── rtl.scss │ │ │ ├── sidebar.scss │ │ │ ├── skins.scss │ │ │ ├── spinners.scss │ │ │ ├── theme-config.scss │ │ │ ├── top_navigation.scss │ │ │ ├── typography.scss │ │ │ └── variables.scss │ │ ├── customised.scss │ │ ├── plugins │ │ │ ├── datatables │ │ │ │ └── datatables.min.css │ │ │ └── ladda │ │ │ │ └── ladda.scss │ │ └── style.scss │ └── style.scss │ ├── favicon.ico │ ├── index.html │ ├── package.json │ └── robots.txt ├── ChilliCoreTemplate.sln ├── ProjectSetup.bat ├── README.md ├── devops ├── .gitignore ├── AWSCreateCI.bat ├── AWSCreateCommon.bat ├── AWSCreateEnvs.bat ├── AWSCreateKeys.bat ├── AWSFetchOutputs.bat ├── AwsSmtpCredential.exe ├── CI_NetCore.json ├── Newtonsoft.Json.dll ├── __GetStackOutputs.bat ├── __bootstrapCLI.bat ├── __random.bat ├── __randomKeys.bat ├── cicdformation.json ├── commonformation.json ├── dataformation.json ├── instructions.txt ├── instructions_ci.txt ├── testversion.ps1 ├── unpack-key.ps1 ├── unpack-webdeploy.ps1 └── webformation.json ├── global.json ├── serverless └── pdfgen │ ├── .gitignore │ ├── handler.js │ ├── package-lock.json │ ├── package.json │ ├── readme.md │ ├── sampleGoogleChart.html │ ├── sampledata.json │ ├── serverless.yml │ ├── wkhtmltopdf │ └── wkhtmltopdf.exe └── tools ├── AwsSmtpCredential ├── .gitignore ├── App.config ├── AwsSmtpCredential.csproj ├── AwsSmtpCredential.exe ├── AwsSmtpCredential.exe.config ├── AwsSmtpCredential.sln ├── Newtonsoft.Json.dll ├── Newtonsoft.Json.xml ├── Program.cs ├── Properties │ └── AssemblyInfo.cs └── packages.config ├── CodeCloner ├── .gitignore ├── App.config ├── CodeCloner.csproj ├── CodeCloner.sln ├── ExecutionLogger.cs ├── MainForm.Designer.cs ├── MainForm.cs ├── MainForm.resx ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings └── Renamer.cs └── ProjectSetup ├── .gitignore ├── App.config ├── AppSettingsSetup.cs ├── ExecutionLogger.cs ├── MainForm.Designer.cs ├── MainForm.cs ├── MainForm.resx ├── Newtonsoft.Json.dll ├── Newtonsoft.Json.xml ├── Program.cs ├── ProjectSetup.csproj ├── ProjectSetup.exe ├── ProjectSetup.exe.config ├── ProjectSetup.sln ├── Properties ├── AssemblyInfo.cs ├── Resources.Designer.cs ├── Resources.resx ├── Settings.Designer.cs └── Settings.settings ├── Renamer.cs ├── WebConfigSetup.cs └── packages.config /.gitignore: -------------------------------------------------------------------------------- 1 | #ignore thumbnails created by windows 2 | Thumbs.db 3 | #Ignore files build by Visual Studio 4 | *.obj 5 | *.exe 6 | !NuGet.exe 7 | *.pdb 8 | *.user 9 | *.aps 10 | *.pch 11 | *.vspscc 12 | *_i.c 13 | *_p.c 14 | *.ncb 15 | *.suo 16 | *.tlb 17 | *.tlh 18 | *.bak 19 | *.cache 20 | *.ilk 21 | *.log 22 | [Bb]in 23 | [Dd]ebug*/ 24 | *.lib 25 | !*.Lib/ 26 | *.sbr 27 | obj/ 28 | [Rr]elease*/ 29 | _ReSharper*/ 30 | [Tt]est[Rr]esult* 31 | *.suo 32 | *.DS_Store 33 | *.orig 34 | *._* 35 | edge/ 36 | node_modules/ 37 | *.Web/node_modules/ 38 | *.Web/wwwroot/lib 39 | *.Web/wwwroot/is-cache 40 | *.Web/wwwroot/bundles 41 | *.Web/wwwroot/StylesCompiled 42 | *.Web/localstorage 43 | *.Web/logs 44 | *.lock 45 | .vs 46 | .nuget 47 | *.Web/wwwroot/Styles/inspinia_old 48 | 49 | # Don't include NuGet Packages 50 | packages/ 51 | RequestReduceContent/ 52 | 53 | #Ignore react build files 54 | /index.html 55 | /*.js 56 | /*.css 57 | /*.svg 58 | /*.woff 59 | /*.eot 60 | /*.ico 61 | 62 | # Don't include upgrade report 63 | UpgradeLog.XML 64 | _UpgradeReport_Files/ 65 | local.json 66 | 67 | .idea 68 | 69 | #Ignore secure files 70 | appsettings.*.json 71 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/Api/DataContext.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Data.EmailAccount; 2 | using ChilliCoreTemplate.Models.Api; 3 | using System; 4 | using System.Collections.Generic; 5 | using Microsoft.EntityFrameworkCore; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace ChilliCoreTemplate.Data 11 | { 12 | public partial class DataContext : DbContext 13 | { 14 | public DbSet ApiLogEntries { get; set; } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/Api/User.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel.DataAnnotations; 5 | 6 | namespace ChilliCoreTemplate.Data.EmailAccount 7 | { 8 | // This is the EF model 9 | public partial class User 10 | { 11 | [StringLength(100)] 12 | public string PhoneVerificationCode { get; set; } 13 | 14 | public Guid? PhoneVerificationToken { get; set; } 15 | 16 | public DateTime? PhoneVerificationExpiry { get; set; } 17 | public int PhoneVerificationRetries { get; set; } 18 | } 19 | } 20 | 21 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/DataContext/DataContext_Project.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using ChilliSource.Cloud.Core.Distributed; 3 | using System; 4 | using System.Collections.Generic; 5 | using Microsoft.EntityFrameworkCore; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace ChilliCoreTemplate.Data 11 | { 12 | public partial class DataContext : DbContext 13 | { 14 | public DbSet Locations { get; set; } 15 | public DbSet LocationUsers { get; set; } 16 | 17 | //public DbSet Payouts { get; set; } 18 | public DbSet Payments { get; set; } 19 | 20 | private void Project_OnModelCreating(ModelBuilder modelBuilder) 21 | { 22 | modelBuilder.Entity() 23 | .HasIndex(nameof(LocationUser.LocationId), nameof(LocationUser.UserId)) 24 | .IsUnique(); 25 | } 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/EmailAccount/DataContext.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Data.EmailAccount; 2 | using System; 3 | using System.Collections.Generic; 4 | using Microsoft.EntityFrameworkCore; 5 | 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace ChilliCoreTemplate.Data 11 | { 12 | public partial class DataContext 13 | { 14 | public DbSet Users { get; set; } 15 | public DbSet UserRoles { get; set; } 16 | public DbSet UserSessions { get; set; } 17 | public DbSet UserTokens { get; set; } 18 | public DbSet UserDevices { get; set; } 19 | public DbSet UserOAuths { get; set; } 20 | 21 | public DbSet UserActivities { get; set; } 22 | public DbSet Emails { get; set; } 23 | public DbSet EmailUsers { get; set; } 24 | public DbSet SmsQueue { get; set; } 25 | public DbSet PushNotifications { get; set; } 26 | 27 | public DbSet Companies { get; set; } 28 | 29 | public DbSet ErrorLogs { get; set; } 30 | 31 | public DbSet BulkImports { get; set; } 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/EmailAccount/ErrorLog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Text; 5 | 6 | namespace ChilliCoreTemplate.Data.EmailAccount 7 | { 8 | public class ErrorLog 9 | { 10 | public int Id { get; set; } 11 | 12 | public int? UserId { get; set; } 13 | public User User { get; set; } 14 | 15 | public string Message { get; set; } 16 | 17 | public string MessageTemplate { get; set; } 18 | 19 | [MaxLength(128)] 20 | public string Level { get; set; } 21 | 22 | public DateTime TimeStamp { get; set; } 23 | 24 | public string ExceptionMessage { get; set; } 25 | 26 | public string Exception { get; set; } 27 | 28 | public string LogEvent { get; set; } 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/EmailAccount/IExternalId.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace ChilliCoreTemplate.Data 4 | { 5 | public interface IExternalId 6 | { 7 | string ExternalId { get; set; } 8 | 9 | int? ExternalIdHash { get; set; } 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/EmailAccount/UserActivity.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models.EmailAccount; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel.DataAnnotations; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace ChilliCoreTemplate.Data.EmailAccount 10 | { 11 | public class UserActivity 12 | { 13 | [Key] 14 | public int Id { get; set; } 15 | 16 | [Required] 17 | public int UserId { get; set; } 18 | 19 | public virtual User User { get; set; } 20 | 21 | [Required] 22 | public ActivityType ActivityType { get; set; } 23 | 24 | [Required] 25 | public EntityType EntityType { get; set; } 26 | 27 | [Required] 28 | public int EntityId { get; set; } 29 | 30 | public int? TargetId { get; set; } 31 | 32 | [Required] 33 | public DateTime ActivityOn { get; set; } 34 | 35 | public string JsonData { get; set; } 36 | } 37 | 38 | } 39 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/EmailAccount/UserDevice.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models.Api; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel.DataAnnotations; 5 | using System.ComponentModel.DataAnnotations.Schema; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace ChilliCoreTemplate.Data.EmailAccount 11 | { 12 | public class UserDevice 13 | { 14 | public int Id { get; set; } 15 | 16 | [Required, StringLength(100)] 17 | public string DeviceId { get; set; } 18 | 19 | public virtual User User { get; set; } 20 | public int UserId { get; set; } 21 | 22 | [Required] 23 | public Guid PinToken { get; set; } 24 | 25 | [StringLength(200)] 26 | public string PinHash { get; set; } 27 | public int PinRetries { get; set; } 28 | public DateTime? PinLastRetryDate { get; set; } 29 | 30 | #region Push 31 | [StringLength(200)] 32 | public string PushToken { get; set; } 33 | 34 | [StringLength(500)] 35 | public string PushTokenId { get; set; } 36 | 37 | public PushNotificationProvider? PushProvider { get; set; } 38 | 39 | public PushNotificationAppId? PushAppId { get; set; } 40 | #endregion 41 | 42 | public virtual List UserSessions { get; set; } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/EmailAccount/UserSession.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Data.EmailAccount; 2 | using ChilliSource.Core.Extensions; 3 | using System; 4 | using System.ComponentModel.DataAnnotations; 5 | using System.ComponentModel.DataAnnotations.Schema; 6 | 7 | namespace ChilliCoreTemplate.Data 8 | { 9 | public class UserSession 10 | { 11 | public long Id { get; set; } 12 | 13 | public virtual User User { get; set; } 14 | public int UserId { get; set; } 15 | 16 | public virtual UserDevice UserDevice { get; set; } 17 | public int? UserDeviceId { get; set; } 18 | 19 | [Required] 20 | public Guid SessionId { get; set; } 21 | 22 | public DateTime SessionCreatedOn { get; set; } 23 | 24 | /// 25 | /// So session can be cleaned up if session is not explictly terminated (for devices no longer used) 26 | /// 27 | public DateTime SessionExpiryOn { get; set; } 28 | 29 | public string ImpersonationChain { get; set; } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/EmailAccount/UserToken.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using ChilliCoreTemplate.Models.EmailAccount; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel.DataAnnotations; 6 | using System.ComponentModel.DataAnnotations.Schema; 7 | using System.Linq; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | 11 | namespace ChilliCoreTemplate.Data.EmailAccount 12 | { 13 | public class UserToken 14 | { 15 | [Key] 16 | public int Id { get; set; } 17 | 18 | [Required] 19 | public int UserId { get; set; } 20 | public virtual User User { get; set; } 21 | 22 | [Required] 23 | public UserTokenType Type { get; set; } 24 | 25 | [Required] 26 | public Guid Token { get; set; } 27 | 28 | public DateTime? Expiry { get; set; } 29 | 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/Models/Location.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Data.EmailAccount; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.ComponentModel.DataAnnotations; 5 | using System.Text; 6 | 7 | namespace ChilliCoreTemplate.Data 8 | { 9 | public class Location 10 | { 11 | public int Id { get; set; } 12 | 13 | public int CompanyId { get; set; } 14 | public Company Company { get; set; } 15 | 16 | public List Users { get; set; } 17 | 18 | [MaxLength(50)] 19 | public string Name { get; set; } 20 | 21 | [MaxLength(1000)] 22 | public string Description { get; set; } 23 | 24 | [MaxLength(50)] 25 | public string Timezone { get; set; } 26 | 27 | public bool IsActive { get; set; } 28 | 29 | public DateTime CreatedOn { get; set; } 30 | 31 | public DateTime UpdatedOn { get; set; } 32 | 33 | } 34 | 35 | public class LocationUser 36 | { 37 | public int Id { get; set; } 38 | 39 | public int LocationId { get; set; } 40 | public Location Location { get; set; } 41 | 42 | public int UserId { get; set; } 43 | public User User { get; set; } 44 | 45 | public DateTime CreatedOn { get; set; } 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/Models/Payment.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Data.EmailAccount; 2 | using System; 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | namespace ChilliCoreTemplate.Data 6 | { 7 | public class Payment 8 | { 9 | public int Id { get; set; } 10 | 11 | public int CompanyId { get; set; } 12 | public Company Company { get; set; } 13 | 14 | public decimal Amount { get; set; } 15 | 16 | [MaxLength(200)] 17 | public string Description { get; set; } 18 | 19 | [MaxLength(200)] 20 | public string ChargeId { get; set; } 21 | 22 | public DateTime PaidOn { get; set; } 23 | 24 | [MaxLength(50)] 25 | public string EventId { get; set; } 26 | 27 | [MaxLength(200)] 28 | public string ReceiptUrl { get; set; } 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/Models/Payout.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Data.EmailAccount; 2 | using System; 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | namespace ChilliCoreTemplate.Data 6 | { 7 | public class Payout 8 | { 9 | public int Id { get; set; } 10 | 11 | public int CompanyId { get; set; } 12 | public Company Company { get; set; } 13 | 14 | [StringLength(50)] 15 | public string PayoutId { get; set; } 16 | 17 | public decimal Amount { get; set; } 18 | 19 | public DateTime PaidOn { get; set; } 20 | 21 | public DateTime CreatedOn { get; set; } 22 | 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/Webhook/DataContext.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | 3 | namespace ChilliCoreTemplate.Data 4 | { 5 | public partial class DataContext 6 | { 7 | public DbSet Webhooks_Inbound { get; set; } 8 | 9 | //public DbSet Webhooks_Outbound { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Data/Webhook/Webhook_Inbound.cs: -------------------------------------------------------------------------------- 1 | 2 | using ChilliCoreTemplate.Models.Api; 3 | using System; 4 | using System.ComponentModel.DataAnnotations; 5 | using System.ComponentModel.DataAnnotations.Schema; 6 | 7 | namespace ChilliCoreTemplate.Data 8 | { 9 | [Table("Webhooks_Inbound")] 10 | public class Webhook_Inbound 11 | { 12 | public int Id { get; set; } 13 | 14 | [StringLength(100)] 15 | public string WebhookId { get; set; } 16 | 17 | public int WebhookIdHash { get; set; } 18 | 19 | public WebhookType Type { get; set; } 20 | 21 | [StringLength(100)] 22 | public string Subtype { get; set; } 23 | 24 | public string Raw { get; set; } 25 | 26 | public string Error { get; set; } 27 | 28 | public bool Success { get; set; } 29 | 30 | public bool Processed { get; set; } 31 | 32 | public DateTime Timestamp { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.IntegrationTests/Helpers/TestServerFixture.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Hosting; 2 | using Microsoft.AspNetCore.Mvc.Testing; 3 | using Microsoft.Extensions.DependencyInjection; 4 | 5 | namespace ChilliCoreTemplate.IntegrationTests.Helpers 6 | { 7 | public class TestServerFixture : WebApplicationFactory where T : class 8 | { 9 | public TService GetRequiredService() 10 | { 11 | if (Server == null) 12 | { 13 | CreateDefaultClient(); 14 | } 15 | 16 | return Server.Host.Services.GetRequiredService(); 17 | } 18 | 19 | protected override IWebHostBuilder CreateWebHostBuilder() 20 | { 21 | var hostBuilder = new WebHostBuilder(); 22 | return hostBuilder.UseStartup(); 23 | } 24 | 25 | // uncomment if your test project isn't in a child folder of the .sln file 26 | // protected override void ConfigureWebHost(IWebHostBuilder builder) 27 | // { 28 | // builder.UseSolutionRelativeContentRoot("relative/path/to/test/project"); 29 | // } 30 | } 31 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.IntegrationTests/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:49295/", 7 | "sslPort": 0 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | } 17 | }, 18 | "ChilliCoreTemplate.IntegrationTests": { 19 | "commandName": "Project", 20 | "launchBrowser": true, 21 | "environmentVariables": { 22 | "ASPNETCORE_ENVIRONMENT": "Development" 23 | }, 24 | "applicationUrl": "http://localhost:49296/" 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.IntegrationTests/TestHelper.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using Microsoft.Extensions.Configuration; 3 | using System; 4 | using System.IO; 5 | using System.Linq; 6 | 7 | namespace ChilliCoreTemplate.IntegrationTests 8 | { 9 | public class TestHelper 10 | { 11 | public static IConfigurationRoot GetConfigurationRoot(string outputPath) 12 | { 13 | return new ConfigurationBuilder() 14 | .SetBasePath(outputPath) 15 | .AddJsonFile("appsettings.json", optional: true) 16 | .Build(); 17 | } 18 | 19 | public static ProjectSettings GetProjectConfiguration(string outputPath) 20 | { 21 | var configRoot = GetConfigurationRoot(outputPath); 22 | return new ProjectSettings(configRoot); 23 | } 24 | 25 | public static string GetTestFolder() 26 | { 27 | var startupPath = AppContext.BaseDirectory; 28 | var pathItems = startupPath.Split(Path.DirectorySeparatorChar); 29 | var pos = pathItems.Reverse().ToList().FindIndex(x => string.Equals("bin", x)); 30 | var projectPath = String.Join(Path.DirectorySeparatorChar.ToString(), pathItems.Take(pathItems.Length - pos - 1)); 31 | return projectPath; 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.IntegrationTests/TestViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace ChilliCoreTemplate.IntegrationTests 2 | { 3 | public class TestViewModel 4 | { 5 | public string Subject { get; set; } 6 | 7 | public string Name { get; set; } 8 | 9 | public string Description { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.IntegrationTests/Views/Emails/EmailAccounts/NestedTemplate.cshtml: -------------------------------------------------------------------------------- 1 | @model ChilliCoreTemplate.IntegrationTests.TestViewModel 2 | 3 | @{ 4 | Layout = null; 5 | } 6 | 7 | 8 | 9 | 10 | 11 | @Model.Subject 12 | 13 | 14 |
15 | @Model.Name 16 | @Model.Description 17 |
18 | 19 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.IntegrationTests/Views/TestGenericInterfaceClassView.cshtml: -------------------------------------------------------------------------------- 1 | @model ChilliCoreTemplate.Models.EmailAccount.RazorTemplateDataModel 2 | 3 | @{ 4 | Layout = null; 5 | } 6 | 7 | 8 | 9 | 10 | 11 | @Model.Site 12 | 13 | 14 |
15 |
16 | 17 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.IntegrationTests/Views/TestView.cshtml: -------------------------------------------------------------------------------- 1 | @model System.String 2 | @{ 3 | Layout = null; 4 | } 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | @Model 15 |
16 | 17 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.IntegrationTests/Views/TestView2.cshtml: -------------------------------------------------------------------------------- 1 | @model ChilliCoreTemplate.IntegrationTests.TestViewModel 2 | 3 | @{ 4 | Layout = null; 5 | } 6 | 7 | 8 | 9 | 10 | 11 | @Model.Subject 12 | 13 | 14 |
15 | @Model.Name 16 | @Model.Description 17 |
18 | 19 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Admin/ChangeAccountModels.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc.Rendering; 2 | using System.ComponentModel; 3 | using System.ComponentModel.DataAnnotations; 4 | 5 | namespace ChilliCoreTemplate.Models.Admin 6 | { 7 | public class ChangeAccountRoleModel 8 | { 9 | [Required] 10 | public int Id { get; set; } 11 | 12 | [Required] 13 | public Role? Role { get; set; } 14 | 15 | public SelectList RoleList { get; set; } 16 | 17 | [DisplayName("Company")] 18 | public int? CompanyId { get; set; } 19 | } 20 | 21 | public class ChangeUserStatusModel 22 | { 23 | [Required] 24 | public int Id { get; set; } 25 | 26 | [Required] 27 | public UserStatus Status { get; set; } 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Admin/ChartDataVM.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Models.Admin 8 | { 9 | public class ChartDataVM 10 | { 11 | public string Name { get; set; } 12 | public int AvgLastTenFiles { get; set; } 13 | public List LastSixMonths { get; set; } 14 | public List LastSixWeeks { get; set; } 15 | } 16 | 17 | 18 | public class ChartVM 19 | { 20 | public string ChartKey { get; set; } 21 | public int? CountTotal { get; set; } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Admin/StatisticsModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Models.Admin 8 | { 9 | public class StatisticsModel 10 | { 11 | public List StatisticsRow1 { get; set; } 12 | 13 | public List StatisticsRow2 { get; set; } 14 | } 15 | 16 | public class StatisticModel 17 | { 18 | public string Title { get; set; } 19 | 20 | public string PeriodLabel { get; set; } 21 | 22 | public string LabelType { get; set; } 23 | 24 | public int Total { get; set; } 25 | 26 | public int PercentageChange { get; set; } 27 | 28 | public List Data { get; set; } 29 | 30 | public List Labels { get; set; } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Api/Base/DevicePinApiModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel.DataAnnotations; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace ChilliCoreTemplate.Models.Api 9 | { 10 | public class PersistDevicePinApiModel 11 | { 12 | [Required, MinLength(4), MaxLength(4)] 13 | public string Pin { get; set; } 14 | 15 | [Required, StringLength(100)] 16 | public string DeviceId { get; set; } 17 | } 18 | 19 | public class DevicePinResponseApiModel 20 | { 21 | public string PinToken { get; set; } 22 | } 23 | 24 | public class PinLoginPinApiModel 25 | { 26 | [Required, StringLength(200)] 27 | public string PinToken { get; set; } 28 | 29 | [Required, MinLength(4), MaxLength(4)] 30 | public string Pin { get; set; } 31 | 32 | [Required, StringLength(100)] 33 | public string DeviceId { get; set; } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Api/Library/ApiMessageResult.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Models.Api 8 | { 9 | public class ApiMessageResult 10 | { 11 | public string Title { get; set; } 12 | public string Message { get; set; } 13 | 14 | public static ApiMessageResult OK 15 | { 16 | get 17 | { 18 | return new ApiMessageResult() { Title = "OK", Message = "OK" }; 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Api/Library/ApiPagedList.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using ChilliSource.Cloud.Core; 4 | 5 | namespace ChilliCoreTemplate.Service 6 | { 7 | public class ApiPagedList 8 | { 9 | public ApiPagedList() { } 10 | 11 | public static ApiPagedList CreateFrom(PagedList list) 12 | { 13 | return new ApiPagedList() 14 | { 15 | CurrentPage = list.CurrentPage, 16 | PageCount = list.PageCount, 17 | PageSize = list.PageSize, 18 | TotalCount = list.TotalCount, 19 | Data = list 20 | }; 21 | } 22 | 23 | public int CurrentPage { get; set; } 24 | public int PageCount { get; set; } 25 | public int PageSize { get; set; } 26 | public int TotalCount { get; set; } 27 | public int? PagingMaxId { get; set; } 28 | public List Data { get; set; } 29 | } 30 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Api/Library/ApiResourceReferenceAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Models.Api 8 | { 9 | public class ApiResourceReferenceAttribute : Attribute 10 | { 11 | public ApiResourceReferenceAttribute(string version, string resourceName) 12 | { 13 | this.Version = version; 14 | this.ResourceName = resourceName; 15 | } 16 | 17 | public string ResourceName { get; set; } 18 | 19 | public string Version { get; set; } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Api/Library/IInterceptApiModel.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace ChilliCoreTemplate.Models.Api 9 | { 10 | public interface IInterceptApiModel 11 | { 12 | [JsonIgnore] 13 | List PopulatedMembers { get; set; } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Api/Library/WebhookModels.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace ChilliCoreTemplate.Models.Api 5 | { 6 | public class WebhookApiModel 7 | { 8 | public int Id { get; set; } 9 | 10 | public WebhookEvent Event { get; set; } 11 | 12 | [StringLength(100)] 13 | public string Target_Url { get; set; } 14 | 15 | public Guid ApiKey { get; set; } 16 | } 17 | 18 | public enum WebhookEvent 19 | { 20 | Dog_Created = 1, 21 | Cat_Created, 22 | Cat_FirstBirthday, 23 | Cat_Cleaned 24 | } 25 | 26 | public enum WebhookType 27 | { 28 | Stripe = 1, 29 | Sns, 30 | Twilio 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/ChilliCoreTemplate.Models.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net6.0 5 | Debug;Release;Staging;Develop 6 | 7 | 8 | 9 | full 10 | true 11 | true 12 | 13 | 14 | 15 | 1591; 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Common/Constants.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Models 8 | { 9 | public static class Constants 10 | { 11 | public const string UrlErrorMessage = "The {0} field is not a valid URL. Ensure you have prefixed the link with http:// or https://"; 12 | 13 | public const string DefaultCountry = "AU"; 14 | 15 | public const string DefaultTimezone = "Australia/Sydney"; 16 | 17 | public const string AllowedGraphicExtensions = "jpg, jpeg, png, gif"; 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Common/DataLinkModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace Amdi.Models 8 | { 9 | public class DataLinkModel 10 | { 11 | public int Id { get; set; } 12 | public string Name { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Common/FileStorageHelpers.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace Yodel.Models 9 | { 10 | public static class MyFileStorageHelper 11 | { 12 | private static string __secret = "TODO_XXXXXXXXXX"; 13 | private static string salt = "TODO_XXXXXXXXXX"; 14 | 15 | public static StorageEncryptionOptions GetEncryption(string filename) 16 | { 17 | return new StorageEncryptionOptions(__secret + filename, salt); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Common/MediaTypeNames.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Net.Mime; 4 | using System.Text; 5 | 6 | namespace ChilliCoreTemplate.Models 7 | { 8 | //System.Net.Mime.MediaTypeNames 9 | public static class MyMediaTypeNames 10 | { 11 | public static class Text 12 | { 13 | public static string Csv = "text/csv"; 14 | } 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Common/MyServer.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Text; 5 | 6 | namespace ChilliCoreTemplate.Models 7 | { 8 | 9 | public static class MyServer 10 | { 11 | public static string MapPath(string path) 12 | { 13 | return Path.Combine((string)AppDomain.CurrentDomain.GetData("ContentRootPath"), path); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Common/PdfModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Models 8 | { 9 | public class PdfModel 10 | { 11 | public string Filename { get; set; } 12 | 13 | public byte[] PdfData { get; set; } 14 | 15 | public string Html { get; set; } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Common/Select2QueryModel.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Service; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | 7 | namespace ChilliCoreTemplate.Models 8 | { 9 | public class Select2QueryModel 10 | { 11 | public Select2QueryModel(ApiPagedList list, Func selector) 12 | { 13 | results = list.Data.Select(x => selector(x)).ToList(); 14 | pagination = new Select2QueryPagination { more = list.PageCount > list.CurrentPage }; 15 | } 16 | 17 | public List results { get; set; } 18 | 19 | public Select2QueryPagination pagination { get; set; } 20 | } 21 | 22 | public class Select2QueryPagination 23 | { 24 | public bool more { get; set; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/EmailAccount/IPrincipalExtensions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; using ChilliSource.Cloud.Web.MVC; 2 | using ChilliCoreTemplate.Models.EmailAccount; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Security.Principal; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace ChilliCoreTemplate.Models 11 | { 12 | public static partial class IPrincipalExtensions 13 | { 14 | public static bool IsAuthenticated(this IPrincipal principal) 15 | { 16 | return principal?.Identity?.IsAuthenticated == true; 17 | } 18 | 19 | public static UserData UserData(this IPrincipal principal) 20 | { 21 | return principal.Session()?.UserData; 22 | } 23 | 24 | public static UserDataPrincipal Session(this IPrincipal principal) 25 | { 26 | if (principal is UserDataPrincipal) return principal as UserDataPrincipal; 27 | 28 | return null; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/EmailAccount/PushNotificationModels.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models.Api; 2 | using ChilliSource.Cloud.Core; 3 | using ChilliSource.Core.Extensions; 4 | using Newtonsoft.Json; 5 | using System; 6 | 7 | namespace ChilliCoreTemplate.Models.EmailAccount 8 | { 9 | public class PushNotificationSummaryModel 10 | { 11 | public int Id { get; set; } 12 | 13 | public string Type { get; set; } 14 | [JsonIgnore] 15 | public PushNotificationType _Type { get; set; } 16 | 17 | public string Recipient { get; set; } 18 | 19 | public DateTime CreatedOn { get; set; } 20 | 21 | public string CreatedOnDisplay { get { return CreatedOn.ToTimezone("Australia/Sydney").ToIsoDateTime(); } } 22 | 23 | public string Status { get; set; } 24 | 25 | public bool IsSent { get; set; } 26 | 27 | public bool IsOpened { get; set; } 28 | 29 | public string Error { get; set; } 30 | 31 | } 32 | 33 | public class PushNotificationDetailModel 34 | { 35 | public int Id { get; set; } 36 | 37 | public string Message { get; set; } 38 | 39 | public string MessageId { get; set; } 40 | 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/IMvcActionDefinition.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Html; 2 | using Microsoft.AspNetCore.Mvc; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Text; 6 | 7 | namespace ChilliCoreTemplate.Models 8 | { 9 | public interface IMvcActionDefinition 10 | { 11 | IMvcActionDefinition AddRouteValues(object values); 12 | IMvcActionDefinition AddRouteId(int id); 13 | IReadOnlyDictionary GetRouteValueDictionary(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/IMvcRouterAccessor.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Routing; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace ChilliCoreTemplate.Models 7 | { 8 | public interface IMvcRouterAccessor 9 | { 10 | IRouter Router { get; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Models/RazorTemplate.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace ChilliCoreTemplate.Models 6 | { 7 | public class RazorTemplate 8 | 9 | { 10 | private readonly string _subject; 11 | 12 | 13 | public RazorTemplate(string templateName) : this(templateName, "") 14 | { 15 | 16 | } 17 | 18 | 19 | public RazorTemplate(string templateName, string subject) 20 | { 21 | TemplateName = templateName; 22 | _subject = subject; 23 | } 24 | 25 | /// 26 | /// name of the view template 27 | /// 28 | /// 29 | /// TemplateName = "Test" 30 | /// where template view are located in ~/Views/Test.cshtml 31 | /// 32 | /// 33 | /// View locations are searched: 34 | /// ~/Views/..... 35 | /// ~/View/Shared/..... 36 | /// ~/Layout/..... 37 | /// 38 | public string TemplateName { get; } 39 | public string Subject { get; } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/RemoteStorageMiddlewareOptions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace ChilliCoreTemplate.Models 6 | { 7 | public class RemoteStorageMiddlewareOptions 8 | { 9 | public RemoteStorageMiddlewareOptions() 10 | { 11 | this.AllowedExtensions = new List(); 12 | } 13 | 14 | public string UrlPrefix { get; set; } 15 | 16 | public IList AllowedExtensions { get; private set; } 17 | 18 | public string DefaultCacheControl { get; set; } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Stripe/StripeConfigurationSection.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Extensions.Configuration; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace ChilliCoreTemplate.Models.Stripe 7 | { 8 | public class StripeConfigurationSection 9 | { 10 | private readonly IConfigurationSection _section; 11 | 12 | public StripeConfigurationSection(IConfigurationSection section) 13 | { 14 | _section = section; 15 | } 16 | 17 | /// 18 | /// Gets the public api key value. 19 | /// 20 | public string PublicApiKey => _section.GetString("PublicApiKey"); 21 | 22 | /// 23 | /// Gets the secret api key value. 24 | /// 25 | public string SecretApiKey => _section.GetString("SecretApiKey"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Stripe/StripeCustomerModels.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace ChilliCoreTemplate.Models.Stripe 7 | { 8 | public class StripeCustomerEditModel 9 | { 10 | public string Id { get; set; } 11 | 12 | public string Email { get; set; } 13 | 14 | public string Description { get; set; } 15 | 16 | public string Token { get; set; } 17 | 18 | public string Card { get; set; } 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Models/Stripe/StripePayoutModels.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | 6 | namespace ChilliCoreTemplate.Models.Stripe 7 | { 8 | public class StripePayoutDetail 9 | { 10 | public StripePayoutDetail() 11 | { 12 | Transfers = new List(); 13 | } 14 | 15 | public string Id { get; set; } 16 | 17 | public string UserId { get; set; } 18 | 19 | public decimal Amount { get; set; } 20 | 21 | public string Currency { get; set; } 22 | 23 | public DateTime PaidOn { get; set; } 24 | 25 | public List Transfers { get; set; } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Api/Base/BaseApiService.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Data; 2 | using ChilliCoreTemplate.Models; 3 | using ChilliSource.Cloud.Core; 4 | using Microsoft.AspNetCore.Hosting; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq; 8 | using System.Security.Principal; 9 | using System.Text; 10 | using System.Threading.Tasks; 11 | 12 | namespace ChilliCoreTemplate.Service.Api 13 | { 14 | public abstract class BaseApiService : Service 15 | { 16 | protected readonly ProjectSettings _config; 17 | protected readonly IFileStorage _fileStorage; 18 | protected readonly IWebHostEnvironment _environment; 19 | 20 | protected bool IsInRole(Role role) => User.UserData() != null && User.UserData().IsInRole(role); 21 | 22 | public BaseApiService(IPrincipal user, DataContext context, ProjectSettings config, IFileStorage fileStorage, IWebHostEnvironment environment) : base(user, context) 23 | { 24 | _config = config; 25 | _fileStorage = fileStorage; 26 | _environment = environment; 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Api/MyApiService.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Service.Api 8 | { 9 | public partial class ApiServices 10 | { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Api/Webhook/WebhookServiceConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Configuration; 2 | 3 | namespace ChilliCoreTemplate.Service 4 | { 5 | public class WebhookServiceConfiguration : ConfigurationSection 6 | { 7 | public static WebhookServiceConfiguration GetConfig() 8 | { 9 | var config = (WebhookServiceConfiguration)System.Configuration.ConfigurationManager.GetSection("webhook"); 10 | return config; 11 | } 12 | 13 | [ConfigurationProperty("enabled", IsRequired = true)] 14 | public bool Enabled 15 | { 16 | get 17 | { 18 | return (bool)this["enabled"]; 19 | } 20 | set 21 | { 22 | this["enabled"] = value; 23 | } 24 | } 25 | 26 | /// 27 | /// Overrride used when not subscribing/unsubscribing to webhooks 28 | /// 29 | [ConfigurationProperty("targetURL", IsRequired = false)] 30 | public string TargetURL 31 | { 32 | get 33 | { 34 | return (string)this["targetURL"]; 35 | } 36 | set 37 | { 38 | this["targetURL"] = value; 39 | } 40 | } 41 | 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/ChilliCoreTemplate.Service_BASE_9072.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netcoreapp2.2 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/ChilliCoreTemplate.Service_LOCAL_9072.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netcoreapp2.2 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/ChilliCoreTemplate.Service_REMOTE_9072.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | netcoreapp2.2 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/DateTimeExtensions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace ChilliCoreTemplate.Service 9 | { 10 | public static class DateTimeExtensions 11 | { 12 | /// 13 | /// Converts the value of specified date from user time zone to server time zone. (Used to Convert user entered date to server time zone, so data is stored in server time). 14 | /// 15 | /// The specified date. 16 | /// The specified user time zone. 17 | /// The specified server time zone. 18 | /// A value of specified date in specified server time zone. 19 | public static DateTime FromUserTimezone(this DateTime value, string userTimeZone = "Australia/Sydney", string serverTimezone = "UTC") 20 | { 21 | //TODO get values from web.config 22 | return value.ToTimezone(serverTimezone, userTimeZone); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Library/IQueryableExtensions.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Data; 2 | using ChilliCoreTemplate.Models; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Text; 7 | 8 | namespace ChilliCoreTemplate.Service 9 | { 10 | public static class IQueryableExtensions 11 | { 12 | public static IQueryable HasExternalId(this IQueryable item, string externalId) where T : class, IExternalId 13 | { 14 | var hash = CommonLibrary.CalculateHash(externalId); 15 | return item.Where(x => x.ExternalIdHash == hash && x.ExternalId == externalId); 16 | } 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Library/MaterializerExtension.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models.Api; 2 | using ChilliSource.Cloud.Core.LinqMapper; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Text; 6 | 7 | namespace ChilliCoreTemplate.Service 8 | { 9 | public static class MaterializerExtension 10 | { 11 | public static ApiPagedList ToPagedList(this IQueryMaterializer materializer, ApiPaging apiPaging, bool previousPageIfEmpty = false) 12 | { 13 | var result = materializer.ToPagedList(apiPaging.PageNumber.Value, apiPaging.PageSize.Value, previousPageIfEmpty); 14 | return ApiPagedList.CreateFrom(result); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/RazorTemplates.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using ChilliCoreTemplate.Models.EmailAccount; 3 | using ChilliCoreTemplate.Service.EmailAccount; 4 | using ChilliSource.Core.Extensions; 5 | using System; 6 | using System.Collections.Generic; 7 | using System.Linq; 8 | using System.Text; 9 | using System.Threading.Tasks; 10 | 11 | namespace ChilliCoreTemplate.Service 12 | { 13 | public partial class RazorTemplates 14 | { 15 | public static RazorTemplate PdfExample = new RazorTemplate("Pdfs/Example"); 16 | 17 | public static RazorTemplate Company_SubscriptionCreated = new RazorTemplate("Emails/Company/SubscriptionCreated"); 18 | public static RazorTemplate Company_PaymentInvoiceFailed = new RazorTemplate("Emails/Company/PaymentInvoiceFailed"); 19 | } 20 | 21 | public static class RazorTemplateExtensions 22 | { 23 | public static void QueueMail(this RazorTemplate template, AccountService service, string email, IEmailTemplateDataModel model, IEnumerable attachments = null, EmailData_Address replyTo = null, EmailData_Address from = null, List bcc = null) 24 | { 25 | service.QueueMail(template, email, model, attachments, replyTo, from, bcc); 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/ScopeContextFactory.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | 5 | namespace ChilliCoreTemplate.Service 6 | { 7 | public static class ScopeContextFactory 8 | { 9 | public static IServiceProvider Instance { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Services/BaseService.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using Microsoft.AspNetCore.Hosting; 3 | using ChilliCoreTemplate.Data; 4 | using ChilliCoreTemplate.Models; 5 | using System.Security.Principal; 6 | 7 | namespace ChilliCoreTemplate.Service 8 | { 9 | public abstract class BaseService : Service 10 | { 11 | protected readonly IFileStorage _fileStorage; 12 | protected readonly ProjectSettings _config; 13 | protected readonly IWebHostEnvironment _environment; 14 | 15 | protected int? UserId { get { return User.UserData() == null ? null : (int?)User.UserData().UserId; } } 16 | 17 | protected int? CompanyId { get { return User.UserData() == null ? null : (int?)User.UserData().CompanyId; } } 18 | 19 | protected bool IsInRole(Role role) => User.UserData() != null && User.UserData().IsInRole(role); 20 | 21 | public BaseService(IPrincipal user, DataContext context, ProjectSettings config, IFileStorage fileStorage, IWebHostEnvironment environment) : base(user, context) 22 | { 23 | _config = config; 24 | _fileStorage = fileStorage; 25 | _environment = environment; 26 | } 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Services/Services.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using ChilliCoreTemplate.Data; 3 | using ChilliCoreTemplate.Models; 4 | using ChilliCoreTemplate.Service.EmailAccount; 5 | using System; 6 | using System.Security.Principal; 7 | using Microsoft.AspNetCore.Hosting; 8 | 9 | namespace ChilliCoreTemplate.Service 10 | { 11 | public partial class Services : Service 12 | { 13 | private readonly IFileStorage _fileStorage; 14 | private readonly AccountService _accountService; 15 | private readonly StripeService _stripe; 16 | private readonly ProjectSettings _config; 17 | private readonly IWebHostEnvironment _environment; 18 | 19 | public Services(IPrincipal user, DataContext context, IFileStorage fileStorage, AccountService accountService, StripeService stripe, ProjectSettings config, IWebHostEnvironment environment) : base(user, context) 20 | { 21 | _fileStorage = fileStorage; 22 | _accountService = accountService; 23 | _stripe = stripe; 24 | _config = config; 25 | _environment = environment; 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Services/ServicesLibrary.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using RestSharp; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Net; 6 | using System.Text; 7 | using System.Linq; 8 | 9 | namespace ChilliCoreTemplate.Service 10 | { 11 | public static class ServicesLibrary 12 | { 13 | 14 | public static string GetError(this RestResponse response) 15 | { 16 | if (!String.IsNullOrEmpty(response.ErrorMessage)) return response.ErrorMessage; 17 | return response.StatusDescription; 18 | } 19 | 20 | public static ServiceResult AsError(string error, string key) 21 | { 22 | return new ServiceResult() { Success = false, Result = default(T), Error = error, Key = key, StatusCode = HttpStatusCode.BadRequest }; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Stripe/StripeEventService.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using Stripe; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Runtime.CompilerServices; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | 10 | namespace ChilliCoreTemplate.Service 11 | { 12 | public partial class StripeService 13 | { 14 | public ServiceResult Person_Get(string personId, string accountId, PersonGetOptions options = null) 15 | { 16 | try 17 | { 18 | var service = new PersonService(_client); 19 | var response = service.Get(accountId, personId, options: options); 20 | return ServiceResult.AsSuccess(response); 21 | } 22 | catch (Exception ex) 23 | { 24 | if (!(ex is StripeException)) 25 | { 26 | ex.LogException(); 27 | } 28 | return ServiceResult.AsError(ex.Message); 29 | } 30 | } 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Stripe/StripeFileServices.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using Stripe; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Text; 6 | 7 | namespace ChilliCoreTemplate.Service 8 | { 9 | public partial class StripeService 10 | { 11 | 12 | public ServiceResult File_Create(FileCreateOptions options, string accountId = null) 13 | { 14 | try 15 | { 16 | var service = new FileService(_client); 17 | var result = service.Create(options, CreateRequestOptions(accountId)); 18 | return ServiceResult.AsSuccess(result.Id); 19 | } 20 | catch (Exception ex) 21 | { 22 | if (!(ex is StripeException)) 23 | { 24 | ex.LogException(); 25 | } 26 | return ServiceResult.AsError(error: ex.Message); 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Stripe/StripePaymentIntentService.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using Stripe; 3 | using System; 4 | 5 | namespace ChilliCoreTemplate.Service 6 | { 7 | public partial class StripeService 8 | { 9 | 10 | public ServiceResult PaymentIntent_Create(PaymentIntentCreateOptions options) 11 | { 12 | try 13 | { 14 | var service = new PaymentIntentService(_client); 15 | var response = service.Create(options); 16 | return ServiceResult.AsSuccess(response); 17 | } 18 | catch (Exception ex) 19 | { 20 | if (!(ex is StripeException)) 21 | { 22 | ex.LogException(); 23 | } 24 | return ServiceResult.AsError(ex.Message); 25 | } 26 | } 27 | 28 | 29 | 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Stripe/StripePersonService.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using Stripe; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Text; 7 | using System.Threading.Tasks; 8 | 9 | namespace ChilliCoreTemplate.Service 10 | { 11 | public partial class StripeService 12 | { 13 | public ServiceResult Event_Get(Event model, EventGetOptions options = null) 14 | { 15 | try 16 | { 17 | var service = new EventService(_client); 18 | var response = service.Get(model.Id, options: options, requestOptions: CreateRequestOptions(model.Account)); 19 | return ServiceResult.AsSuccess(response); 20 | } 21 | catch (Exception ex) 22 | { 23 | if (!(ex is StripeException)) 24 | { 25 | ex.LogException(); 26 | } 27 | return ServiceResult.AsError(ex.Message); 28 | } 29 | } 30 | 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Stripe/StripeService.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using Microsoft.Extensions.Caching.Memory; 3 | using Stripe; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Text; 7 | 8 | namespace ChilliCoreTemplate.Service 9 | { 10 | public partial class StripeService : IService 11 | { 12 | 13 | private readonly ProjectSettings _config; 14 | private readonly StripeClient _client; 15 | private readonly IMemoryCache _cache; 16 | 17 | internal const string TRANSACTIONID = "TransactionId"; 18 | 19 | public StripeService(ProjectSettings config, IMemoryCache memoryCache) 20 | { 21 | _config = config; 22 | if (!String.IsNullOrEmpty(config.StripeSettings.SecretApiKey)) _client = new StripeClient(config.StripeSettings.SecretApiKey); 23 | _cache = memoryCache; 24 | } 25 | 26 | private RequestOptions CreateRequestOptions(string accountId) 27 | { 28 | return accountId == null ? null : new RequestOptions { StripeAccount = accountId }; 29 | } 30 | 31 | 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Service/Stripe/StripeWebhookService.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using Stripe; 3 | using System; 4 | 5 | namespace ChilliCoreTemplate.Service 6 | { 7 | public partial class StripeService 8 | { 9 | public ServiceResult Webhook_Create(WebhookEndpointCreateOptions options) 10 | { 11 | try 12 | { 13 | var service = new WebhookEndpointService(_client); 14 | var response = service.Create(options); 15 | return ServiceResult.AsSuccess(response); 16 | } 17 | catch (Exception ex) 18 | { 19 | if (!(ex is StripeException)) 20 | { 21 | ex.LogException(); 22 | } 23 | return ServiceResult.AsError(ex.Message); 24 | } 25 | } 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Tests/TestHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Linq; 4 | using ChilliCoreTemplate.Models; 5 | using Microsoft.DotNet.PlatformAbstractions; 6 | using Microsoft.Extensions.Configuration; 7 | 8 | namespace ChilliCoreTemplate.Tests 9 | { 10 | public class TestHelper 11 | { 12 | public static IConfigurationRoot GetConfigurationRoot(string outputPath) 13 | { 14 | return new ConfigurationBuilder() 15 | .SetBasePath(outputPath) 16 | .AddJsonFile("appsettings.json", optional: true) 17 | .Build(); 18 | } 19 | 20 | public static ProjectSettings GetProjectConfiguration(string outputPath) 21 | { 22 | var configRoot = GetConfigurationRoot(outputPath); 23 | return new ProjectSettings(configRoot); 24 | } 25 | 26 | public static string GetTestFolder() 27 | { 28 | var startupPath = ApplicationEnvironment.ApplicationBasePath; 29 | var pathItems = startupPath.Split(Path.DirectorySeparatorChar); 30 | var pos = pathItems.Reverse().ToList().FindIndex(x => string.Equals("bin", x)); 31 | var projectPath = String.Join(Path.DirectorySeparatorChar.ToString(), pathItems.Take(pathItems.Length - pos - 1)); 32 | return projectPath; 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Tests/test.txt: -------------------------------------------------------------------------------- 1 | test1324w24 -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Api/Controllers/Users/DevicePinsController.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models.Api; 2 | using ChilliCoreTemplate.Service.Api; 3 | using Microsoft.AspNetCore.Mvc; 4 | using Microsoft.AspNetCore.Http; 5 | 6 | namespace ChilliCoreTemplate.Web.Api 7 | { 8 | [Route("api/v1/[controller]")] 9 | [ProducesResponseType(typeof(ErrorResult), StatusCodes.Status400BadRequest)] 10 | [ProducesResponseType(typeof(ErrorResult), StatusCodes.Status404NotFound)] 11 | [ProducesResponseType(typeof(ErrorResult), StatusCodes.Status500InternalServerError)] 12 | [CustomAuthorize] 13 | public class DevicePinsController : ControllerBase 14 | { 15 | UserApiMobileService _svc; 16 | 17 | public DevicePinsController(UserApiMobileService svc) 18 | { 19 | _svc = svc; 20 | } 21 | 22 | [HttpPost("")] 23 | [ProducesResponseType(typeof(DevicePinResponseApiModel), StatusCodes.Status200OK)] 24 | public IActionResult Add(PersistDevicePinApiModel model) 25 | { 26 | return this.ApiServiceCall(() => _svc.SaveDevicePin(model)).Call(); 27 | } 28 | 29 | [HttpDelete("")] 30 | public IActionResult Delete() 31 | { 32 | _svc.DeleteDevicePin(); 33 | 34 | return this.Ok(null); 35 | } 36 | } 37 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Api/Controllers/Webhook/StripeWebhookController.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models.Api; 2 | using ChilliSource.Core.Extensions; 3 | using Microsoft.AspNetCore.Mvc; 4 | using System; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Web.Api 8 | { 9 | public partial class WebhooksController 10 | { 11 | [ApiKeyIgnore] 12 | [HttpPost] 13 | [Route("stripe")] 14 | public IActionResult Stripe([FromBody]object json) 15 | { 16 | var result = _service.QueueWebhook(WebhookType.Stripe, json.ToJson()); 17 | return Ok(result.Error); 18 | } 19 | 20 | [ApiKeyIgnore] 21 | [HttpPost] 22 | [Route("stripecreate")] 23 | public IActionResult Webhook(Guid secret) 24 | { 25 | _service.CreateWebhook(secret); 26 | return Ok(); 27 | } 28 | 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Api/Library/ApiKeyIgnoreAttribute.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc.Filters; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Web.Api 8 | { 9 | public class ApiKeyIgnoreAttribute : Attribute, IAuthorizationFilter 10 | { 11 | public const string ShouldIgnoreApiKey = "_CC7F91129100_ShouldIgnoreApiKey"; 12 | 13 | public ApiKeyIgnoreAttribute(bool value = true) 14 | { 15 | this.Value = value; 16 | } 17 | 18 | public bool Value { get; } 19 | 20 | public void OnAuthorization(AuthorizationFilterContext context) 21 | { 22 | context.HttpContext.Items[ShouldIgnoreApiKey] = Value; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/AppSettingsEnvironment.Debug.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace ChilliCoreTemplate.Web 7 | { 8 | public static partial class AppSettingsEnvironment 9 | { 10 | public static string BuildConfigurationName => "Debug"; 11 | public static string EnvironmentName => "Development"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/AppSettingsEnvironment.Develop.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace ChilliCoreTemplate.Web 7 | { 8 | public static partial class AppSettingsEnvironment 9 | { 10 | public static string BuildConfigurationName => "Develop"; 11 | public static string EnvironmentName => "Development"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/AppSettingsEnvironment.Release.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace ChilliCoreTemplate.Web 7 | { 8 | public static partial class AppSettingsEnvironment 9 | { 10 | public static string BuildConfigurationName => "Release"; 11 | public static string EnvironmentName => "Production"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/AppSettingsEnvironment.Staging.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace ChilliCoreTemplate.Web 7 | { 8 | public static partial class AppSettingsEnvironment 9 | { 10 | public static string BuildConfigurationName => "Staging"; 11 | public static string EnvironmentName => "Staging"; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/AppSettingsEnvironment.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace ChilliCoreTemplate.Web 7 | { 8 | /* See AppSettingsEnvironment.*.cs files for implementation details */ 9 | public static partial class AppSettingsEnvironment 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Controllers/DefaultController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using ChilliSource.Cloud.Web.MVC; 7 | using Microsoft.AspNetCore.Mvc; 8 | using ChilliCoreTemplate.Models; 9 | 10 | namespace ChilliCoreTemplate.Web.Areas.Admin.Controllers 11 | { 12 | 13 | [Area("Admin")] 14 | [RequireHttpsWeb, CustomAuthorize(Roles = AccountCommon.Administrator)] 15 | public class DefaultController : Controller 16 | { 17 | 18 | public virtual ActionResult Index() 19 | { 20 | return Mvc.Admin.Company_List.Redirect(this); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/Company/CompanyAdminAdd.cshtml: -------------------------------------------------------------------------------- 1 | @model CompanyDetailViewModel 2 | @using (Html.BeginFormCustom(Mvc.Admin.Company_Admin_Add, htmlAttributes: new { @class = "form-horizontal", enctype = "multipart/form-data", autocomplete = "off" })) 3 | { 4 | @Html.ValidationSummary() 5 | @Html.HiddenFor(m => m.Id) 6 | @await Html.FieldTemplateForAsync(m => m.Admin.Email) 7 | @await Html.FieldTemplateForAsync(m => m.Admin.FirstName) 8 | @await Html.FieldTemplateForAsync(m => m.Admin.LastName) 9 | using (await Html.FieldTemplateOuterForAsync(m => m.Id, options: new TemplateOptions { Label = "" })) 10 | { 11 | @await Html.ButtonSubmitAsync("Invite") 12 | 13 | } 14 | } 15 | @if (Context.Request.IsAjaxRequest()) 16 | { 17 | 21 | } 22 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/Company/CompanyAdminDelete.cshtml: -------------------------------------------------------------------------------- 1 | @model CompanyUserViewModel 2 | @using (Html.BeginFormCustom(Mvc.Admin.Company_Admin_Remove, htmlAttributes: new { @class = "form-horizontal" })) 3 | { 4 | @Html.HiddenFor(m => m.Id) 5 | @Html.HiddenFor(m => m.UserId) 6 | 10 | 14 | } 15 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/Company/CompanyDelete.cshtml: -------------------------------------------------------------------------------- 1 | @model CompanyDetailViewModel 2 | @{ 3 | var archiveOrDelete = Model.IsDeleted ? "unarchive" : Model.HasAdmins ? "archive" : "delete"; 4 | } 5 | @using (Html.BeginFormCustom(Mvc.Admin.Company_Delete, htmlAttributes: new { @class = "form-horizontal" })) 6 | { 7 | @Html.HiddenFor(m => m.Id) 8 | 12 | 16 | } 17 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/Company/CompanyPurge.cshtml: -------------------------------------------------------------------------------- 1 | @model CompanyDetailViewModel 2 | @using (Html.BeginFormCustom(Mvc.Admin.Company_Purge, htmlAttributes: new { @class = "form-horizontal" })) 3 | { 4 | @Html.HiddenFor(m => m.Id) 5 | 10 | 14 | } 15 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/Company/_CreateCompany.cshtml: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/ActivityDetail.cshtml: -------------------------------------------------------------------------------- 1 | @model UserActivityViewModel 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
Entity:@Model.EntityDescription
Target:@Model.TargetDescription
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/ChangeStatus.cshtml: -------------------------------------------------------------------------------- 1 | @model ChangeUserStatusModel 2 | @using (Html.BeginFormCustom(Mvc.Admin.User_ChangeStatus)) 3 | { 4 | 12 | 16 | } 17 | 20 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/EmailsDetail.cshtml: -------------------------------------------------------------------------------- 1 | @model EmailViewModel 2 | @{ 3 | Layout = null; 4 | } 5 | 30 | 33 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/NotificationDetail.cshtml: -------------------------------------------------------------------------------- 1 | @using Newtonsoft.Json; 2 | @model PushNotificationDetailModel 3 | @{ 4 | Layout = null; 5 | dynamic parsedJson = JsonConvert.DeserializeObject(Model.Message); 6 | var formattedJson = JsonConvert.SerializeObject(parsedJson, Formatting.Indented); 7 | } 8 | 20 | 23 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/Purge.cshtml: -------------------------------------------------------------------------------- 1 | @model AccountViewModel 2 | @using (Html.BeginFormCustom(Mvc.Admin.User_Purge)) 3 | { 4 | 8 | 12 | } 13 | 16 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/ResetPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model ResetPasswordViewModel 2 | @using (Html.BeginFormCustom(Mvc.Admin.User_ResetPassword)) 3 | { 4 | 22 | 26 | } 27 | 30 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/SmsDetail.cshtml: -------------------------------------------------------------------------------- 1 | @model ChilliCoreTemplate.Models.Sms.SmsViewModel 2 | @{ 3 | Layout = null; 4 | } 5 | 24 | 27 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/UsersInvite_Upload.cshtml: -------------------------------------------------------------------------------- 1 | @model InviteUploadModel 2 | @{ 3 | Layout = null; 4 | } 5 | @using (Html.BeginFormCustom(Mvc.Admin.User_InviteUpload, htmlAttributes: new { enctype = "multipart/form-data" })) 6 | { 7 | 13 | 17 | } 18 | @Html.RenderCustomSection("scripts") 19 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/_InviteUser.cshtml: -------------------------------------------------------------------------------- 1 | 5 | 6 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/_Statistic.cshtml: -------------------------------------------------------------------------------- 1 | @model StatisticModel 2 | 3 |
4 |
5 | @Model.PeriodLabel 6 |
@Model.Title
7 | 8 |
9 |
10 |
11 |

@Model.Total.ToString("N0")

12 |
@Model.PercentageChange%
13 | Total @Model.Title.ToLower() 14 |
15 | 18 |
19 |
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/User/_UsersImport_Script.cshtml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using ChilliCoreTemplate.Web 2 | @using ChilliCoreTemplate.Models 3 | @using ChilliCoreTemplate.Models.Admin 4 | @using ChilliCoreTemplate.Models.EmailAccount 5 | @using ChilliSource.Core.Extensions 6 | @using ChilliSource.Cloud.Core 7 | @using ChilliSource.Cloud.Web 8 | @using ChilliSource.Cloud.Web.MVC 9 | @using ChilliSource.Cloud.Web.MVC.Misc 10 | @using Microsoft.AspNetCore.Html 11 | @using Microsoft.AspNetCore.Hosting 12 | @using Microsoft.Extensions.Hosting 13 | @using SixLabors.ImageSharp.Processing 14 | @using StackExchange.Profiling 15 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 16 | @addTagHelper *, ChilliCoreTemplate.Web 17 | @addTagHelper *, MiniProfiler.AspNetCore.Mvc -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Admin/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "Layout/_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Controllers/DefaultController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using ChilliSource.Cloud.Web.MVC; 7 | using Microsoft.AspNetCore.Mvc; 8 | using ChilliCoreTemplate.Models; 9 | 10 | namespace ChilliCoreTemplate.Web.Areas.Company.Controllers 11 | { 12 | 13 | [Area("Company")] 14 | [RequireHttpsWeb, CustomAuthorize(MultipleRoles = new string[] { AccountCommon.CompanyAdmin, AccountCommon.CompanyUser })] 15 | public class DefaultController : Controller 16 | { 17 | 18 | public virtual ActionResult Index() 19 | { 20 | return Mvc.Company.Location_List.Redirect(this); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/Location/LocationDelete.cshtml: -------------------------------------------------------------------------------- 1 | @model LocationViewModel 2 | @using (Html.BeginFormCustom(Mvc.Company.Location_Delete, htmlAttributes: new { @class = "form-horizontal" })) 3 | { 4 | @Html.HiddenFor(m => m.Id) 5 | 9 | 13 | } 14 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/Location/LocationUserAdd.cshtml: -------------------------------------------------------------------------------- 1 | @model LocationDetailModel 2 | @using (Html.BeginFormCustom(Mvc.Company.Location_User_Add, htmlAttributes: new { @class = "form-horizontal", enctype = "multipart/form-data", autocomplete = "off" })) 3 | { 4 | @Html.ValidationSummary() 5 | @Html.HiddenFor(m => m.Id) 6 | @await Html.FieldTemplateForAsync(m => m.User.Email) 7 | @await Html.FieldTemplateForAsync(m => m.User.FirstName) 8 | @await Html.FieldTemplateForAsync(m => m.User.LastName) 9 | using (await Html.FieldTemplateOuterForAsync(m => m.Id, options: new TemplateOptions { Label = "" })) 10 | { 11 | @await Html.ButtonSubmitAsync("Save") 12 | 13 | } 14 | } 15 | @if (Context.Request.IsAjaxRequest()) 16 | { 17 | 21 | } 22 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/Location/LocationUserDelete.cshtml: -------------------------------------------------------------------------------- 1 | @model LocationUserViewModel 2 | @using (Html.BeginFormCustom(Mvc.Company.Location_User_Delete, htmlAttributes: new { @class = "form-horizontal" })) 3 | { 4 | @Html.HiddenFor(m => m.Id) 5 | @Html.HiddenFor(m => m.UserId) 6 | 10 | 14 | } 15 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/Location/_CreateLocation.cshtml: -------------------------------------------------------------------------------- 1 | 4 | 5 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/User/ChangeRole.cshtml: -------------------------------------------------------------------------------- 1 | @model ChangeAccountRoleModel 2 | @using (Html.BeginFormCustom(Mvc.Company.User_ChangeRole)) 3 | { 4 | 12 | 16 | } 17 | 20 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/User/ChangeStatus.cshtml: -------------------------------------------------------------------------------- 1 | @model ChangeUserStatusModel 2 | @using (Html.BeginFormCustom(Mvc.Company.User_ChangeStatus)) 3 | { 4 | 12 | 16 | } 17 | 20 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/User/ResetPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model ResetPasswordViewModel 2 | @using (Html.BeginFormCustom(Mvc.Company.User_ResetPassword)) 3 | { 4 | 22 | 26 | } 27 | 30 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/User/_InviteUser.cshtml: -------------------------------------------------------------------------------- 1 |
2 | + Invite user 3 | @*+ Import users*@ 4 |
5 | 6 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using ChilliCoreTemplate.Web 2 | @using ChilliCoreTemplate.Models 3 | @using ChilliCoreTemplate.Models.Admin 4 | @using ChilliCoreTemplate.Models.EmailAccount 5 | @using ChilliSource.Core.Extensions 6 | @using ChilliSource.Cloud.Core 7 | @using ChilliSource.Cloud.Web 8 | @using ChilliSource.Cloud.Web.MVC 9 | @using ChilliSource.Cloud.Web.MVC.Misc 10 | @using Microsoft.AspNetCore.Hosting 11 | @using Microsoft.AspNetCore.Html 12 | @using SixLabors.ImageSharp.Processing 13 | @using StackExchange.Profiling 14 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 15 | @addTagHelper *, ChilliCoreTemplate.Web 16 | @addTagHelper *, MiniProfiler.AspNetCore.Mvc -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Areas/Company/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "Layout/_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Controllers/ErrorController.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 | 8 | 9 | namespace ChilliCoreTemplate.Web.Controllers 10 | { 11 | public class ErrorController : Controller 12 | { 13 | public virtual ActionResult Index() 14 | { 15 | if (Request.IsAjaxRequest()) 16 | { 17 | return PartialView(); 18 | } 19 | 20 | return View(); 21 | } 22 | 23 | public new ActionResult NotFound() 24 | { 25 | if (Request.IsAjaxRequest()) 26 | { 27 | return PartialView(); 28 | } 29 | 30 | return View(); 31 | } 32 | 33 | public virtual ActionResult TestException() 34 | { 35 | ThrowExceptionMethod(); 36 | return this.Ok(); 37 | } 38 | 39 | private void ThrowExceptionMethod() 40 | { 41 | throw new ApplicationException("This is a test exception"); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Controllers/PublicController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using ChilliCoreTemplate.Models; 7 | using Microsoft.AspNetCore.Mvc; 8 | 9 | 10 | namespace ChilliCoreTemplate.Web.Controllers 11 | { 12 | public class PublicController : Controller 13 | { 14 | 15 | readonly ProjectSettings _settings; 16 | 17 | public PublicController(ProjectSettings settings) 18 | { 19 | _settings = settings; 20 | } 21 | 22 | public virtual ActionResult Index() 23 | { 24 | return this.RedirectToRoot(_settings); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/CoreHostingEnvironment.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using ChilliSource.Cloud.Core; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Threading; 7 | using System.Threading.Tasks; 8 | 9 | namespace ChilliCoreTemplate.Web 10 | { 11 | public class CoreHostingEnvironment : ChilliSource.Cloud.Core.IHostingEnvironment 12 | { 13 | IBackgroundTaskQueue _taskQueue; 14 | public CoreHostingEnvironment(IBackgroundTaskQueue taskQueue) 15 | { 16 | _taskQueue = taskQueue; 17 | } 18 | 19 | public void QueueBackgroundWorkItem(Func workItem) 20 | { 21 | _taskQueue.QueueBackgroundWorkItem(workItem); 22 | } 23 | 24 | public void QueueBackgroundWorkItem(Action workItem) 25 | { 26 | #pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously 27 | _taskQueue.QueueBackgroundWorkItem(async (c) => workItem(c)); 28 | #pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/DryIocSetup.cs: -------------------------------------------------------------------------------- 1 | using DryIoc; 2 | using DryIoc.Microsoft.DependencyInjection; 3 | using Microsoft.Extensions.DependencyInjection; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Threading.Tasks; 8 | 9 | namespace ChilliCoreTemplate.Web 10 | { 11 | public static class DryIocSetup 12 | { 13 | public static IContainer MvcContainer { get; private set; } 14 | 15 | public static IServiceProvider Initialise(IServiceCollection services) 16 | { 17 | MvcContainer = new DryIoc.Container().WithDependencyInjectionAdapter(services); 18 | 19 | return MvcContainer.BuildServiceProvider(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/EmailBuilder/EmailBuilder.cs: -------------------------------------------------------------------------------- 1 | 2 | 3 | using Microsoft.AspNetCore.Mvc.Rendering; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Web; 10 | 11 | namespace ChilliCoreTemplate.Web 12 | { 13 | /// 14 | /// Email builder factory 15 | /// 16 | public static class EmailBuilder 17 | { 18 | /// 19 | /// Creates a default email builder. 20 | /// 21 | /// A htmlHelper instance. 22 | /// (Optional) An instance of DefaultEmailBuilderOptions 23 | /// An email builder helper. 24 | public static DefaultEmailBuilder CreateDefault(IHtmlHelper htmlHelper, DefaultEmailBuilderOptions options = null) 25 | { 26 | options = options ?? new DefaultEmailBuilderOptions(); 27 | 28 | return new DefaultEmailBuilder(htmlHelper, options); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/CheckboxFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | using ChilliSource.Core.Extensions; 3 | using System.Reflection; 4 | 5 | namespace ChilliCoreTemplate.Web 6 | { 7 | public class CheckboxFieldTemplateOptions : FieldTemplateOptionsBase 8 | { 9 | public CheckboxFieldTemplateOptions() : base() { } 10 | public CheckboxFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 11 | 12 | public override string GetViewPath() 13 | { 14 | return "FieldTemplates/Checkbox"; 15 | } 16 | 17 | public CheckBoxAttribute CheckBoxAttribute { get; set; } 18 | 19 | public override IFieldInnerTemplateModel ProcessInnerField(IFieldInnerTemplateModel templateModel) 20 | { 21 | var member = templateModel.InnerMetadata.MemberExpression; 22 | 23 | if (HtmlHelperExtensions.ConvertAttemptedValueToBoolean(templateModel.Value)) 24 | { 25 | templateModel.HtmlAttributes.AddOrSkipIfExists("checked", "checked"); 26 | } 27 | templateModel.HtmlAttributes.AddOrSkipIfExists("type", "checkbox"); 28 | 29 | if (this.CheckBoxAttribute == null) 30 | this.CheckBoxAttribute = member.Member.GetCustomAttribute(); 31 | 32 | return templateModel; 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/CheckboxListFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | using System.Reflection; 3 | 4 | namespace ChilliCoreTemplate.Web 5 | { 6 | public class CheckboxListFieldTemplateOptions : SelectListFieldTemplateOptionsBase 7 | { 8 | public CheckboxListFieldTemplateOptions() : base() { } 9 | public CheckboxListFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 10 | 11 | public override string GetViewPath() 12 | { 13 | return "FieldTemplates/CheckboxList"; 14 | } 15 | 16 | public CheckBoxAttribute CheckboxAttribute { get; set; } 17 | 18 | public override IFieldInnerTemplateModel ProcessInnerField(IFieldInnerTemplateModel templateModel) 19 | { 20 | var metadata = templateModel.InnerMetadata.ModelMetadata; 21 | var member = templateModel.InnerMetadata.MemberExpression; 22 | var baseType = templateModel.InnerMetadata.MemberUnderlyingType.BaseType; 23 | 24 | if (this.CheckboxAttribute == null) 25 | this.CheckboxAttribute = member.Member.GetCustomAttribute() ?? new CheckBoxAttribute(); 26 | 27 | base.ProcessSelect(baseType, metadata, templateModel); 28 | 29 | return templateModel; 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/ClockPickerFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | 3 | namespace ChilliCoreTemplate.Web 4 | { 5 | public class ClockPickerFieldTemplateOptions : FieldTemplateOptionsBase 6 | { 7 | public ClockPickerFieldTemplateOptions() : base() { } 8 | public ClockPickerFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 9 | 10 | public override string GetViewPath() 11 | { 12 | return "FieldTemplates/ClockPicker"; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/DatePickerFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | using Microsoft.AspNetCore.Html; 3 | 4 | namespace ChilliCoreTemplate.Web 5 | { 6 | public class DatePickerFieldTemplateOptions : FieldTemplateOptionsBase 7 | { 8 | public DatePickerFieldTemplateOptions() : base() { } 9 | public DatePickerFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 10 | 11 | public override string GetViewPath() 12 | { 13 | return "FieldTemplates/DatePicker"; 14 | } 15 | 16 | public IHtmlContent PreAddOn { get; set; } 17 | 18 | public IHtmlContent PostAddOn { get; set; } 19 | } 20 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/DateTimePickerFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | using Microsoft.AspNetCore.Html; 3 | 4 | namespace ChilliCoreTemplate.Web 5 | { 6 | public class DateTimePickerFieldTemplateOptions : FieldTemplateOptionsBase 7 | { 8 | public DateTimePickerFieldTemplateOptions() : base() { } 9 | public DateTimePickerFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 10 | 11 | public override string GetViewPath() 12 | { 13 | return "FieldTemplates/DateTimePicker"; 14 | } 15 | 16 | public IHtmlContent PreAddOn { get; set; } 17 | 18 | public IHtmlContent PostAddOn { get; set; } 19 | } 20 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/FileFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | 3 | namespace ChilliCoreTemplate.Web 4 | { 5 | public class FileFieldTemplateOptions : FieldTemplateOptionsBase 6 | { 7 | public FileFieldTemplateOptions() : base() { } 8 | public FileFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 9 | 10 | public string ButtonText { get; set; } = "Choose"; 11 | 12 | public override string GetViewPath() 13 | { 14 | return "FieldTemplates/File"; 15 | } 16 | 17 | public override IFieldInnerTemplateModel ProcessInnerField(IFieldInnerTemplateModel templateModel) 18 | { 19 | var metadata = templateModel.InnerMetadata.ModelMetadata; 20 | HttpPostedFileExtensionsAttribute.Resolve(metadata, templateModel.HtmlAttributes); 21 | 22 | return templateModel; 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/RadioFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | using System.Reflection; 3 | 4 | namespace ChilliCoreTemplate.Web 5 | { 6 | public class RadioFieldTemplateOptions : FieldTemplateOptionsBase 7 | { 8 | public RadioFieldTemplateOptions() : base() { } 9 | public RadioFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 10 | 11 | public override string GetViewPath() 12 | { 13 | return "FieldTemplates/Radio"; 14 | } 15 | 16 | public RadioAttribute RadioAttribute { get; set; } 17 | 18 | public override IFieldInnerTemplateModel ProcessInnerField(IFieldInnerTemplateModel templateModel) 19 | { 20 | var member = templateModel.InnerMetadata.MemberExpression; 21 | 22 | if (this.RadioAttribute == null) 23 | this.RadioAttribute = member.Member.GetCustomAttribute() ?? new RadioAttribute(); 24 | 25 | return templateModel; 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/RadioListFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | using System.Reflection; 3 | 4 | namespace ChilliCoreTemplate.Web 5 | { 6 | public class RadioListFieldTemplateOptions : SelectListFieldTemplateOptionsBase 7 | { 8 | public RadioListFieldTemplateOptions() : base() { } 9 | public RadioListFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 10 | 11 | public override string GetViewPath() 12 | { 13 | return "FieldTemplates/RadioList"; 14 | } 15 | 16 | public RadioAttribute RadioAttribute { get; set; } 17 | 18 | public override IFieldInnerTemplateModel ProcessInnerField(IFieldInnerTemplateModel templateModel) 19 | { 20 | var metadata = templateModel.InnerMetadata.ModelMetadata; 21 | var member = templateModel.InnerMetadata.MemberExpression; 22 | var baseType = templateModel.InnerMetadata.MemberUnderlyingType.BaseType; 23 | 24 | if (this.RadioAttribute == null) 25 | this.RadioAttribute = member.Member.GetCustomAttribute() ?? new RadioAttribute(); 26 | 27 | base.ProcessSelect(baseType, metadata, templateModel); 28 | 29 | return templateModel; 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/SelectFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | 3 | namespace ChilliCoreTemplate.Web 4 | { 5 | public class SelectFieldTemplateOptions : SelectListFieldTemplateOptionsBase 6 | { 7 | public SelectFieldTemplateOptions() : base() { } 8 | public SelectFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 9 | 10 | public override string GetViewPath() 11 | { 12 | return "FieldTemplates/Select"; 13 | } 14 | 15 | public override IFieldInnerTemplateModel ProcessInnerField(IFieldInnerTemplateModel templateModel) 16 | { 17 | var metadata = templateModel.InnerMetadata.ModelMetadata; 18 | var baseType = templateModel.InnerMetadata.MemberUnderlyingType.BaseType; 19 | base.ProcessSelect(baseType, metadata, templateModel); 20 | 21 | return templateModel; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FieldTemplateOptions/TextAreaFieldTemplateOptions.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Web.MVC; 2 | 3 | namespace ChilliCoreTemplate.Web 4 | { 5 | public class TextAreaFieldTemplateOptions : FieldTemplateOptionsBase 6 | { 7 | public TextAreaFieldTemplateOptions() : base() { } 8 | public TextAreaFieldTemplateOptions(FieldTemplateOptionsBase other) : base(other) { } 9 | 10 | public override string GetViewPath() 11 | { 12 | return "FieldTemplates/TextArea"; 13 | } 14 | 15 | public override IFieldInnerTemplateModel ProcessInnerField(IFieldInnerTemplateModel templateModel) 16 | { 17 | InputFieldTemplateOptions.ResolveInputAttributes(templateModel, "text"); 18 | 19 | return templateModel; 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/FireBaseConfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "service_account", 3 | "project_id": "", 4 | "private_key_id": "", 5 | "private_key": "", 6 | "client_email": "", 7 | "client_id": "", 8 | "auth_uri": "https://accounts.google.com/o/oauth2/auth", 9 | "token_uri": "https://oauth2.googleapis.com/token", 10 | "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 11 | "client_x509_cert_url": "" 12 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/MenuHtmlHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc.Rendering; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Web 8 | { 9 | public static class MenuHtmlHelper 10 | { 11 | public static MenuElement GetCurrentMenu(this IHtmlHelper htmlHelper) 12 | { 13 | return MenuConfigByRole.GetCurrentMenu(htmlHelper.ViewContext.HttpContext); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/MvcRouterAccessor.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using Microsoft.AspNetCore.Routing; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Threading.Tasks; 7 | 8 | namespace ChilliCoreTemplate.Web 9 | { 10 | public class MvcRouterAccessor: IMvcRouterAccessor 11 | { 12 | public IRouter Router { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/OAuthProviderRouteConstraint.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models.Api.OAuth; 2 | using Microsoft.AspNetCore.Http; 3 | using Microsoft.AspNetCore.Routing; 4 | using System; 5 | using System.Collections.Generic; 6 | using System.Linq; 7 | using System.Threading.Tasks; 8 | 9 | namespace ChilliCoreTemplate.Web.Library 10 | { 11 | public class OAuthProviderRouteConstraint : IRouteConstraint 12 | { 13 | public bool Match(HttpContext httpContext, IRouter route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection) 14 | { 15 | var candidate = values[routeKey]?.ToString(); 16 | return Enum.TryParse(candidate, true, out OAuthProvider result); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/Resources/EmailButton.html: -------------------------------------------------------------------------------- 1 | {3} -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/TagHelpers/ConditionTagHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using Microsoft.AspNetCore.Mvc.Rendering; 3 | using Microsoft.AspNetCore.Mvc.Routing; 4 | using Microsoft.AspNetCore.Mvc.ViewFeatures; 5 | using Microsoft.AspNetCore.Razor.TagHelpers; 6 | using Microsoft.AspNetCore.Routing; 7 | using System; 8 | using System.Collections.Generic; 9 | using System.Linq; 10 | using System.Threading.Tasks; 11 | 12 | namespace ChilliCoreTemplate.Web.TagHelpers 13 | { 14 | [HtmlTargetElement(Attributes = nameof(Condition))] 15 | public class ConditionTagHelper : TagHelper 16 | { 17 | public bool Condition { get; set; } 18 | 19 | public override void Process(TagHelperContext context, TagHelperOutput output) 20 | { 21 | if (!Condition) 22 | { 23 | output.SuppressOutput(); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/TagHelpers/HeadingTagHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using Microsoft.AspNetCore.Mvc.Rendering; 3 | using Microsoft.AspNetCore.Mvc.Routing; 4 | using Microsoft.AspNetCore.Mvc.ViewFeatures; 5 | using Microsoft.AspNetCore.Razor.TagHelpers; 6 | using Microsoft.AspNetCore.Routing; 7 | using System; 8 | using System.Collections.Generic; 9 | using System.Linq; 10 | using System.Threading.Tasks; 11 | 12 | namespace ChilliCoreTemplate.Web.TagHelpers 13 | { 14 | public class HeadingTagHelper : TagHelper 15 | { 16 | public string Title { get; set; } 17 | 18 | //@Title 19 | //

@Content

20 | public override void Process(TagHelperContext context, TagHelperOutput output) 21 | { 22 | output.PreContent.SetHtmlContent($"{Title}

"); 23 | output.PostContent.SetHtmlContent("

"); 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/TagHelpers/PageTagHelper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using Microsoft.AspNetCore.Mvc.Rendering; 3 | using Microsoft.AspNetCore.Mvc.Routing; 4 | using Microsoft.AspNetCore.Mvc.ViewFeatures; 5 | using Microsoft.AspNetCore.Razor.TagHelpers; 6 | using Microsoft.AspNetCore.Routing; 7 | using System; 8 | using System.Collections.Generic; 9 | using System.Linq; 10 | using System.Threading.Tasks; 11 | 12 | namespace ChilliCoreTemplate.Web.TagHelpers 13 | { 14 | public class PageTagHelper : TagHelper 15 | { 16 | //
17 | //
18 | //
19 | //
20 | //
21 | //
22 | public override void Process(TagHelperContext context, TagHelperOutput output) 23 | { 24 | output.TagName = "div"; 25 | output.Attributes.SetAttribute("id", "page-container"); 26 | output.PreContent.SetHtmlContent($"
"); 27 | output.PostContent.SetHtmlContent("
"); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/Tasks/EmailDeliveryTask.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using ChilliCoreTemplate.Models.EmailAccount; 3 | using ChilliCoreTemplate.Service; 4 | using ChilliCoreTemplate.Service.EmailAccount; 5 | using ChilliSource.Cloud.Core; 6 | using ChilliSource.Cloud.Core.Distributed; 7 | using Microsoft.Extensions.DependencyInjection; 8 | using System; 9 | 10 | namespace ChilliCoreTemplate.Web.Tasks 11 | { 12 | public class EmailDeliveryTask : IDistributedTask 13 | { 14 | public void Run(object parameter, ITaskExecutionInfo executionInfo) 15 | { 16 | TaskHelper.WaitSafeSync(async () => 17 | { 18 | try 19 | { 20 | using (var scope = ScopeContextFactory.Instance.CreateScope()) 21 | { 22 | var emailQueue = scope.ServiceProvider.GetRequiredService(); 23 | var workItem = await emailQueue.Dequeue(); 24 | 25 | await workItem.Execute(executionInfo); 26 | } 27 | } 28 | catch (Exception) 29 | { 30 | throw; 31 | } 32 | }); 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/Tasks/ErrorLogTask.cs: -------------------------------------------------------------------------------- 1 | using ChilliSource.Cloud.Core; 2 | using ChilliSource.Cloud.Core.Distributed; 3 | using Microsoft.Extensions.DependencyInjection; 4 | using ChilliCoreTemplate.Service; 5 | using ChilliCoreTemplate.Service.EmailAccount; 6 | 7 | namespace ChilliCoreTemplate.Web.Tasks 8 | { 9 | public class ErrorLogTask : IDistributedTask 10 | { 11 | public void Run(object parameter, ITaskExecutionInfo executionInfo) 12 | { 13 | using (var scope = ScopeContextFactory.Instance.CreateScope()) 14 | { 15 | 16 | var svc = scope.ServiceProvider.GetRequiredService(); 17 | 18 | TaskHelper.WaitSafeSync(() => svc.Error_EmailAsync(executionInfo)); 19 | } 20 | } 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/Tasks/SmsDeliveryTask.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Models; 2 | using ChilliCoreTemplate.Models.EmailAccount; 3 | using ChilliCoreTemplate.Service; 4 | using ChilliCoreTemplate.Service.EmailAccount; 5 | using ChilliCoreTemplate.Service.Sms; 6 | using ChilliSource.Cloud.Core; 7 | using ChilliSource.Cloud.Core.Distributed; 8 | using Microsoft.Extensions.DependencyInjection; 9 | using System; 10 | 11 | namespace ChilliCoreTemplate.Web 12 | { 13 | public class SmsDeliveryTask : IDistributedTask 14 | { 15 | public void Run(object parameter, ITaskExecutionInfo executionInfo) 16 | { 17 | TaskHelper.WaitSafeSync(async () => 18 | { 19 | try 20 | { 21 | using (var scope = ScopeContextFactory.Instance.CreateScope()) 22 | { 23 | var smsQueue = scope.ServiceProvider.GetRequiredService(); 24 | await smsQueue.Process(executionInfo); 25 | } 26 | } 27 | catch (Exception) 28 | { 29 | throw; 30 | } 31 | }); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/Tasks/WebhookTask.cs: -------------------------------------------------------------------------------- 1 | using ChilliCoreTemplate.Service; 2 | using ChilliCoreTemplate.Service.Api; 3 | using ChilliSource.Cloud.Core.Distributed; 4 | using Microsoft.Extensions.DependencyInjection; 5 | using System.Threading.Tasks; 6 | 7 | namespace ChilliCoreTemplate.Web.Tasks 8 | { 9 | public class WebhookTask : IDistributedTaskAsync 10 | { 11 | public async Task RunAsync(object parameter, ITaskExecutionInfoAsync executionInfo) 12 | { 13 | using (var scope = ScopeContextFactory.Instance.CreateScope()) 14 | { 15 | var svc = scope.ServiceProvider.GetRequiredService(); 16 | 17 | await svc.ProcessWebhook(executionInfo); 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Library/TypedRoute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | 6 | namespace ChilliCoreTemplate.Web 7 | { 8 | public interface ITypedRoute 9 | { 10 | 11 | } 12 | 13 | public class TypedRoute 14 | { 15 | 16 | } 17 | 18 | public class TypedRoutes 19 | { 20 | private TypedRoutes() { } 21 | 22 | public static readonly TypedRoutes Instance = new TypedRoutes(); 23 | 24 | public readonly TypedRouteEmailAccount EmailAccount = new TypedRouteEmailAccount(); 25 | } 26 | 27 | public class TypedRouteEmailAccount : ITypedRoute 28 | { 29 | public readonly TypedRoute Login = new TypedRoute(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Properties/PublishProfiles/Profile.pubxml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | Package 9 | False 10 | False 11 | netcoreapp6.0 12 | 129178d8-436f-407b-bcaa-0f6015953174 13 | false 14 | <_IsPortable>true 15 | obj\$(Configuration)\Package\ChilliCoreTemplate.Web.zip 16 | true 17 | true 18 | 19 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:51078/", 7 | "sslPort": 44371 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "environmentVariables": { 15 | "ASPNETCORE_ENVIRONMENT": "Development" 16 | }, 17 | "ancmHostingModel": "InProcess" 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Properties/web.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/ChooseRole.cshtml: -------------------------------------------------------------------------------- 1 | @*@model List 2 | @{ 3 | var returnUrl = this.Request.QueryString["returnUrl"]; 4 | } 5 |
6 |
7 |
8 | 9 |

Hi @User.UserData().Name

10 | 11 |

Which account would you like to log in to?

12 | 13 |
14 |
    15 | @foreach (var item in Model) 16 | { 17 |
  • @Mvc.Root.EmailAccount_SelectRole.LinkPost(item.RoleDesc, routeValues: new { returnUrl = returnUrl, jsonRole = HttpUtility.HtmlEncode(item.GetJsonValue()) })
  • 18 | } 19 |
20 |
21 |
22 |
23 |
*@ 24 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/ConfirmInvite.cshtml: -------------------------------------------------------------------------------- 1 | @model ResetPasswordViewModel 2 |

Set password for @Model.Email

3 | @using (Html.BeginFormCustom(Mvc.Root.EmailAccount_ConfirmInvite)) 4 | { 5 | @Html.ValidationSummary() 6 | @Html.HiddenFor(model => model.Token) 7 | @Html.HiddenFor(model => model.Email) 8 | 9 |
10 | @await Html.FieldTemplateInnerForAsync(model => model.NewPassword, htmlAttributes: new { autofocus = "autofocus", @class = "form-control-lg" }) 11 |
12 |
13 | @await Html.FieldTemplateInnerForAsync(model => model.ConfirmPassword, htmlAttributes: new { @class = "form-control-lg" }) 14 |
15 | 16 | Cancel 17 | } 18 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/ConfirmInviteSuccess.cshtml: -------------------------------------------------------------------------------- 1 | @model string 2 | 3 |

Invitation accepted

4 |
5 |

Your invitation has been successfully accepted.

6 |

Click here to login

7 |
8 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/ForgotPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model ResetPasswordRequestModel 2 |

Forgot password

3 |

An email will be sent to your account's email address with a link to choose your new password

4 | @using (Html.BeginFormCustom(Mvc.Root.EmailAccount_ForgotPassword)) 5 | { 6 | @Html.ValidationSummary() 7 |
8 | @await Html.FieldTemplateInnerForAsync(model => model.Email, htmlAttributes: new { autofocus = "autofocus", @class = "form-control-lg", placeholder = "Your account's email address?" }) 9 |
10 | 11 | Login instead 12 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/ForgotPasswordSent.cshtml: -------------------------------------------------------------------------------- 1 | @model ResetPasswordRequestModel 2 |

Forgot password

3 |
4 |

5 | An email has been sent to @Model.Email with instructions to set a new password. 6 |

7 |

The link in the email will expire in 1 hour.

8 |
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/Login.cshtml: -------------------------------------------------------------------------------- 1 | @model SessionEditModel 2 | 3 | @inject ProjectSettings config 4 | 5 |

Welcome to @config.ProjectDisplayName

6 | 7 | @using (Html.BeginFormCustom(Mvc.Root.EmailAccount_Login)) 8 | { 9 | @Html.ValidationSummary() 10 | @Html.HiddenFor(m => m.ReturnUrl) 11 | 12 |
13 | @await Html.FieldTemplateInnerForAsync(m => m.Email, htmlAttributes: new { autofocus = "autofocus", @class = "form-control-lg" }) 14 |
15 |
16 | @await Html.FieldTemplateInnerForAsync(m => m.Password, htmlAttributes: new { @class = "form-control-lg" }) 17 |
18 | 19 | 20 | Forgot password? 21 |
22 | @Html.ActionLink("Don't have an account? Register here", Mvc.Root.EmailAccount_Registration) 23 | } 24 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/RegistrationActivationSent.cshtml: -------------------------------------------------------------------------------- 1 | @model string 2 | 3 |

Registration successful

4 |

Next steps...

5 |

We have sent a registration email to @Model. Click the link within to complete your online registration.

6 |

If you don't receive the email within 5 minutes, check your spam. You can get a registration email resent by signing in.

7 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/RegistrationComplete.cshtml: -------------------------------------------------------------------------------- 1 | @model UserTokenModel 2 | @inject ProjectSettings config 3 | @if (ViewData.ModelState.IsValid) 4 | { 5 |

Registration Complete

6 | 7 |
8 | Login Now 9 |

10 | & start using @config.ProjectDisplayName 11 |

12 |
13 | } 14 | else 15 | { 16 |
17 |

Activation failed

18 | The activation code has expired or there was an error. Please @Html.ActionLink("login", Mvc.Root.EmailAccount_Login) and a new activation email will be sent to you. 19 |
20 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/ResetPassword.cshtml: -------------------------------------------------------------------------------- 1 | @model ResetPasswordViewModel 2 |

Reset Password for @Model.Email

3 | @using (Html.BeginFormCustom(Mvc.Root.EmailAccount_ResetPassword)) 4 | { 5 | @Html.ValidationSummary() 6 | @Html.HiddenFor(model => model.Token) 7 | @Html.HiddenFor(model => model.Email) 8 | 9 |
10 | @await Html.FieldTemplateInnerForAsync(model => model.NewPassword, htmlAttributes: new { autofocus = "autofocus", @class = "form-control-lg" }) 11 |
12 |
13 | @await Html.FieldTemplateInnerForAsync(model => model.ConfirmPassword, htmlAttributes: new { @class = "form-control-lg" }) 14 |
15 | 16 | 17 | @await Html.ButtonAsync(Mvc.Root.EmailAccount_Login, new Template_Button { Text = "Cancel", Style = ButtonStyle.Secondary, HtmlAttributes = new { @class = "btn-lg block full-width m-b" } }) 18 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/ResetPasswordSuccess.cshtml: -------------------------------------------------------------------------------- 1 | @model string 2 | 3 |

Password reset

4 |
5 |

Your password has been successfully reset.

6 |

Click here to login

7 |
8 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/EmailAccount/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/Layout/_EmailAccountLayout.cshtml"; 3 | } 4 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Emails/Company/PaymentInvoiceFailed.cshtml: -------------------------------------------------------------------------------- 1 | @model RazorTemplateDataModel 2 | @inject ProjectSettings config 3 | @{ 4 | Layout = "~/Views/Emails/_EmailLayout.cshtml"; 5 | Model.Subject = "Oh no, your payment failed"; 6 | Model.EmailPreview = "please login and update your payment details"; 7 | var builder = EmailBuilder.CreateDefault(this.Html, EmailConstants.EmailOptions); 8 | var url = config.ResolveUrl(String.Format("~/account/login?email={0}", Model.Data.Email)); 9 | } 10 | 11 | @section Header 12 | { 13 | @using (builder.BeginHeader(rowPaddingType: DefaultEmailBuilder.RowPaddingType.Reduced)) 14 | { 15 | @builder.P(String.Format("Hi {0},", Model.Data.FirstName)) 16 | @builder.P("Your last payment failed. There may be a problem with the card we have on file. Please login and check that your credit card details are up to date.") 17 | @builder.P("We will continue to attempt to take payment over the next few days.") 18 | } 19 | } 20 | 21 | @using (builder.BeginRow(borderType: DefaultEmailBuilder.RowBorderType.None, rowPaddingType: DefaultEmailBuilder.RowPaddingType.Reduced)) 22 | { 23 | @builder.ButtonTrack(Model.TrackingId, Model.TemplateId, url, "Login") 24 | } 25 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Emails/EmailAccount/AccountAlreadyRegistered.cshtml: -------------------------------------------------------------------------------- 1 | @model RazorTemplateDataModel 2 | @inject ProjectSettings config 3 | @{ 4 | Layout = "~/Views/Emails/_EmailLayout.cshtml"; 5 | Model.Subject = String.Format("You are already registered with {0}", Model.CompanyName); 6 | Model.EmailPreview = "Try signing in or resetting your password"; 7 | var builder = EmailBuilder.CreateDefault(this.Html, EmailConstants.EmailOptions); 8 | var data = new { email = Model.Data }; 9 | var loginUrl = Mvc.Root.EmailAccount_Login.Url(this.Url, routeValues: data, protocol: "https"); //config.ResolveUrl("~/login", data); // 10 | var resetPasswordUrl = Mvc.Root.EmailAccount_ForgotPassword.Url(this.Url, routeValues: data, protocol: "https"); //config.ResolveUrl("~/users/forgot-password", data); 11 | } 12 | @section Header 13 | { 14 | @using (builder.BeginHeader()) 15 | { 16 | @builder.H1("Oops, you're already registered with us") 17 | @builder.H2(String.Format("Try signing in with the email you used, or if you cannot remember your login details request a new password.", resetPasswordUrl)) 18 | 19 | @builder.ButtonTrack(Model.TrackingId, Model.TemplateId, loginUrl, "Login to your account") 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Emails/EmailAccount/ForgotPin.cshtml: -------------------------------------------------------------------------------- 1 | @model RazorTemplateDataModel 2 | @{ 3 | Layout = "~/Views/Emails/_EmailLayout.cshtml"; 4 | var builder = EmailBuilder.CreateDefault(this.Html, EmailConstants.EmailOptions); 5 | 6 | Model.Subject = String.Format("Forgot your {0} PIN?", Model.CompanyName); 7 | Model.EmailPreview = "No worries inside is your new temporary PIN!"; 8 | } 9 | @section Header 10 | { 11 | @using (builder.BeginHeader()) 12 | { 13 | @builder.H1("Forgot your PIN?") 14 | @builder.H2(String.Format("You have indicated that you have forgotten your {0} PIN. We have reset it so that your temporary PIN is {1}, please use this to log in", Model.CompanyName, Model.Data.Token)); 15 | } 16 | } 17 | 18 | @using (builder.BeginRow(borderType: DefaultEmailBuilder.RowBorderType.Bottom, rowPaddingType: DefaultEmailBuilder.RowPaddingType.Reduced)) 19 | { 20 | using (builder.BeginP()) 21 | { 22 | 23 | For your security the temporary PIN can only be used once. You will be asked to change your PIN after you login. 24 | 25 | } 26 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Emails/EmailAccount/OneTimePassword.cshtml: -------------------------------------------------------------------------------- 1 | @model RazorTemplateDataModel 2 | @inject ProjectSettings config 3 | @{ 4 | Layout = "~/Views/Emails/_EmailLayout.cshtml"; 5 | var builder = EmailBuilder.CreateDefault(this.Html, EmailConstants.EmailOptions); 6 | 7 | Model.Subject = String.Format("Your {0} one time code", Model.Site); 8 | Model.EmailPreview = "this code will expire shortly"; 9 | } 10 | @section Header 11 | { 12 | @using (builder.BeginHeader(rowPaddingType: DefaultEmailBuilder.RowPaddingType.Reduced)) 13 | { 14 | @builder.H1("One time code") 15 | @builder.H2(Model.Data.Code) 16 | } 17 | } 18 | 19 | @using (builder.BeginRow(borderType: DefaultEmailBuilder.RowBorderType.None, rowPaddingType: DefaultEmailBuilder.RowPaddingType.Reduced)) 20 | { 21 | using (builder.BeginP()) 22 | { 23 | 24 | For your security this code expires in ten minutes, so if you've taken longer than that then you'll need to click resend. 25 | 26 | } 27 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Emails/EmailAccount/PasswordChanged.cshtml: -------------------------------------------------------------------------------- 1 | @model RazorTemplateDataModel 2 | @{ 3 | Layout = "~/Views/Emails/_EmailLayout.cshtml"; 4 | Model.Subject = String.Format("Your {0} password has been updated.", Model.CompanyName); 5 | Model.EmailPreview = "You've received this message because your password has been successfully updated in our records."; 6 | var builder = EmailBuilder.CreateDefault(this.Html, EmailConstants.EmailOptions); 7 | } 8 | 9 | @section Header 10 | { 11 | @using (builder.BeginHeader(rowPaddingType: DefaultEmailBuilder.RowPaddingType.Reduced)) 12 | { 13 | @builder.H1("Your password has been updated") 14 | } 15 | } 16 | 17 | @using (builder.BeginRow(borderType: DefaultEmailBuilder.RowBorderType.None, rowPaddingType: DefaultEmailBuilder.RowPaddingType.Reduced)) 18 | { 19 | @builder.P(String.Format("Hi {0},", Model.Data.FirstName)) 20 | @builder.P(String.Format("You have successfully changed your {0} password.", Model.CompanyName)) 21 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Emails/EmailAccount/SendSMSViaEmail.cshtml: -------------------------------------------------------------------------------- 1 | @model RazorTemplateDataModel 2 | @{ 3 | Layout = "~/Views/Emails/_EmailLayout.cshtml"; 4 | Model.Subject = Model.Data.TruncateHard(50); 5 | Model.EmailPreview = "Thankyou"; 6 | var builder = EmailBuilder.CreateDefault(this.Html, EmailConstants.EmailOptions); 7 | } 8 | @section Header 9 | { 10 | @using (builder.BeginHeader()) 11 | { 12 | @builder.H1(String.Format("{0} has sent you a message", Model.CompanyName)) 13 | @builder.H2(Model.Data) 14 | } 15 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Error/Index.cshtml: -------------------------------------------------------------------------------- 1 | 

2 | Internal Server Error 3 |

-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Error/NotFound.cshtml: -------------------------------------------------------------------------------- 1 | 

2 | Not found 3 |

-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/ConfirmationModalHandlebars.cshtml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Error.cshtml: -------------------------------------------------------------------------------- 1 | @if(this.Context.Request.IsAjaxRequest()) 2 | { 3 | Layout = null; 4 | } 5 |
6 |

Sorry, an error occurred while processing your request.

7 |

The error has been recorded in our logs for diagnostics. Please contact us to help solve the problem quickly.

8 |
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplateLayouts/HiddenField.cshtml: -------------------------------------------------------------------------------- 1 | @model FieldTemplateModel 2 |
3 | @FieldTemplateModel.InnerTemplateMarker 4 |
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplateLayouts/ModalField.cshtml: -------------------------------------------------------------------------------- 1 | @model FieldTemplateModel 2 |
3 | 4 |
5 |
6 |
7 | @FieldTemplateModel.InnerTemplateMarker 8 | @if (!String.IsNullOrEmpty(Model.ModelName)) {
@Html.ValidationMessage(Model.ModelName)
} 9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplateLayouts/OptionalField.cshtml: -------------------------------------------------------------------------------- 1 | @model FieldTemplateModel 2 |
3 | 4 |
5 |
6 |
7 | @FieldTemplateModel.InnerTemplateMarker 8 | @if (!String.IsNullOrEmpty(Model.ModelName)) { @Html.ValidationMessage(Model.ModelName) } 9 |
10 |
11 |
12 |
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplateLayouts/StandardField.cshtml: -------------------------------------------------------------------------------- 1 | @model FieldTemplateModel 2 | @{ 3 | Model.HtmlAttributes.Merge("class", "form-group row"); 4 | } 5 |
6 | 7 |
8 |
9 | @FieldTemplateModel.InnerTemplateMarker 10 | @if (!String.IsNullOrEmpty(Model.ModelName)) {
@Html.ValidationMessage(Model.ModelName)
} 11 |
12 |
13 |
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplateLayouts/VerticalField.cshtml: -------------------------------------------------------------------------------- 1 | @model FieldTemplateModel 2 |
3 |
4 | 5 | @if (!String.IsNullOrEmpty(Model.HelpText)) { @Html.Raw(Model.HelpText) } 6 | @FieldTemplateModel.InnerTemplateMarker 7 | @if (!String.IsNullOrEmpty(Model.ModelName)) { @Html.ValidationMessage(Model.ModelName) } 8 |
9 |
-------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/Checkbox.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | @{ 3 | var options = Model.Options; 4 | var isAlternative = options.CheckBoxAttribute != null && options.CheckBoxAttribute.IsAlternative; 5 | } 6 | @if (isAlternative) 7 | { 8 | 9 | if (Model.Options.AutoWireUpJavascript) 10 | { 11 | @Html.RegisterCustomSection("scripts", 12 | @) 17 | } 18 | } 19 | else 20 | { 21 |
22 | 26 |
27 | if (Model.Options.AutoWireUpJavascript) 28 | { 29 | 30 | } 31 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/CheckboxList.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | @{ 3 | var options = Model.Options.CheckboxAttribute; 4 | var removeValidations = Model.HtmlAttributes.Keys.Where(k => k.StartsWith("data-val")).ToList(); 5 | foreach (var key in removeValidations) 6 | { 7 | Model.HtmlAttributes.Remove(key); 8 | } 9 | } 10 | @foreach (var option in Model.Options.SelectList) 11 | { 12 | if (!String.IsNullOrEmpty(option.Text)) 13 | { 14 |
15 | } 16 | } 17 | @if (Model.Options.AutoWireUpJavascript) 18 | { 19 | 20 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/ClockPicker.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | @{ 3 | Model.HtmlAttributes.Merge("class", "form-control"); 4 | var value = Model.Value == null ? "" : Model.Value is DateTime ? ((DateTime)Model.Value).ToString("HH:mm") : (string)Model.Value; 5 | Model.HtmlAttributes.Remove("data-val-date"); 6 | } 7 |
8 | 9 | 10 |
11 | @if (Model.Options.AutoWireUpJavascript) 12 | { 13 | var key = new Guid("A133060B-346F-4D39-86DF-23951F03A49D"); 14 | @Html.RegisterCustomSection("scripts", key, 15 | @ 20 | ) 21 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/DatePicker.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | @{ 3 | Model.HtmlAttributes.Merge("class", "form-control"); 4 | Model.HtmlAttributes.Add("data-date-format", "dd/mm/yyyy"); 5 | var value = Model.Value == null ? "" : Model.Value is DateTime ? ((DateTime)Model.Value).ToString("dd/MM/yyyy") : (string)Model.Value; 6 | } 7 |
8 | 9 | 10 | @if (Model.Options.PostAddOn != null) 11 | { 12 | @Model.Options.PostAddOn 13 | } 14 |
15 | @if (Model.Options.AutoWireUpJavascript) 16 | { 17 | @Html.RegisterCustomScripts( 18 | @ 30 | ) 31 | } 32 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/File.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | @{ 3 | var buttonText = Model.Options.ButtonText; 4 | Model.HtmlAttributes.Merge("class", "hide"); 5 | Model.HtmlAttributes.Merge("class", "validate"); 6 | var jsId = Model.Id.ToLower().Replace("_", "-"); 7 | } 8 | 12 | 13 | @if (Model.Options.AutoWireUpJavascript) 14 | { 15 | @Html.RegisterCustomScripts( 16 | @ 19 | ) 20 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/RadioList.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | @{ 3 | var options = Model.Options.RadioAttribute; 4 | var removeValidations = Model.HtmlAttributes.Keys.Where(k => k.StartsWith("data-val")).ToList(); 5 | foreach (var key in removeValidations) 6 | { 7 | Model.HtmlAttributes.Remove(key); 8 | } 9 | } 10 | @foreach (var option in Model.Options.SelectList) 11 | { 12 | if (!String.IsNullOrEmpty(option.Text)) 13 | { 14 |
15 | } 16 | } 17 | @if (Model.Options.AutoWireUpJavascript) 18 | { 19 | 20 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/ReadOnly.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/Select.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | @{ 3 | Model.HtmlAttributes.Merge("class", "form-control"); 4 | var optGroup = ""; 5 | } 6 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/TextArea.cshtml: -------------------------------------------------------------------------------- 1 | @model IFieldInnerTemplateModel 2 | @{ 3 | Model.HtmlAttributes.Merge("class", "form-control"); 4 | Model.HtmlAttributes.AddOrSkipIfExists("rows", 4); 5 | var jsId = Model.Id.ToLower().Replace("_", "-"); 6 | var isCharactersLeft = (bool?)Model.HtmlAttributes["charactersleft"]; 7 | var maxLength = (int?)Model.HtmlAttributes["maxlength"]; 8 | } 9 | 10 | @if (isCharactersLeft.GetValueOrDefault(false) && maxLength.GetValueOrDefault(0) > 0) 11 | { 12 |
13 | if (Model.Options.AutoWireUpJavascript) 14 | { 15 | @Html.RegisterCustomScripts( 16 | @ 23 | ) 24 | } 25 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/_RegisterDateScript.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | var key = new Guid("B06A815B-F1E0-461E-86DB-8092297394CB"); 3 | } 4 | @Html.RegisterCustomSection("scripts", key, 5 | @) -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/FieldTemplates/_RegisterICheckScript.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | var key = new Guid("FBA3120E-2160-4E3C-AFEE-2347BE25737B"); 3 | } 4 | @Html.RegisterCustomSection("scripts", key, 5 | @) -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/Menus/_LeftMenu.cshtml: -------------------------------------------------------------------------------- 1 | @model MenuElement 2 | @{ 3 | var children = Model.GetChildren().Where(a => !a.MenuHidden).ToList(); 4 | } 5 | 6 | @if (children.Count == 0) 7 | { 8 |
  • 9 | @await Html.PartialAsync("Layout/Menus/_MenuIcon", Model.Icon) @Model.Title 10 |
  • 11 | } 12 | else 13 | { 14 |
  • 15 | @await Html.PartialAsync("Layout/Menus/_MenuIcon", Model.Icon) @Model.Title 16 | 24 |
  • 25 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/Menus/_MenuIcon.cshtml: -------------------------------------------------------------------------------- 1 | @model string 2 | @if (!String.IsNullOrEmpty(Model)){} -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/Menus/_TopMenu.cshtml: -------------------------------------------------------------------------------- 1 | @model MenuElement 2 | @{ 3 | var children = Model.GetChildren().Where(a => !a.MenuHidden).ToList(); 4 | } 5 | 6 | @if (children.Count == 0) 7 | { 8 |
  • 9 | @Model.Title 10 |
  • 11 | } 12 | else 13 | { 14 | 25 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/_Footer.cshtml: -------------------------------------------------------------------------------- 1 | @inject ProjectSettings config 2 | @inject IWebHostEnvironment env; 3 | 4 | 21 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/_Icons.cshtml: -------------------------------------------------------------------------------- 1 | @*https://iconifier.net/*@ 2 | 3 | 4 | @{ 5 | var sizes = new int[] { 57, 72, 76, 114, 120, 144, 152, 180 }; 6 | foreach (var size in sizes) 7 | { 8 | var mysize = $"{size}x{size}"; 9 | @: 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/_LoginPartial.cshtml: -------------------------------------------------------------------------------- 1 | @if (User.IsAuthenticated()) 2 | { 3 | var userData = User.UserData(); 4 | 17 | } 18 | else 19 | { 20 | 23 | } 24 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/_MiniProfiler.cshtml: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/_Modal.cshtml: -------------------------------------------------------------------------------- 1 | @* 2 | @await Html.PartialAsync("Layout/_Modal", new ModalViewModel { Menu = Mvc.Root.Account_Unlink, Title = "Unlink account" }) 3 | @await Html.PartialAsync("Layout/_Modal", new ModalViewModel { Menu = Mvc.Root.Transactions_Category }) //No default modal header generated 4 | *@ 5 | @model ModalViewModel 6 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/_NavigationLeft_Navbar.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | var userData = User.UserData(); 3 | var area = (userData == null || String.IsNullOrEmpty(userData.CompanyName)) ? User.IsInRole(AccountCommon.Administrator) ? "Super Admin" : "Admin" : userData.CompanyName; 4 | } 5 |
    6 | 18 |
    -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Layout/_NavigationTop_UserPartial.cshtml: -------------------------------------------------------------------------------- 1 | @model string 2 | @{ 3 | var userData = User.UserData(); 4 | } 5 | @if (userData != null) 6 | { 7 | 15 | if (Model == "") 16 | { 17 |
  • 18 | image 19 |
  • 20 | } 21 | } 22 | else 23 | { 24 | @Html.MenuItem(Mvc.Root.EmailAccount_Login, linkClasses: Model) 25 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/NotFound.cshtml: -------------------------------------------------------------------------------- 1 | @if(this.Context.Request.IsAjaxRequest()) 2 | { 3 | Layout = null; 4 | } 5 |
    6 |

    Sorry the page you requested was not found.

    7 |

    The error has been recorded in our logs for diagnostics. Please contact us to help solve the problem quickly.

    8 |
    -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Templates/GoogleAnalytics.cshtml: -------------------------------------------------------------------------------- 1 | @inject ProjectSettings config 2 | 7 | 8 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Templates/PageContainerLeft.cshtml: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | @FieldTemplateModel.InnerTemplateMarker 5 |
    6 |
    7 |
    -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Templates/PageContainerTop.cshtml: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | @FieldTemplateModel.InnerTemplateMarker 5 |
    6 |
    7 |
    -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Templates/PageMessage.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | bool hasDynamic = false; 3 | } 4 | @foreach (var key in TempData.Keys) 5 | { 6 | if (key.StartsWith("PageMessage_")) 7 | { 8 | var message = ((string)TempData[key]).FromJson(); 9 | if (!message.IsStatic) { hasDynamic = true; } 10 |
    11 | 12 | @if (message.IsHtml) 13 | { 14 | @Html.Raw(message.Message) 15 | } 16 | else 17 | { 18 | @message.Message 19 | } 20 |
    21 | } 22 | } 23 | @if (hasDynamic) 24 | { 25 | @Html.RegisterCustomSection( 26 | "scripts", 27 | new Guid("8256BBE9-6A9D-493F-A1F6-2EA662BB8A56"), 28 | @ 35 | ); 36 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Shared/Templates/ValidationSummary.cshtml: -------------------------------------------------------------------------------- 1 |
    2 | @Html.ValidationSummary() 3 |
    -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/Sms/User/OneTimePassword.cshtml: -------------------------------------------------------------------------------- 1 | @model RazorTemplateDataModel 2 | @inject ProjectSettings config 3 | @{ 4 | Layout = null; 5 | } 6 | Your one time code is @Model.Data.Code -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using ChilliCoreTemplate.Web 2 | @using ChilliCoreTemplate.Models 3 | @using ChilliCoreTemplate.Models.Admin 4 | @using ChilliCoreTemplate.Models.EmailAccount 5 | @using ChilliCoreTemplate.Models.Api 6 | @using ChilliSource.Core.Extensions 7 | @using ChilliSource.Cloud.Core 8 | @using ChilliSource.Cloud.Web 9 | @using ChilliSource.Cloud.Web.MVC 10 | @using ChilliSource.Cloud.Web.MVC.Misc 11 | @using Microsoft.AspNetCore.Hosting 12 | @using Microsoft.AspNetCore.Html 13 | @using Microsoft.Extensions.Hosting; 14 | @using SixLabors.ImageSharp.Processing 15 | @using StackExchange.Profiling 16 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 17 | @addTagHelper *, ChilliCoreTemplate.Web 18 | @addTagHelper *, MiniProfiler.AspNetCore.Mvc -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "Layout/_Layout"; 3 | } 4 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/bundleconfig.json.bindings: -------------------------------------------------------------------------------- 1 | produceoutput=false -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.0.0", 3 | "name": "ChilliCoreTemplate", 4 | "private": true, 5 | "devDependencies": { 6 | "del": "^6.1.1", 7 | "gulp": "^4.0.2", 8 | "gulp-concat": "^2.6.1", 9 | "gulp-cssmin": "^0.2.0", 10 | "gulp-htmlmin": "^5.0.1", 11 | "gulp-less": "^5.0.0", 12 | "gulp-sass": "^5.1.0", 13 | "gulp-terser": "^2.1.0", 14 | "merge-stream": "^2.0.0", 15 | "node-sass": "^7.0.1", 16 | "strip-json-comments": "^2.0.1" 17 | }, 18 | "scripts": { 19 | "install": "cd ./wwwroot && yarn install --modules-folder ./lib" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/web.config: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Generic/1by1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Generic/1by1.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Generic/4by3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Generic/4by3.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Generic/9by5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Generic/9by5.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Generic/GenericLogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Generic/GenericLogo.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Generic/default-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Generic/default-image.jpg -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Generic/default-profile-image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Generic/default-profile-image.jpg -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch--icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch--icon-57x57.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch--icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch--icon-72x72.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-114x114.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-120x120.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-152x152.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-180x180.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon-76x76.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/apple-touch-icon.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/favicon.ico -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/powered-by-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/powered-by-dark.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/Icons/powered-by-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/Icons/powered-by-light.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/bg-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/bg-image.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/imagesharp-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/imagesharp-logo.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/loading.gif -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Images/nav-user-bg-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Images/nav-user-bg-image.png -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Scripts/includeAll/app.js: -------------------------------------------------------------------------------- 1 | //Add your custom javascript that you wanted added to all pages here -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Scripts/includeAll/bindladda.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | Ladda.bind('.js-ladda-button'); 3 | }); -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Scripts/includeAll/googleTimezone.js: -------------------------------------------------------------------------------- 1 | async function getTimezoneId(address, key) { 2 | var data = { 3 | location: address.geometry.latitude + ',' + address.geometry.longitude, 4 | timestamp: Math.floor(Date.now() / 1000), 5 | sensor: false, 6 | key: key 7 | }; 8 | var timeZoneJson = await $.ajax({ 9 | url: 'https://maps.googleapis.com/maps/api/timezone/json', 10 | dataType: 'json', 11 | data: data 12 | }); 13 | return timeZoneJson.timeZoneId; 14 | } 15 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Scripts/inspinia/plugins/ladda/BC modification notes.txt: -------------------------------------------------------------------------------- 1 | Original 2 | 3 | if( typeof form !== 'undefined' && !form.hasAttribute('novalidate') ) { 4 | // Modern form validation 5 | if( typeof form.checkValidity === 'function' ) { 6 | valid = form.checkValidity(); 7 | } 8 | 9 | Changed 10 | 11 | if( typeof form !== 'undefined' /*&& !form.hasAttribute('novalidate')*/ ) { 12 | // Modern form validation 13 | if($) { 14 | valid = $(form).valid(); 15 | } 16 | 17 | 1. jquery validate adds attribute novalidate to the form 18 | 2. form.checkValidity() returns true for invalid forms replace with $('form').valid() -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Scripts/inspinia/plugins/ladda/ladda.jquery.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Ladda for jQuery 3 | * http://lab.hakim.se/ladda 4 | * MIT licensed 5 | * 6 | * Copyright (C) 2015 Hakim El Hattab, http://hakim.se 7 | */ 8 | 9 | (function( Ladda, $ ) { 10 | 'use strict'; 11 | 12 | if ($ === undefined) { 13 | return console.error( 'jQuery required for Ladda.jQuery' ); 14 | } 15 | 16 | var arr = []; 17 | 18 | $ = $.extend( $, { 19 | ladda: function( arg ) { 20 | if( arg === 'stopAll' ) { 21 | Ladda.stopAll(); 22 | } 23 | } 24 | }); 25 | 26 | $.fn = $.extend( $.fn, { 27 | ladda: function( arg ) { 28 | var args = arr.slice.call( arguments, 1 ); 29 | 30 | if( arg === 'bind' ) { 31 | args.unshift( $( this ).selector ); 32 | Ladda.bind.apply( Ladda, args ); 33 | } 34 | else if ( arg === 'isLoading' ) { 35 | var ladda = $(this).data( 'ladda' ); 36 | return ladda.isLoading(); 37 | } 38 | else { 39 | $( this ).each( function() { 40 | var $this = $( this ), ladda; 41 | 42 | if( arg === undefined ) { 43 | $this.data( 'ladda', Ladda.create( this ) ); 44 | } 45 | else { 46 | ladda = $this.data( 'ladda' ); 47 | ladda[arg].apply( ladda, args ); 48 | } 49 | }); 50 | } 51 | 52 | return this; 53 | } 54 | }); 55 | }( this.Ladda, this.jQuery )); -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/_app.scss: -------------------------------------------------------------------------------- 1 |  2 | // APPLICATION SPECIFIC CSS. 3 | // To be used this file must be uncommented out in Styles/style.scss 4 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/bootstrap-patch.scss: -------------------------------------------------------------------------------- 1 | $modal-lg: 900px !default; 2 | $modal-md: 600px !default; -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/fontawesome-patch.scss: -------------------------------------------------------------------------------- 1 | $fa-font-path: "fonts"; 2 | @import "../lib/@fortawesome/fontawesome-free/scss/solid.scss"; 3 | @import "../lib/@fortawesome/fontawesome-free/scss/regular.scss"; 4 | @import "../lib/@fortawesome/fontawesome-free/scss/fontawesome.scss"; 5 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/includeAll/readme.txt: -------------------------------------------------------------------------------- 1 | All .css files dropped into this folder will be included in the general css bundle -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/inspinia/base/custom.scss: -------------------------------------------------------------------------------- 1 | /* Only demo */ 2 | @media (max-width: 1000px) { 3 | .welcome-message { 4 | display: none; 5 | } 6 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/inspinia/base/mixins.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/Styles/inspinia/base/mixins.scss -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/inspinia/base/typography.scss: -------------------------------------------------------------------------------- 1 | h1, h2, h3, h4, h5, h6 { 2 | font-weight: 100; 3 | } 4 | 5 | .h1, .h2, .h3, h1, h2, h3 { 6 | margin-top: 20px; 7 | margin-bottom: 10px; 8 | } 9 | 10 | h1 { 11 | font-size: 30px; 12 | } 13 | 14 | h2 { 15 | font-size: 24px; 16 | } 17 | 18 | h3 { 19 | font-size: 16px; 20 | } 21 | 22 | h4 { 23 | font-size: 14px; 24 | } 25 | 26 | h5 { 27 | font-size: 12px; 28 | } 29 | 30 | h6 { 31 | font-size: 10px; 32 | } 33 | 34 | h3, h4, h5 { 35 | margin-top: 5px; 36 | font-weight: 600; 37 | } -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/inspinia/base/variables.scss: -------------------------------------------------------------------------------- 1 | // Basic Colors 2 | $navy: #1ab394; // Primary color 3 | $dark-gray: #c2c2c2; // Default color 4 | $blue: #1c84c6; // Success color 5 | $lazur: #23c6c8; // Info color 6 | $yellow: #f8ac59; // Warning color 7 | $red: #ED5565; // Danger color 8 | 9 | // Various colors 10 | $text-color: #676a6c; // Body text 11 | $gray: #f3f3f4; // Background wrapper color 12 | $light-gray: #D1DADE; // Default label, badge 13 | $label-badge-color: #5E5E5E; 14 | $light-blue:#f3f6fb; 15 | 16 | // Spinner color and margin 17 | $spin-color: $navy; 18 | $spin-margin: 0 auto; 19 | 20 | //Basics 21 | $basic-link-color: #337ab7; 22 | 23 | // IBOX colors ( default panel colors) 24 | $border-color: #e7eaec; // IBox border 25 | $ibox-title-bg:#ffffff; // IBox Background header 26 | $ibox-content-bg:#ffffff; // IBox Background content 27 | 28 | //Sidebar width 29 | $sidebar-width: 220px; 30 | 31 | // Boxed layout width 32 | $boxed-width: 1200px; 33 | $boxed-background: image-url('patterns/shattered.png'); 34 | 35 | //Border radius for buttons 36 | $btn-border-radius: 3px; 37 | 38 | //Navigation 39 | $nav-bg: #2F4050; 40 | $nav-profile-pattern: image-url("patterns/header-profile.png"); 41 | $nav-text-color: #a7b1c2; -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/Styles/style.scss: -------------------------------------------------------------------------------- 1 | //Inspinia 2 | /* 3 | How Inspinia Fits into the App 4 | ------------------------------- 5 | 6 | ~/Styles/inspina/base is untouched from the original installation (keep it that way!) 7 | However, the inspina stylesheet entry point is now ~ /Styles/inspinia/customised.scss. It's copied from ~/Styles/inspinia/style.scss and modified to: 8 | 9 | 1. Include the _patch and _app.scss files 10 | 2. _variables.scss is copied from the inspinia base dir and moved to ~ /Styles/inspinia/ - and will have more variables which are important to patch/app.scss 11 | 3. Remove uneeded styles: landing page 12 | 13 | */ 14 | @import "inspinia/customised"; 15 | 16 | //todo split out of inspinia patch non-inspinia style fixes and put into core 17 | @import "core"; 18 | 19 | @import "pull"; 20 | 21 | // App specific Styles 22 | //@import "app"; -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/ChilliCoreTemplate.Web/wwwroot/favicon.ico -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/index.html: -------------------------------------------------------------------------------- 1 |

    index

    -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "lib", 3 | "version": "1.0.0", 4 | "dependencies": { 5 | "popper.js": "1.15.0", 6 | "bootstrap": "4.3.1", 7 | "jquery": "3.4.1", 8 | "jquery-validation": "1.19.1", 9 | "jquery-validation-unobtrusive": "3.2.11", 10 | "@fortawesome/fontawesome-free": "5.15.1", 11 | "bootstrap-datepicker": "1.9.0", 12 | "chosen-js": "1.8.7", 13 | "bootstrap4c-chosen": "1.1.1", 14 | "select2": "4.0.11", 15 | "@ttskch/select2-bootstrap4-theme": "1.3.2", 16 | "icheck": "1.0.2", 17 | "summernote": "0.8.12", 18 | "cropit.jquery3": "0.1.2" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ChilliCoreTemplate.Web/wwwroot/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / -------------------------------------------------------------------------------- /ProjectSetup.bat: -------------------------------------------------------------------------------- 1 | .\tools\ProjectSetup\ProjectSetup.exe 2 | 3 | -------------------------------------------------------------------------------- /devops/.gitignore: -------------------------------------------------------------------------------- 1 | output/* 2 | !AwsSmtpCredential.exe -------------------------------------------------------------------------------- /devops/AWSCreateCommon.bat: -------------------------------------------------------------------------------- 1 | @echo OFF 2 | IF [%4] EQU [] goto :noparameter 3 | cmd /c "mkdir output" 2>NUL 4 | 5 | cmd /s /c "__bootstrapCLI.bat %1 %2 %3 "aws cloudformation deploy --template-file ./commonformation.json --stack-name Common --capabilities CAPABILITY_NAMED_IAM --parameter-overrides VpcId=%4"" 6 | 7 | goto :end 8 | :noparameter 9 | @echo OFF 10 | echo Command requires 4 parameters: 11 | echo key secret region vpcid 12 | goto :end 13 | :end 14 | SET AWS_ACCESS_KEY_ID= 15 | SET AWS_SECRET_ACCESS_KEY= 16 | SET AWS_DEFAULT_REGION= -------------------------------------------------------------------------------- /devops/AWSCreateKeys.bat: -------------------------------------------------------------------------------- 1 | @echo OFF 2 | IF [%3] EQU [] goto :noparameter 3 | cmd /c "mkdir output" 2>NUL 4 | 5 | echo Creating Access Keys... 6 | 7 | cmd /s /c "__bootstrapCLI.bat %1 %2 %3 "aws iam create-access-key --user-name S3User-dev" ./output/S3User-dev_AccessKey.json" >NUL 8 | cmd /s /c "__bootstrapCLI.bat %1 %2 %3 "aws iam create-access-key --user-name S3User-stg" ./output/S3User-stg_AccessKey.json" >NUL 9 | cmd /s /c "__bootstrapCLI.bat %1 %2 %3 "aws iam create-access-key --user-name S3User-prod" ./output/S3User-prod_AccessKey.json" >NUL 10 | cmd /s /c "__bootstrapCLI.bat %1 %2 %3 "aws iam create-access-key --user-name SESUser" ./output/SESUser_AccessKey.json" >NUL 11 | cmd /s /c "AwsSmtpCredential.exe -file ./output/SESUser_AccessKey.json > ./output/SESUser_SMTPPassword.txt" >NUL 12 | 13 | echo. 14 | echo Keys created at ./output/ 15 | 16 | goto :end 17 | :noparameter 18 | @echo OFF 19 | echo Command requires 3 parameters: 20 | echo key secret region 21 | goto :end 22 | :error 23 | @echo OFF 24 | echo Error level: %errorlevel% 25 | goto :end 26 | :end 27 | SET AWS_ACCESS_KEY_ID= 28 | SET AWS_SECRET_ACCESS_KEY= 29 | SET AWS_DEFAULT_REGION= -------------------------------------------------------------------------------- /devops/AWSFetchOutputs.bat: -------------------------------------------------------------------------------- 1 | ( 2 | __GetStackOutputs.bat %1 %2 %3 DataDev 3 | __GetStackOutputs.bat %1 %2 %3 WebDev 4 | __GetStackOutputs.bat %1 %2 %3 DataStg 5 | __GetStackOutputs.bat %1 %2 %3 WebStg 6 | __GetStackOutputs.bat %1 %2 %3 DataProd 7 | __GetStackOutputs.bat %1 %2 %3 WebProd 8 | ) -------------------------------------------------------------------------------- /devops/AwsSmtpCredential.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/devops/AwsSmtpCredential.exe -------------------------------------------------------------------------------- /devops/Newtonsoft.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/devops/Newtonsoft.Json.dll -------------------------------------------------------------------------------- /devops/__GetStackOutputs.bat: -------------------------------------------------------------------------------- 1 | @echo OFF 2 | IF [%4] EQU [] goto :noparameter 3 | 4 | __bootstrapCLI.bat %1 %2 %3 "aws cloudformation describe-stacks --stack-name %4 --query Stacks[0].Outputs" .\output\%4.Outputs.txt 5 | goto :end 6 | :noparameter 7 | @echo OFF 8 | echo Command requires 4 parameters: 9 | echo key secret region stackname 10 | :end -------------------------------------------------------------------------------- /devops/__bootstrapCLI.bat: -------------------------------------------------------------------------------- 1 | @echo OFF 2 | SET AWS_ACCESS_KEY_ID=%1 3 | SET AWS_SECRET_ACCESS_KEY=%2 4 | SET AWS_DEFAULT_REGION=%3 5 | 6 | IF [%4] EQU [] goto :noparameter 7 | 8 | :: Remove quotes 9 | SET __bootstrapCLICMD=###%4### 10 | SET __bootstrapCLICMD=%__bootstrapCLICMD:"###=% 11 | SET __bootstrapCLICMD=%__bootstrapCLICMD:###"=% 12 | SET __bootstrapCLICMD=%__bootstrapCLICMD:###=% 13 | 14 | IF [%5] EQU [] goto :runcommand 15 | %__bootstrapCLICMD% 1>%5 16 | goto :end 17 | 18 | :runcommand 19 | @echo ON 20 | %__bootstrapCLICMD% 21 | @echo OFF 22 | goto :end 23 | 24 | :noparameter 25 | @echo OFF 26 | echo Command requires 4 parameters: 27 | echo key secret region awscommand (outputFile) 28 | echo - outputFile is optional. 29 | :end 30 | @echo OFF 31 | SET AWS_ACCESS_KEY_ID= 32 | SET AWS_SECRET_ACCESS_KEY= 33 | SET AWS_DEFAULT_REGION= 34 | SET __bootstrapCLICMD= -------------------------------------------------------------------------------- /devops/__random.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | IF [%2] EQU [] goto :noparameter 3 | 4 | setlocal enableDelayedExpansion 5 | set "chars=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" 6 | set "name=" 7 | for /l %%N in (1 1 %1) do ( 8 | set /a I=!random!%%62 9 | for %%I in (!I!) do set "name=!name!!chars:~%%I,1!" 10 | ) 11 | endlocal & echo %name%%~x1>%2 12 | goto :end 13 | :noparameter 14 | @echo Usage: __random length outputFile 15 | :end -------------------------------------------------------------------------------- /devops/__randomKeys.bat: -------------------------------------------------------------------------------- 1 | @echo OFF 2 | 3 | REM This file is only needed to make sure we have a single SEED for creating RANDOM values. It avoids creating the same random numbers. 4 | cmd /c "mkdir output" 2>NUL 5 | 6 | ( 7 | __random.bat 8 ./output/runid.temp 8 | 9 | __random.bat 16 ./output/passwordkey_16_1.temp 10 | __random.bat 16 ./output/passwordkey_16_2.temp 11 | __random.bat 16 ./output/passwordkey_16_3.temp 12 | 13 | __random.bat 24 ./output/passwordvalue_24_1.temp 14 | __random.bat 24 ./output/passwordvalue_24_2.temp 15 | __random.bat 24 ./output/passwordvalue_24_3.temp 16 | ) -------------------------------------------------------------------------------- /devops/unpack-key.ps1: -------------------------------------------------------------------------------- 1 | param ( 2 | [Parameter(Mandatory = $true)][string]$keyFile 3 | ) 4 | 5 | $jsonKey = Get-Content $keyFile | ConvertFrom-Json 6 | 7 | $keyString = $jsonKey.KeyMaterial 8 | $name = $jsonKey.KeyName 9 | 10 | $key = $keyString.Replace("\n", "`n") 11 | 12 | $key > "output/$($name).pem" -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "6.0.100", 4 | "allowPrerelease": false, 5 | "rollForward": "latestMinor" 6 | } 7 | } -------------------------------------------------------------------------------- /serverless/pdfgen/.gitignore: -------------------------------------------------------------------------------- 1 | # package directories 2 | node_modules 3 | jspm_packages 4 | 5 | # Serverless directories 6 | .serverless 7 | tmp/** 8 | !wkhtmltopdf.exe -------------------------------------------------------------------------------- /serverless/pdfgen/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pdfgen", 3 | "version": "0.1.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "is-stream": { 8 | "version": "1.1.0", 9 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 10 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 11 | }, 12 | "memorystream": { 13 | "version": "0.3.1", 14 | "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", 15 | "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=" 16 | }, 17 | "slang": { 18 | "version": "0.3.0", 19 | "resolved": "https://registry.npmjs.org/slang/-/slang-0.3.0.tgz", 20 | "integrity": "sha1-E691tPDAGMaoGT1wT2WyO+T7q9w=" 21 | }, 22 | "wkhtmltopdf": { 23 | "version": "0.3.4", 24 | "resolved": "https://registry.npmjs.org/wkhtmltopdf/-/wkhtmltopdf-0.3.4.tgz", 25 | "integrity": "sha1-4ttUKn3CJIAyvxNnVLXN188oFfA=", 26 | "requires": { 27 | "is-stream": "^1.0.1", 28 | "slang": ">=0.2" 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /serverless/pdfgen/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pdfgen", 3 | "version": "0.1.0", 4 | "dependencies": { 5 | "wkhtmltopdf": "^0.3.4", 6 | "memorystream": "^0.3.1" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /serverless/pdfgen/wkhtmltopdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/serverless/pdfgen/wkhtmltopdf -------------------------------------------------------------------------------- /serverless/pdfgen/wkhtmltopdf.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/serverless/pdfgen/wkhtmltopdf.exe -------------------------------------------------------------------------------- /tools/AwsSmtpCredential/.gitignore: -------------------------------------------------------------------------------- 1 | !AwsSmtpCredential.exe -------------------------------------------------------------------------------- /tools/AwsSmtpCredential/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tools/AwsSmtpCredential/AwsSmtpCredential.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/tools/AwsSmtpCredential/AwsSmtpCredential.exe -------------------------------------------------------------------------------- /tools/AwsSmtpCredential/AwsSmtpCredential.exe.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tools/AwsSmtpCredential/AwsSmtpCredential.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27130.2027 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AwsSmtpCredential", "AwsSmtpCredential.csproj", "{725221E7-88FB-44CE-A8F5-F60499357CF2}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {725221E7-88FB-44CE-A8F5-F60499357CF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {725221E7-88FB-44CE-A8F5-F60499357CF2}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {725221E7-88FB-44CE-A8F5-F60499357CF2}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {725221E7-88FB-44CE-A8F5-F60499357CF2}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {6EC497BA-0C7C-4932-93CB-CECF2F9EE65B} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /tools/AwsSmtpCredential/Newtonsoft.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/tools/AwsSmtpCredential/Newtonsoft.Json.dll -------------------------------------------------------------------------------- /tools/AwsSmtpCredential/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /tools/CodeCloner/.gitignore: -------------------------------------------------------------------------------- 1 | !ProjectSetup.exe -------------------------------------------------------------------------------- /tools/CodeCloner/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tools/CodeCloner/CodeCloner.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27130.2027 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeCloner", "CodeCloner.csproj", "{AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {2B479ED3-F78D-4DA7-855B-82E486E268DD} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /tools/CodeCloner/ExecutionLogger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace CodeCloner 8 | { 9 | public class ExecutionLogger 10 | { 11 | public delegate void LogDelegate(string text); 12 | LogDelegate _logAction; 13 | 14 | public ExecutionLogger(LogDelegate logAction) 15 | { 16 | _logAction = logAction; 17 | } 18 | 19 | public void Log(string text) 20 | { 21 | _logAction(text); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tools/CodeCloner/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace CodeCloner 9 | { 10 | static class Program 11 | { 12 | /// 13 | /// The main entry point for the application. 14 | /// 15 | [STAThread] 16 | static void Main(params string[] args) 17 | { 18 | var directoryArg = "-directory="; 19 | 20 | var directory = args.Where(s => s.StartsWith(directoryArg, StringComparison.OrdinalIgnoreCase)) 21 | .Select(s => s.Substring(directoryArg.Length).Trim()).FirstOrDefault(); 22 | 23 | directory = String.IsNullOrEmpty(directory) ? Environment.CurrentDirectory : Path.GetFullPath(directory); 24 | 25 | Application.EnableVisualStyles(); 26 | Application.SetCompatibleTextRenderingDefault(false); 27 | Application.Run(new MainForm() { BaseDirectory = directory }); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tools/CodeCloner/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace CodeCloner.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.7.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /tools/CodeCloner/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tools/ProjectSetup/.gitignore: -------------------------------------------------------------------------------- 1 | !ProjectSetup.exe -------------------------------------------------------------------------------- /tools/ProjectSetup/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tools/ProjectSetup/ExecutionLogger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace ProjectSetup 8 | { 9 | public class ExecutionLogger 10 | { 11 | public delegate void LogDelegate(string text); 12 | LogDelegate _logAction; 13 | 14 | public ExecutionLogger(LogDelegate logAction) 15 | { 16 | _logAction = logAction; 17 | } 18 | 19 | public void Log(string text) 20 | { 21 | _logAction(text); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /tools/ProjectSetup/Newtonsoft.Json.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/tools/ProjectSetup/Newtonsoft.Json.dll -------------------------------------------------------------------------------- /tools/ProjectSetup/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace ProjectSetup 9 | { 10 | static class Program 11 | { 12 | /// 13 | /// The main entry point for the application. 14 | /// 15 | [STAThread] 16 | static void Main(params string[] args) 17 | { 18 | var directoryArg = "-directory="; 19 | 20 | var directory = args.Where(s => s.StartsWith(directoryArg, StringComparison.OrdinalIgnoreCase)) 21 | .Select(s => s.Substring(directoryArg.Length).Trim()).FirstOrDefault(); 22 | 23 | directory = String.IsNullOrEmpty(directory) ? Environment.CurrentDirectory : Path.GetFullPath(directory); 24 | 25 | Application.EnableVisualStyles(); 26 | Application.SetCompatibleTextRenderingDefault(false); 27 | Application.Run(new MainForm() { BaseDirectory = directory }); 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tools/ProjectSetup/ProjectSetup.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BlueChilli/ChilliCoreTemplate/97e4d622dae1da3a63a6531b0004f0acd498263a/tools/ProjectSetup/ProjectSetup.exe -------------------------------------------------------------------------------- /tools/ProjectSetup/ProjectSetup.exe.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /tools/ProjectSetup/ProjectSetup.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27130.2027 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectSetup", "ProjectSetup.csproj", "{AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {AEE3268A-EFC6-4AD1-B877-8AAAE8749E71}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {2B479ED3-F78D-4DA7-855B-82E486E268DD} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /tools/ProjectSetup/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace ProjectSetup.Properties 12 | { 13 | 14 | 15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] 17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase 18 | { 19 | 20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 21 | 22 | public static Settings Default 23 | { 24 | get 25 | { 26 | return defaultInstance; 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /tools/ProjectSetup/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /tools/ProjectSetup/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | --------------------------------------------------------------------------------