├── .gitignore ├── LICENSE ├── README.md ├── _screenshots ├── home.png ├── login.png ├── swagger.png └── user-create-modal.png ├── angular ├── .angular-cli.json ├── .editorconfig ├── .gitignore ├── .vscode │ └── settings.json ├── Dockerfile ├── README.md ├── debug.log ├── e2e │ ├── app.e2e-spec.ts │ ├── app.po.ts │ └── tsconfig.json ├── karma.conf.js ├── nswag │ ├── refresh.bat │ ├── service.config.nswag │ └── service.extensions.ts ├── package-lock.json ├── package.json ├── protractor.conf.js ├── src │ ├── AppPreBootstrap.ts │ ├── account │ │ ├── account-routing.module.ts │ │ ├── account.component.html │ │ ├── account.component.less │ │ ├── account.component.ts │ │ ├── account.module.ts │ │ ├── layout │ │ │ ├── account-languages.component.html │ │ │ ├── account-languages.component.less │ │ │ └── account-languages.component.ts │ │ ├── login │ │ │ ├── login.component.html │ │ │ ├── login.component.less │ │ │ ├── login.component.ts │ │ │ └── login.service.ts │ │ ├── register │ │ │ ├── register.component.html │ │ │ └── register.component.ts │ │ └── tenant │ │ │ ├── tenant-change-modal.component.html │ │ │ ├── tenant-change-modal.component.ts │ │ │ ├── tenant-change.component.html │ │ │ └── tenant-change.component.ts │ ├── app │ │ ├── app-routing.module.ts │ │ ├── app.component.html │ │ ├── app.component.spec.ts │ │ ├── app.component.ts │ │ ├── app.module.ts │ │ ├── demo │ │ │ └── table │ │ │ │ ├── table-data.ts │ │ │ │ ├── table.component.html │ │ │ │ └── table.component.ts │ │ ├── layout │ │ │ ├── right-sidebar.component.html │ │ │ ├── right-sidebar.component.ts │ │ │ ├── sidebar-footer.component.html │ │ │ ├── sidebar-footer.component.ts │ │ │ ├── sidebar-nav.component.html │ │ │ ├── sidebar-nav.component.ts │ │ │ ├── sidebar-user-area.component.html │ │ │ ├── sidebar-user-area.component.ts │ │ │ ├── topbar-languageswitch.component.html │ │ │ ├── topbar-languageswitch.component.ts │ │ │ ├── topbar.component.html │ │ │ └── topbar.component.ts │ │ ├── pages │ │ │ ├── about │ │ │ │ ├── about.component.html │ │ │ │ └── about.component.ts │ │ │ └── home │ │ │ │ ├── home.component.html │ │ │ │ └── home.component.ts │ │ └── system │ │ │ ├── roles │ │ │ ├── create-role.component.html │ │ │ ├── create-role.component.ts │ │ │ ├── edit-role.component.html │ │ │ ├── edit-role.component.ts │ │ │ ├── roles.component.html │ │ │ └── roles.component.ts │ │ │ ├── tenants │ │ │ ├── create-tenant.component.html │ │ │ ├── create-tenant.component.ts │ │ │ ├── edit-tenant.component.html │ │ │ ├── edit-tenant.component.ts │ │ │ ├── tenants.component.html │ │ │ └── tenants.component.ts │ │ │ └── users │ │ │ ├── create-user.component.html │ │ │ ├── create-user.component.ts │ │ │ ├── edit-user.component.html │ │ │ ├── edit-user.component.ts │ │ │ ├── users.component.html │ │ │ └── users.component.ts │ ├── assets │ │ ├── .gitkeep │ │ ├── app-logo-small.png │ │ ├── appconfig.json │ │ ├── fonts │ │ │ ├── material-icons │ │ │ │ └── materialicons.woff2 │ │ │ └── roboto │ │ │ │ ├── -2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2 │ │ │ │ ├── 77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ │ ├── 97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ │ ├── CWB0XYA8bzo0kSThX0UTuA.woff2 │ │ │ │ ├── Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2 │ │ │ │ ├── NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2 │ │ │ │ ├── PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ │ ├── UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ │ ├── d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2 │ │ │ │ ├── ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2 │ │ │ │ ├── isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ │ ├── jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ │ ├── mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2 │ │ │ │ ├── roboto.css │ │ │ │ └── u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2 │ │ └── images │ │ │ └── user.png │ ├── bsb-theme │ │ ├── css │ │ │ ├── materialize.css │ │ │ ├── style.css │ │ │ ├── style.min.css │ │ │ └── themes │ │ │ │ ├── all-themes.css │ │ │ │ ├── all-themes.min.css │ │ │ │ ├── theme-amber.css │ │ │ │ ├── theme-amber.min.css │ │ │ │ ├── theme-black.css │ │ │ │ ├── theme-black.min.css │ │ │ │ ├── theme-blue-grey.css │ │ │ │ ├── theme-blue-grey.min.css │ │ │ │ ├── theme-blue.css │ │ │ │ ├── theme-blue.min.css │ │ │ │ ├── theme-brown.css │ │ │ │ ├── theme-brown.min.css │ │ │ │ ├── theme-cyan.css │ │ │ │ ├── theme-cyan.min.css │ │ │ │ ├── theme-deep-orange.css │ │ │ │ ├── theme-deep-orange.min.css │ │ │ │ ├── theme-deep-purple.css │ │ │ │ ├── theme-deep-purple.min.css │ │ │ │ ├── theme-green.css │ │ │ │ ├── theme-green.min.css │ │ │ │ ├── theme-grey.css │ │ │ │ ├── theme-grey.min.css │ │ │ │ ├── theme-indigo.css │ │ │ │ ├── theme-indigo.min.css │ │ │ │ ├── theme-light-blue.css │ │ │ │ ├── theme-light-blue.min.css │ │ │ │ ├── theme-lime.css │ │ │ │ ├── theme-lime.min.css │ │ │ │ ├── theme-orange.css │ │ │ │ ├── theme-orange.min.css │ │ │ │ ├── theme-pink.css │ │ │ │ ├── theme-pink.min.css │ │ │ │ ├── theme-purple.css │ │ │ │ ├── theme-purple.min.css │ │ │ │ ├── theme-red.css │ │ │ │ ├── theme-red.min.css │ │ │ │ ├── theme-teal.css │ │ │ │ ├── theme-teal.min.css │ │ │ │ ├── theme-yellow.css │ │ │ │ └── theme-yellow.min.css │ │ ├── images │ │ │ └── user-img-background.jpg │ │ └── js │ │ │ ├── admin.js │ │ │ ├── demo.js │ │ │ ├── helpers.js │ │ │ └── jquery.validate.js │ ├── environments │ │ ├── environment.hmr.ts │ │ ├── environment.prod.ts │ │ └── environment.ts │ ├── favicon.ico │ ├── framework │ │ ├── studiox-ng2-module │ │ │ ├── build.bat │ │ │ ├── dist │ │ │ │ ├── index.d.ts │ │ │ │ ├── index.js │ │ │ │ ├── index.js.map │ │ │ │ └── src │ │ │ │ │ ├── auth │ │ │ │ │ ├── permission-checker.service.d.ts │ │ │ │ │ ├── permission-checker.service.js │ │ │ │ │ ├── permission-checker.service.js.map │ │ │ │ │ ├── token.service.d.ts │ │ │ │ │ ├── token.service.js │ │ │ │ │ └── token.service.js.map │ │ │ │ │ ├── features │ │ │ │ │ ├── feature-checker.service.js │ │ │ │ │ └── feature-checker.service.js.map │ │ │ │ │ ├── localization │ │ │ │ │ ├── localization.service.js │ │ │ │ │ └── localization.service.js.map │ │ │ │ │ ├── log │ │ │ │ │ ├── log.service.d.ts │ │ │ │ │ ├── log.service.js │ │ │ │ │ └── log.service.js.map │ │ │ │ │ ├── message │ │ │ │ │ ├── message.service.d.ts │ │ │ │ │ ├── message.service.js │ │ │ │ │ └── message.service.js.map │ │ │ │ │ ├── multi-tenancy │ │ │ │ │ ├── studiox-multi-tenancy.service.d.ts │ │ │ │ │ ├── studiox-multi-tenancy.service.js │ │ │ │ │ └── studiox-multi-tenancy.service.js.map │ │ │ │ │ ├── notify │ │ │ │ │ ├── notify.service.d.ts │ │ │ │ │ ├── notify.service.js │ │ │ │ │ └── notify.service.js.map │ │ │ │ │ ├── session │ │ │ │ │ ├── studiox-session.service.js │ │ │ │ │ └── studiox-session.service.js.map │ │ │ │ │ ├── settings │ │ │ │ │ ├── setting.service.d.ts │ │ │ │ │ ├── setting.service.js │ │ │ │ │ └── setting.service.js.map │ │ │ │ │ ├── studiox-user-configuration.service.d.ts │ │ │ │ │ ├── studiox-user-configuration.service.js │ │ │ │ │ ├── studiox-user-configuration.service.js.map │ │ │ │ │ ├── studiox.module.d.ts │ │ │ │ │ ├── studiox.module.js │ │ │ │ │ ├── studiox.module.js.map │ │ │ │ │ ├── studioxHttp.d.ts │ │ │ │ │ ├── studioxHttp.js │ │ │ │ │ ├── studioxHttp.js.map │ │ │ │ │ └── utils │ │ │ │ │ ├── utils.service.d.ts │ │ │ │ │ ├── utils.service.js │ │ │ │ │ └── utils.service.js.map │ │ │ ├── index.ts │ │ │ ├── rollup.config.js │ │ │ └── src │ │ │ │ ├── auth │ │ │ │ ├── permission-checker.service.ts │ │ │ │ └── token.service.ts │ │ │ │ ├── features │ │ │ │ └── feature-checker.service.ts │ │ │ │ ├── index.ts │ │ │ │ ├── localization │ │ │ │ └── localization.service.ts │ │ │ │ ├── log │ │ │ │ └── log.service.ts │ │ │ │ ├── message │ │ │ │ └── message.service.ts │ │ │ │ ├── multi-tenancy │ │ │ │ └── studiox-multi-tenancy.service.ts │ │ │ │ ├── notify │ │ │ │ └── notify.service.ts │ │ │ │ ├── session │ │ │ │ └── studiox-session.service.ts │ │ │ │ ├── settings │ │ │ │ └── setting.service.ts │ │ │ │ ├── studiox-user-configuration.service.ts │ │ │ │ ├── studiox.module.ngfactory.ts │ │ │ │ ├── studiox.module.ts │ │ │ │ ├── studioxHttp.ts │ │ │ │ ├── tsconfig.json │ │ │ │ └── utils │ │ │ │ └── utils.service.ts │ │ ├── studiox-table │ │ │ ├── studiox-table-directives.d.ts │ │ │ ├── studiox-table-directives.js │ │ │ ├── studiox-table-directives.metadata.json │ │ │ ├── studiox-table-directives.ts │ │ │ ├── studiox-table-module.d.ts │ │ │ ├── studiox-table-module.js │ │ │ ├── studiox-table-module.metadata.json │ │ │ ├── studiox-table-module.ts │ │ │ └── table │ │ │ │ ├── readme.md │ │ │ │ ├── studiox-table-filtering.directive.d.ts │ │ │ │ ├── studiox-table-filtering.directive.js │ │ │ │ ├── studiox-table-filtering.directive.metadata.json │ │ │ │ ├── studiox-table-filtering.directive.ts │ │ │ │ ├── studiox-table-paging.directive.d.ts │ │ │ │ ├── studiox-table-paging.directive.js │ │ │ │ ├── studiox-table-paging.directive.metadata.json │ │ │ │ ├── studiox-table-paging.directive.ts │ │ │ │ ├── studiox-table-sorting.directive.d.ts │ │ │ │ ├── studiox-table-sorting.directive.js │ │ │ │ ├── studiox-table-sorting.directive.metadata.json │ │ │ │ ├── studiox-table-sorting.directive.ts │ │ │ │ ├── studiox-table.component.d.ts │ │ │ │ ├── studiox-table.component.js │ │ │ │ ├── studiox-table.component.metadata.json │ │ │ │ ├── studiox-table.component.spec.ts │ │ │ │ └── studiox-table.component.ts │ │ └── studiox │ │ │ ├── scripts │ │ │ ├── libs │ │ │ │ ├── requirejs │ │ │ │ │ └── plugins │ │ │ │ │ │ └── service.js │ │ │ │ ├── studiox.blockUI.js │ │ │ │ ├── studiox.jquery.d.ts │ │ │ │ ├── studiox.jquery.js │ │ │ │ ├── studiox.jtable.js │ │ │ │ ├── studiox.moment.js │ │ │ │ ├── studiox.signalr.d.ts │ │ │ │ ├── studiox.signalr.js │ │ │ │ ├── studiox.spin.js │ │ │ │ ├── studiox.sweet-alert.js │ │ │ │ ├── studiox.toastr.js │ │ │ │ └── utils │ │ │ │ │ └── ie10fix.js │ │ │ ├── studiox.d.ts │ │ │ └── studiox.js │ │ │ └── styles │ │ │ ├── studiox.css │ │ │ ├── studiox.css.map │ │ │ ├── studiox.less │ │ │ ├── studiox.min.css │ │ │ ├── studiox.mixings.css │ │ │ ├── studiox.mixings.css.map │ │ │ ├── studiox.mixings.less │ │ │ ├── studiox.mixings.min.css │ │ │ └── utils │ │ │ └── ie10fix.css │ ├── hmr.ts │ ├── index.html │ ├── main.ts │ ├── polyfills.ts │ ├── root-routing.module.ts │ ├── root.component.ts │ ├── root.module.ts │ ├── shared │ │ ├── AppConsts.ts │ │ ├── AppEnums.ts │ │ ├── animations │ │ │ └── routerTransition.ts │ │ ├── app-component-base.ts │ │ ├── auth │ │ │ ├── app-auth.service.ts │ │ │ └── auth-route-guard.ts │ │ ├── core.less │ │ ├── helpers │ │ │ ├── SignalRHelper.ts │ │ │ └── UrlHelper.ts │ │ ├── layout │ │ │ └── menu-item.ts │ │ ├── nav │ │ │ └── app-url.service.ts │ │ ├── paged-listing-component-base.ts │ │ ├── service-proxies │ │ │ ├── service-proxies.ts │ │ │ └── service-proxy.module.ts │ │ ├── session │ │ │ └── app-session.service.ts │ │ └── shared.module.ts │ ├── test.ts │ ├── tsconfig.json │ └── typings.d.ts ├── tslint.json └── yarn.lock ├── aspnet-core ├── .gitattributes ├── .gitignore ├── StudioX.Boilerplate.sln ├── build │ ├── build-mvc.ps1 │ └── build-with-ng.ps1 ├── src │ ├── StudioX.Boilerplate.Application │ │ ├── AppConsts.cs │ │ ├── AuditLogs │ │ │ ├── AuditLogAppService.cs │ │ │ ├── Dto │ │ │ │ ├── AuditLogDto.cs │ │ │ │ ├── AuditLogListDto.cs │ │ │ │ └── GetAuditLogsInput.cs │ │ │ └── IAuditLogAppService.cs │ │ ├── Authorization │ │ │ ├── Accounts │ │ │ │ ├── AccountAppService.cs │ │ │ │ ├── Dto │ │ │ │ │ ├── IsTenantAvailableInput.cs │ │ │ │ │ ├── IsTenantAvailableOutput.cs │ │ │ │ │ ├── RegisterInput.cs │ │ │ │ │ ├── RegisterOutput.cs │ │ │ │ │ └── TenantAvailabilityState.cs │ │ │ │ └── IAccountAppService.cs │ │ │ └── StudioXLoginResultTypeHelper.cs │ │ ├── BaseModel │ │ │ └── InputConstant.cs │ │ ├── BoilerplateAppServiceBase.cs │ │ ├── BoilerplateApplicationModule.cs │ │ ├── Configuration │ │ │ ├── BoilerplateSettingProvider.cs │ │ │ ├── ConfigurationAppService.cs │ │ │ ├── Dto │ │ │ │ └── ChangeUiThemeInput.cs │ │ │ ├── IConfigurationAppService.cs │ │ │ └── Ui │ │ │ │ ├── UiThemeInfo.cs │ │ │ │ └── UiThemes.cs │ │ ├── MultiTenancy │ │ │ ├── Dto │ │ │ │ ├── CreateTenantInput.cs │ │ │ │ ├── TenantDto.cs │ │ │ │ └── UpdateTenantInput.cs │ │ │ ├── ITenantAppService.cs │ │ │ └── TenantAppService.cs │ │ ├── Net │ │ │ └── MimeTypes │ │ │ │ └── MimeTypeNames.cs │ │ ├── Permissions │ │ │ ├── Dto │ │ │ │ └── PermissionDto.cs │ │ │ ├── IPermissionAppService.cs │ │ │ └── PermissionAppService.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Roles │ │ │ ├── Dto │ │ │ │ ├── CreateRoleInput.cs │ │ │ │ ├── GetRolesInput.cs │ │ │ │ ├── RoleDto.cs │ │ │ │ ├── RoleMapProfile.cs │ │ │ │ ├── UpdateRoleInput.cs │ │ │ │ └── UpdateRolePermissionsInput.cs │ │ │ ├── IRoleAppService.cs │ │ │ └── RoleAppService.cs │ │ ├── Sessions │ │ │ ├── Dto │ │ │ │ ├── ApplicationInfoDto.cs │ │ │ │ ├── GetCurrentLoginInformationsOutput.cs │ │ │ │ ├── TenantLoginInfoDto.cs │ │ │ │ └── UserLoginInfoDto.cs │ │ │ ├── ISessionAppService.cs │ │ │ └── SessionAppService.cs │ │ ├── Settings │ │ │ ├── Dto │ │ │ │ ├── DefaultPasswordComplexityDto.cs │ │ │ │ ├── PasswordComplexityDto.cs │ │ │ │ ├── SettingDto.cs │ │ │ │ ├── UserLockOutDto.cs │ │ │ │ └── UserManagementDto.cs │ │ │ ├── ISettingAppService.cs │ │ │ └── SettingAppService.cs │ │ ├── SignalR │ │ │ └── SignalRFeature.cs │ │ ├── StudioX.Boilerplate.Application.csproj │ │ ├── UserProfile │ │ │ ├── Dto │ │ │ │ ├── ChangePasswordInput.cs │ │ │ │ ├── UpdateUserProfileInput.cs │ │ │ │ └── UserProfileInfoDto.cs │ │ │ ├── IUserProfileAppService.cs │ │ │ └── UserProfileAppService.cs │ │ └── Users │ │ │ ├── Dto │ │ │ ├── ChangeUserPasswordInput.cs │ │ │ ├── CreateUserInput.cs │ │ │ ├── GetUsersInput.cs │ │ │ ├── ProhibitPermissionInput.cs │ │ │ ├── UpdateUserInput.cs │ │ │ ├── UserDto.cs │ │ │ ├── UserMapProfile.cs │ │ │ ├── UserPermissionsDto.cs │ │ │ └── UserPermissionsInput.cs │ │ │ ├── IUserAppService.cs │ │ │ └── UserAppService.cs │ ├── StudioX.Boilerplate.Core │ │ ├── AppVersionHelper.cs │ │ ├── Authorization │ │ │ ├── BoilerplateAuthorizationProvider.cs │ │ │ ├── LoginManager.cs │ │ │ ├── MenuText.cs │ │ │ ├── Modules │ │ │ │ ├── GeneralPagesAuthorizationProvider.cs │ │ │ │ ├── ModuleAuthorizationProvider.cs │ │ │ │ └── SystemModuleAuthorizationProvider.cs │ │ │ ├── PermissionChecker.cs │ │ │ ├── PermissionNames.cs │ │ │ ├── Roles │ │ │ │ ├── AppRoleConfig.cs │ │ │ │ ├── Role.cs │ │ │ │ ├── RoleManager.cs │ │ │ │ ├── RoleStore.cs │ │ │ │ └── StaticRoleNames.cs │ │ │ └── Users │ │ │ │ ├── User.cs │ │ │ │ ├── UserClaimsPrincipalFactory.cs │ │ │ │ ├── UserManager.cs │ │ │ │ ├── UserRegistrationManager.cs │ │ │ │ └── UserStore.cs │ │ ├── BoilerplateConsts.cs │ │ ├── BoilerplateCoreModule.cs │ │ ├── Configuration │ │ │ ├── AppConfigurations.cs │ │ │ ├── AppSettingNames.cs │ │ │ └── AppSettingProvider.cs │ │ ├── Editions │ │ │ └── EditionManager.cs │ │ ├── Features │ │ │ └── FeatureValueStore.cs │ │ ├── Identity │ │ │ ├── IdentityRegistrar.cs │ │ │ ├── SecurityStampValidator.cs │ │ │ └── SignInManager.cs │ │ ├── Localization │ │ │ ├── BoilerplateLocalizationConfigurer.cs │ │ │ └── SourceFiles │ │ │ │ ├── Boilerplate-es.xml │ │ │ │ ├── Boilerplate-fr.xml │ │ │ │ ├── Boilerplate-it.xml │ │ │ │ ├── Boilerplate-ja.xml │ │ │ │ ├── Boilerplate-lt.xml │ │ │ │ ├── Boilerplate-nl-NL.xml │ │ │ │ ├── Boilerplate-pt-BR.xml │ │ │ │ ├── Boilerplate-tr.xml │ │ │ │ ├── Boilerplate-vi.xml │ │ │ │ ├── Boilerplate-zh-CN.xml │ │ │ │ └── Boilerplate.xml │ │ ├── MultiTenancy │ │ │ ├── Tenant.cs │ │ │ └── TenantManager.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Boilerplate.Core.csproj │ │ ├── Timing │ │ │ └── AppTimes.cs │ │ ├── Validation │ │ │ └── ValidationHelper.cs │ │ └── Web │ │ │ └── WebContentFolderHelper.cs │ ├── StudioX.Boilerplate.EntityFrameworkCore │ │ ├── EntityFrameworkCore │ │ │ ├── BoilerplateDbContext.cs │ │ │ ├── BoilerplateDbContextConfigurer.cs │ │ │ ├── BoilerplateDbContextFactory.cs │ │ │ ├── BoilerplateEntityFrameworkModule.cs │ │ │ ├── Repositories │ │ │ │ └── StudioXZeroTemplateRepositoryBase.cs │ │ │ ├── Seed │ │ │ │ ├── Host │ │ │ │ │ ├── DefaultEditionCreator.cs │ │ │ │ │ ├── DefaultLanguagesCreator.cs │ │ │ │ │ ├── DefaultSettingsCreator.cs │ │ │ │ │ ├── HostRoleAndUserCreator.cs │ │ │ │ │ └── InitialHostDbBuilder.cs │ │ │ │ ├── SeedHelper.cs │ │ │ │ └── Tenants │ │ │ │ │ ├── DefaultTenantBuilder.cs │ │ │ │ │ └── TenantRoleAndUserBuilder.cs │ │ │ └── StudioXZeroDbMigrator.cs │ │ ├── Migrations │ │ │ ├── 20170611171650_InitialCreate.Designer.cs │ │ │ ├── 20170611171650_InitialCreate.cs │ │ │ ├── 20170629200054_UpdateMaxLengthUsersTable.Designer.cs │ │ │ ├── 20170629200054_UpdateMaxLengthUsersTable.cs │ │ │ ├── 20170705193650_AddSoftDeleteUserOrganizationUnit.Designer.cs │ │ │ ├── 20170705193650_AddSoftDeleteUserOrganizationUnit.cs │ │ │ ├── 20170705211834_AddDescriptionAndIsActiveToRole.Designer.cs │ │ │ ├── 20170705211834_AddDescriptionAndIsActiveToRole.cs │ │ │ └── BoilerplateDbContextModelSnapshot.cs │ │ └── StudioX.Boilerplate.EntityFrameworkCore.csproj │ ├── StudioX.Boilerplate.Migrator │ │ ├── BoilerplateMigratorModule.cs │ │ ├── DependencyInjection │ │ │ └── ServiceCollectionRegistrar.cs │ │ ├── Log.cs │ │ ├── MultiTenantMigrateExecuter.cs │ │ ├── Program.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Boilerplate.Migrator.csproj │ │ ├── appsettings.json │ │ └── log4net.config │ ├── StudioX.Boilerplate.Web.Core │ │ ├── Authentication │ │ │ ├── External │ │ │ │ ├── ExternalAuthConfiguration.cs │ │ │ │ ├── ExternalAuthManager.cs │ │ │ │ ├── ExternalAuthProviderApiBase.cs │ │ │ │ ├── ExternalAuthUserInfo.cs │ │ │ │ ├── ExternalLoginProviderInfo.cs │ │ │ │ ├── Facebook │ │ │ │ │ └── FacebookAuthProviderApi.cs │ │ │ │ ├── Google │ │ │ │ │ └── GoogleAuthProviderApi.cs │ │ │ │ ├── IExternalAuthConfiguration.cs │ │ │ │ ├── IExternalAuthManager.cs │ │ │ │ └── IExternalAuthProviderApi.cs │ │ │ └── JwtBearer │ │ │ │ └── TokenAuthConfiguration.cs │ │ ├── BoilerplateWebCoreModule.cs │ │ ├── Configuration │ │ │ └── HostingEnvironmentExtensions.cs │ │ ├── Controllers │ │ │ ├── BoilerplateControllerBase.cs │ │ │ └── TokenAuthController.cs │ │ ├── Identity │ │ │ └── ExternalLoginInfoHelper.cs │ │ ├── Models │ │ │ └── TokenAuth │ │ │ │ ├── AuthenticateModel.cs │ │ │ │ ├── AuthenticateResultModel.cs │ │ │ │ ├── ExternalAuthenticateModel.cs │ │ │ │ ├── ExternalAuthenticateResultModel.cs │ │ │ │ └── ExternalLoginProviderInfoModel.cs │ │ ├── Owin │ │ │ └── BuilderExtensions.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.Boilerplate.Web.Core.csproj │ ├── StudioX.Boilerplate.Web.Host │ │ ├── Controllers │ │ │ ├── AntiForgeryController.cs │ │ │ └── HomeController.cs │ │ ├── Dockerfile │ │ ├── Properties │ │ │ └── launchSettings.json │ │ ├── Startup │ │ │ ├── AuthConfigurer.cs │ │ │ ├── BoilerplateWebHostModule.cs │ │ │ ├── Program.cs │ │ │ └── Startup.cs │ │ ├── StudioX.Boilerplate.Web.Host.csproj │ │ ├── app.config │ │ ├── appsettings.Staging.json │ │ ├── appsettings.json │ │ ├── log4net.config │ │ ├── web.config │ │ └── wwwroot │ │ │ └── swagger │ │ │ └── ui │ │ │ ├── ReadMe.txt │ │ │ ├── index.html │ │ │ ├── on-complete.js │ │ │ └── studiox.js │ └── StudioX.Boilerplate.Web.Mvc │ │ ├── .bowerrc │ │ ├── Controllers │ │ ├── AboutController.cs │ │ ├── AccountController.cs │ │ ├── ErrorController.cs │ │ ├── HomeController.cs │ │ ├── RolesController.cs │ │ ├── TenantsController.cs │ │ └── UsersController.cs │ │ ├── Dockerfile │ │ ├── Models │ │ ├── Account │ │ │ ├── LoginFormViewModel.cs │ │ │ ├── LoginViewModel.cs │ │ │ ├── RegisterResultViewModel.cs │ │ │ └── RegisterViewModel.cs │ │ ├── Common │ │ │ └── Modals │ │ │ │ └── ModalHeaderViewModel.cs │ │ ├── Roles │ │ │ ├── EditRoleModalViewModel.cs │ │ │ └── RoleListViewModel.cs │ │ └── Users │ │ │ ├── EditUserModalViewModel.cs │ │ │ └── UserListViewModel.cs │ │ ├── Properties │ │ └── launchSettings.json │ │ ├── Resources │ │ ├── IWebResourceManager.cs │ │ └── WebResourceManager.cs │ │ ├── Startup │ │ ├── AuthConfigurer.cs │ │ ├── BoilerplateNavigationProvider.cs │ │ ├── BoilerplateWebMvcModule.cs │ │ ├── PageNames.cs │ │ ├── Program.cs │ │ └── Startup.cs │ │ ├── StudioX.Boilerplate.Web.Mvc.csproj │ │ ├── Views │ │ ├── About │ │ │ └── Index.cshtml │ │ ├── Account │ │ │ ├── Login.cshtml │ │ │ ├── Register.cshtml │ │ │ ├── RegisterResult.cshtml │ │ │ ├── _Layout.cshtml │ │ │ └── _ViewStart.cshtml │ │ ├── BoilerplateRazorPage.cs │ │ ├── BoilerplateViewComponent.cs │ │ ├── Home │ │ │ └── Index.cshtml │ │ ├── Roles │ │ │ ├── Index.cshtml │ │ │ ├── _CreateRoleModal.cshtml │ │ │ └── _EditRoleModal.cshtml │ │ ├── Shared │ │ │ ├── Components │ │ │ │ ├── AccountLanguages │ │ │ │ │ ├── AccountLanguagesViewComponent.cs │ │ │ │ │ ├── Default.cshtml │ │ │ │ │ └── LanguageSelectionViewModel.cs │ │ │ │ ├── RightSideBar │ │ │ │ │ ├── Default.cshtml │ │ │ │ │ ├── RightSideBarViewComponent.cs │ │ │ │ │ └── RightSideBarViewModel.cs │ │ │ │ ├── SideBarNav │ │ │ │ │ ├── Default.cshtml │ │ │ │ │ ├── SideBarNavViewComponent.cs │ │ │ │ │ └── SideBarNavViewModel.cs │ │ │ │ ├── SideBarUserArea │ │ │ │ │ ├── Default.cshtml │ │ │ │ │ ├── SideBarUserAreaViewComponent.cs │ │ │ │ │ └── SideBarUserAreaViewModel.cs │ │ │ │ ├── TenantChange │ │ │ │ │ ├── ChangeModalViewModel.cs │ │ │ │ │ ├── Default.cshtml │ │ │ │ │ ├── TenantChangeViewComponent.cs │ │ │ │ │ ├── TenantChangeViewModel.cs │ │ │ │ │ └── _ChangeModal.cshtml │ │ │ │ └── TopBarLanguageSwitch │ │ │ │ │ ├── Default.cshtml │ │ │ │ │ ├── TopBarLanguageSwitchViewComponent.cs │ │ │ │ │ └── TopBarLanguageSwitchViewModel.cs │ │ │ ├── Error.cshtml │ │ │ ├── Modals │ │ │ │ ├── _ModalFooterWithSaveAndCancel.cshtml │ │ │ │ └── _ModalHeader.cshtml │ │ │ └── _Layout.cshtml │ │ ├── Tenants │ │ │ ├── Index.cshtml │ │ │ ├── _CreateTenantModal.cshtml │ │ │ └── _EditTenantModal.cshtml │ │ ├── UrlChecker.cs │ │ ├── Users │ │ │ ├── Index.cshtml │ │ │ ├── _CreateUserModal.cshtml │ │ │ └── _EditUserModal.cshtml │ │ ├── _ViewImports.cshtml │ │ └── _ViewStart.cshtml │ │ ├── app.config │ │ ├── appsettings.Staging.json │ │ ├── appsettings.json │ │ ├── bower.json │ │ ├── bundleconfig.json │ │ ├── compilerconfig.json │ │ ├── compilerconfig.json.defaults │ │ ├── log4net.config │ │ ├── web.config │ │ └── wwwroot │ │ ├── LICENSE.md │ │ ├── README.md │ │ ├── StudioX │ │ └── Framework │ │ │ ├── scripts │ │ │ ├── libs │ │ │ │ ├── angularjs │ │ │ │ │ └── studiox.ng.js │ │ │ │ ├── requirejs │ │ │ │ │ └── plugins │ │ │ │ │ │ └── service.js │ │ │ │ ├── studiox.blockUI.js │ │ │ │ ├── studiox.jquery.d.ts │ │ │ │ ├── studiox.jquery.js │ │ │ │ ├── studiox.jtable.js │ │ │ │ ├── studiox.moment.js │ │ │ │ ├── studiox.signalr.d.ts │ │ │ │ ├── studiox.signalr.js │ │ │ │ ├── studiox.spin.js │ │ │ │ ├── studiox.sweet-alert.js │ │ │ │ ├── studiox.toastr.js │ │ │ │ └── utils │ │ │ │ │ └── ie10fix.js │ │ │ ├── studiox.d.ts │ │ │ └── studiox.js │ │ │ └── styles │ │ │ ├── studiox.css │ │ │ ├── studiox.css.map │ │ │ ├── studiox.less │ │ │ ├── studiox.min.css │ │ │ ├── studiox.mixings.css │ │ │ ├── studiox.mixings.css.map │ │ │ ├── studiox.mixings.less │ │ │ ├── studiox.mixings.min.css │ │ │ └── utils │ │ │ └── ie10fix.css │ │ ├── bower.json │ │ ├── compilerconfig.json │ │ ├── compilerconfig.json.defaults │ │ ├── css │ │ ├── materialize.css │ │ ├── style.css │ │ ├── style.min.css │ │ └── themes │ │ │ ├── all-themes.css │ │ │ ├── all-themes.min.css │ │ │ ├── theme-amber.css │ │ │ ├── theme-amber.min.css │ │ │ ├── theme-black.css │ │ │ ├── theme-black.min.css │ │ │ ├── theme-blue-grey.css │ │ │ ├── theme-blue-grey.min.css │ │ │ ├── theme-blue.css │ │ │ ├── theme-blue.min.css │ │ │ ├── theme-brown.css │ │ │ ├── theme-brown.min.css │ │ │ ├── theme-cyan.css │ │ │ ├── theme-cyan.min.css │ │ │ ├── theme-deep-orange.css │ │ │ ├── theme-deep-orange.min.css │ │ │ ├── theme-deep-purple.css │ │ │ ├── theme-deep-purple.min.css │ │ │ ├── theme-green.css │ │ │ ├── theme-green.min.css │ │ │ ├── theme-grey.css │ │ │ ├── theme-grey.min.css │ │ │ ├── theme-indigo.css │ │ │ ├── theme-indigo.min.css │ │ │ ├── theme-light-blue.css │ │ │ ├── theme-light-blue.min.css │ │ │ ├── theme-lime.css │ │ │ ├── theme-lime.min.css │ │ │ ├── theme-orange.css │ │ │ ├── theme-orange.min.css │ │ │ ├── theme-pink.css │ │ │ ├── theme-pink.min.css │ │ │ ├── theme-purple.css │ │ │ ├── theme-purple.min.css │ │ │ ├── theme-red.css │ │ │ ├── theme-red.min.css │ │ │ ├── theme-teal.css │ │ │ ├── theme-teal.min.css │ │ │ ├── theme-yellow.css │ │ │ └── theme-yellow.min.css │ │ ├── favicon.ico │ │ ├── fonts │ │ ├── material-icons │ │ │ ├── materialicons.css │ │ │ └── materialicons.woff2 │ │ └── roboto │ │ │ ├── -2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2 │ │ │ ├── 77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ ├── 97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ ├── CWB0XYA8bzo0kSThX0UTuA.woff2 │ │ │ ├── Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2 │ │ │ ├── NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2 │ │ │ ├── PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ ├── UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ ├── d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2 │ │ │ ├── ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2 │ │ │ ├── isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ ├── jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2 │ │ │ ├── mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2 │ │ │ ├── roboto.css │ │ │ └── u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2 │ │ ├── images │ │ ├── user-img-background.jpg │ │ └── user.png │ │ ├── index.html │ │ ├── js │ │ ├── admin.js │ │ ├── helpers.js │ │ ├── main.js │ │ └── script.js │ │ ├── package.json │ │ ├── scss │ │ ├── _alerts.scss │ │ ├── _badgelistgroupitem.scss │ │ ├── _bootstrapnotify.scss │ │ ├── _bootstrapselect.scss │ │ ├── _breadcrumbs.scss │ │ ├── _buttons.scss │ │ ├── _card.scss │ │ ├── _charts.scss │ │ ├── _checkboxradio.scss │ │ ├── _collapse.scss │ │ ├── _colorpicker.scss │ │ ├── _customanimate.scss │ │ ├── _dashboard.scss │ │ ├── _datetimepicker.scss │ │ ├── _demo.scss │ │ ├── _dialogs.scss │ │ ├── _dropdownmenu.scss │ │ ├── _dropzone.scss │ │ ├── _formwizard.scss │ │ ├── _general.scss │ │ ├── _helpers.scss │ │ ├── _infobox.scss │ │ ├── _inputformgroup.scss │ │ ├── _ionrangeslider.scss │ │ ├── _jquerydatatable.scss │ │ ├── _jquerynestable.scss │ │ ├── _labels.scss │ │ ├── _leftsidebaroverlay.scss │ │ ├── _lightgallery.scss │ │ ├── _maps.scss │ │ ├── _materialicons.scss │ │ ├── _media.scss │ │ ├── _mediaobject.scss │ │ ├── _mixins.scss │ │ ├── _modals.scss │ │ ├── _multiselect.scss │ │ ├── _navbar.scss │ │ ├── _navtabs.scss │ │ ├── _noUISlider.scss │ │ ├── _pageloader.scss │ │ ├── _pagination.scss │ │ ├── _panels.scss │ │ ├── _preloaders.scss │ │ ├── _progressbars.scss │ │ ├── _searchbar.scss │ │ ├── _switch.scss │ │ ├── _tables.scss │ │ ├── _tagsinput.scss │ │ ├── _thumbnails.scss │ │ ├── _tooltippopovers.scss │ │ ├── _variables.scss │ │ ├── _waveseffect.scss │ │ ├── browser-support │ │ │ ├── _ie10.scss │ │ │ └── _ie11.scss │ │ ├── pages │ │ │ ├── _404.scss │ │ │ ├── _500.scss │ │ │ ├── _forgotpasswordpage.scss │ │ │ ├── _loginpage.scss │ │ │ └── _signuppage.scss │ │ ├── style.scss │ │ └── themes │ │ │ ├── _all-themes.scss │ │ │ ├── _theme-color-variables.scss │ │ │ ├── theme-amber.scss │ │ │ ├── theme-black.scss │ │ │ ├── theme-blue-grey.scss │ │ │ ├── theme-blue.scss │ │ │ ├── theme-brown.scss │ │ │ ├── theme-cyan.scss │ │ │ ├── theme-deep-orange.scss │ │ │ ├── theme-deep-purple.scss │ │ │ ├── theme-green.scss │ │ │ ├── theme-grey.scss │ │ │ ├── theme-indigo.scss │ │ │ ├── theme-light-blue.scss │ │ │ ├── theme-light-green.scss │ │ │ ├── theme-lime.scss │ │ │ ├── theme-orange.scss │ │ │ ├── theme-pink.scss │ │ │ ├── theme-purple.scss │ │ │ ├── theme-red.scss │ │ │ ├── theme-teal.scss │ │ │ └── theme-yellow.scss │ │ └── view-resources │ │ └── Views │ │ ├── Account │ │ ├── Login.css │ │ ├── Login.js │ │ ├── Login.less │ │ ├── Login.min.css │ │ ├── Login.min.js │ │ ├── Register.js │ │ ├── Register.min.js │ │ ├── _Layout.css │ │ ├── _Layout.less │ │ └── _Layout.min.css │ │ ├── Home │ │ └── Index.js │ │ ├── Roles │ │ ├── Index.js │ │ ├── Index.min.js │ │ ├── _EditRoleModal.js │ │ └── _EditRoleModal.min.js │ │ ├── Shared │ │ ├── Components │ │ │ └── TenantChange │ │ │ │ ├── Default.js │ │ │ │ ├── Default.min.js │ │ │ │ ├── _ChangeModal.js │ │ │ │ └── _ChangeModal.min.js │ │ ├── _Layout.css │ │ ├── _Layout.js │ │ ├── _Layout.less │ │ └── _Layout.min.css │ │ ├── Tenants │ │ ├── Index.js │ │ ├── Index.min.js │ │ └── _EditTenantModal.js │ │ ├── Users │ │ ├── Index.js │ │ ├── Index.min.js │ │ ├── _EditUserModal.js │ │ └── _EditUserModal.min.js │ │ └── _Bundles │ │ ├── account-layout.min.css │ │ ├── account-layout.min.js │ │ ├── home-index.min.js │ │ ├── shared-layout.min.css │ │ └── shared-layout.min.js └── test │ └── StudioX.Boilerplate.Tests │ ├── BoilerplateAsyncServiceTestBase.cs │ ├── BoilerplateDtoTestBase.cs │ ├── BoilerplateTestBase.cs │ ├── BoilerplateTestModule.cs │ ├── DependencyInjection │ └── ServiceCollectionRegistrar.cs │ ├── MultiTenancy │ └── TenantAppServiceTests.cs │ ├── MultiTenantFactAttribute.cs │ ├── Properties │ └── AssemblyInfo.cs │ ├── Roles │ ├── CreateRoleInputTests.cs │ ├── RoleAppServiceTests.cs │ └── UpdateRoleInputTests.cs │ ├── Sessions │ └── SessionAppServiceTests.cs │ ├── StudioX.Boilerplate.Tests.csproj │ └── Users │ ├── CreateUserInputTests.cs │ ├── UpdateUserInputTests.cs │ └── UserAppServiceTests.cs ├── framework ├── .gitattributes ├── .gitignore ├── README.md ├── StudioX.sln ├── appveyor.yml ├── common.props ├── src │ ├── StudioX.AspNetCore.TestBase │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.AspNetCore.TestBase.csproj │ │ ├── StudioXAspNetCoreIntegratedTestBase.cs │ │ ├── StudioXAspNetCoreTestBaseModule.cs │ │ ├── StudioXServiceOptionsTestExtensions.cs │ │ └── TestOptions.cs │ ├── StudioX.AspNetCore │ │ ├── Application │ │ │ └── Services │ │ │ │ └── Dto │ │ │ │ └── ComboboxItemDtoExtensions.cs │ │ ├── AspNetCore │ │ │ ├── Configuration │ │ │ │ ├── ControllerAssemblySettingList.cs │ │ │ │ ├── IStudioXAspNetCoreConfiguration.cs │ │ │ │ ├── IStudioXControllerAssemblySettingBuilder.cs │ │ │ │ ├── StudioXAspNetCoreConfiguration.cs │ │ │ │ ├── StudioXAspNetCoreConfigurationExtensions.cs │ │ │ │ ├── StudioXControllerAssemblySetting.cs │ │ │ │ └── StudioXControllerAssemblySettingBuilder.cs │ │ │ ├── EmbeddedResources │ │ │ │ ├── EmbeddedResourceFileProvider.cs │ │ │ │ ├── EmbeddedResourceItemFileInfo.cs │ │ │ │ └── EmbeddedResourceViewFileProvider.cs │ │ │ ├── Localization │ │ │ │ ├── StudioXDefaultRequestCultureProvider.cs │ │ │ │ ├── StudioXLocalizationHeaderRequestCultureProvider.cs │ │ │ │ └── StudioXUserRequestCultureProvider.cs │ │ │ ├── MultiTenancy │ │ │ │ ├── DomainTenantResolveContributor.cs │ │ │ │ ├── HttpContextTenantResolverCache.cs │ │ │ │ ├── HttpCookieTenantResolveContributor.cs │ │ │ │ └── HttpHeaderTenantResolveContributor.cs │ │ │ ├── Mvc │ │ │ │ ├── Antiforgery │ │ │ │ │ ├── StudioXAutoValidateAntiforgeryTokenAuthorizationFilter.cs │ │ │ │ │ └── StudioXValidateAntiforgeryTokenAuthorizationFilter.cs │ │ │ │ ├── Auditing │ │ │ │ │ ├── HttpContextClientInfoProvider.cs │ │ │ │ │ └── StudioXAuditActionFilter.cs │ │ │ │ ├── Authorization │ │ │ │ │ ├── StudioXAuthorizationFilter.cs │ │ │ │ │ └── StudioXMvcAuthorizeAttribute.cs │ │ │ │ ├── Controllers │ │ │ │ │ ├── StudioXAppViewController.cs │ │ │ │ │ ├── StudioXController.cs │ │ │ │ │ ├── StudioXLocalizationController.cs │ │ │ │ │ ├── StudioXScriptsController.cs │ │ │ │ │ └── StudioXUserConfigurationController.cs │ │ │ │ ├── Conventions │ │ │ │ │ └── StudioXAppServiceConvention.cs │ │ │ │ ├── ExceptionHandling │ │ │ │ │ └── StudioXExceptionFilter.cs │ │ │ │ ├── Extensions │ │ │ │ │ ├── ActionDescriptorExtensions.cs │ │ │ │ │ └── AjaxRequestExtensions.cs │ │ │ │ ├── ModelBinding │ │ │ │ │ ├── StudioXDateTimeModelBinder.cs │ │ │ │ │ └── StudioXDateTimeModelBinderProvider.cs │ │ │ │ ├── Models │ │ │ │ │ └── ModelStateExtensions.cs │ │ │ │ ├── Providers │ │ │ │ │ └── StudioXAppServiceControllerFeatureProvider.cs │ │ │ │ ├── Proxying │ │ │ │ │ ├── ApiProxyGenerationModel.cs │ │ │ │ │ ├── AspNetCoreApiDescriptionModelProvider.cs │ │ │ │ │ ├── StudioXServiceProxiesController.cs │ │ │ │ │ └── Utils │ │ │ │ │ │ └── ArrayMatcher.cs │ │ │ │ ├── Results │ │ │ │ │ ├── ActionResultHelper.cs │ │ │ │ │ ├── Caching │ │ │ │ │ │ ├── AllowClientCacheAttribute.cs │ │ │ │ │ │ ├── ClientCacheAttributeBase.cs │ │ │ │ │ │ ├── ClientCacheScope.cs │ │ │ │ │ │ └── IClientCacheAttribute.cs │ │ │ │ │ ├── StudioXResultFilter.cs │ │ │ │ │ └── Wrapping │ │ │ │ │ │ ├── IStudioXActionResultWrapper.cs │ │ │ │ │ │ ├── IStudioXActionResultWrapperFactory.cs │ │ │ │ │ │ ├── NullStudioXActionResultWrapper.cs │ │ │ │ │ │ ├── StudioXActionResultWrapperFactory.cs │ │ │ │ │ │ ├── StudioXEmptyActionResultWrapper.cs │ │ │ │ │ │ ├── StudioXJsonActionResultWrapper.cs │ │ │ │ │ │ └── StudioXObjectActionResultWrapper.cs │ │ │ │ ├── StudioXMvcOptionsExtensions.cs │ │ │ │ ├── Uow │ │ │ │ │ └── StudioXUowActionFilter.cs │ │ │ │ ├── Validation │ │ │ │ │ ├── MvcActionInvocationValidator.cs │ │ │ │ │ └── StudioXValidationActionFilter.cs │ │ │ │ ├── ViewComponents │ │ │ │ │ └── StudioXViewComponent.cs │ │ │ │ └── Views │ │ │ │ │ └── StudioXRazorPage.cs │ │ │ ├── Runtime │ │ │ │ └── Session │ │ │ │ │ └── AspNetCorePrincipalAccessor.cs │ │ │ ├── Security │ │ │ │ └── AntiForgery │ │ │ │ │ └── StudioXAspNetCoreAntiForgeryManager.cs │ │ │ ├── StudioXApplicationBuilderExtensions.cs │ │ │ ├── StudioXApplicationBuilderOptions.cs │ │ │ ├── StudioXAspNetCoreConventionalRegistrar.cs │ │ │ ├── StudioXAspNetCoreModule.cs │ │ │ ├── StudioXServiceCollectionExtensions.cs │ │ │ ├── StudioXServiceOptions.cs │ │ │ └── StudioXUrlHelper.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.AspNetCore.csproj │ │ └── Web │ │ │ └── Security │ │ │ └── AntiForgery │ │ │ └── StudioXAntiForgeryManagerAspNetCoreExtensions.cs │ ├── StudioX.AutoMapper │ │ ├── AutoMapper │ │ │ ├── AutoMapAttribute.cs │ │ │ ├── AutoMapAttributeBase.cs │ │ │ ├── AutoMapExtensions.cs │ │ │ ├── AutoMapFromAttribute.cs │ │ │ ├── AutoMapToAttribute.cs │ │ │ ├── AutoMapperConfigurationExtensions.cs │ │ │ ├── AutoMapperObjectMapper.cs │ │ │ ├── IStudioXAutoMapperConfiguration.cs │ │ │ ├── StudioXAutoMapperConfiguration.cs │ │ │ ├── StudioXAutoMapperConfigurationExtensions.cs │ │ │ └── StudioXAutoMapperModule.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.AutoMapper.csproj │ ├── StudioX.Castle.Log4Net │ │ ├── Castle │ │ │ └── Logging │ │ │ │ └── Log4Net │ │ │ │ ├── Log4NetLogger.cs │ │ │ │ ├── Log4NetLoggerFactory.cs │ │ │ │ ├── LoggingFacilityExtensions.cs │ │ │ │ └── StudioXCastleLog4NetModule.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.Castle.Log4Net.csproj │ ├── StudioX.Dapper │ │ ├── Dapper │ │ │ ├── DapperAutoRepositoryTypeAttribute.cs │ │ │ ├── EfBasedAutoRepositoryTypes.cs │ │ │ ├── Expressions │ │ │ │ ├── DapperEvaluator.cs │ │ │ │ ├── DapperExpressionExtensions.cs │ │ │ │ └── DapperExpressionVisitor.cs │ │ │ ├── Extensions │ │ │ │ └── SortingExtensions.cs │ │ │ ├── Filters │ │ │ │ ├── Action │ │ │ │ │ ├── CreationAuditDapperActionFilter.cs │ │ │ │ │ ├── DapperActionFilterBase.cs │ │ │ │ │ ├── DapperActionFilterExecuter.cs │ │ │ │ │ ├── DeletionAuditDapperActionFilter.cs │ │ │ │ │ ├── IDapperActionFilter.cs │ │ │ │ │ ├── IDapperActionFilterExecuter.cs │ │ │ │ │ ├── ModificationAuditDapperActionFilter.cs │ │ │ │ │ └── NullDapperActionFilterExecuter.cs │ │ │ │ └── Query │ │ │ │ │ ├── DapperQueryFilterExecuter.cs │ │ │ │ │ ├── IDapperQueryFilter.cs │ │ │ │ │ ├── IDapperQueryFilterExecuter.cs │ │ │ │ │ ├── MayHaveTenantDapperQueryFilter.cs │ │ │ │ │ ├── MustHaveTenantDapperQueryFilter.cs │ │ │ │ │ ├── NullDapperQueryFilterExecuter.cs │ │ │ │ │ └── SoftDeleteDapperQueryFilter.cs │ │ │ ├── NhBasedAutoRepositoryTypes.cs │ │ │ ├── Repositories │ │ │ │ ├── DapperEfRepositoryBaseOfTDbContextAndTEntity.cs │ │ │ │ ├── DapperEfRepositoryBaseOfTDbContextAndTEntityAndTPrimaryKey.cs │ │ │ │ ├── DapperRepositoryBaseOfTEntity.cs │ │ │ │ ├── DapperRepositoryBaseOfTEntityAndTPrimaryKey.cs │ │ │ │ ├── IDapperRepositoryOfTEntity.cs │ │ │ │ ├── IDapperRepositoryOfTEntityAndTPrimaryKey.cs │ │ │ │ └── StudioXDapperRepositoryBase.cs │ │ │ ├── StudioXDapperModule.cs │ │ │ └── Utils │ │ │ │ ├── ExpressionUtils.cs │ │ │ │ └── TypeExtensions.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.Dapper.csproj │ ├── StudioX.EntityFramework.Common │ │ ├── DbContextTypeMatcher.cs │ │ ├── DefaultDbContextAttribute.cs │ │ ├── IDbContextEntityFinder.cs │ │ ├── IDbContextTypeMatcher.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Repositories │ │ │ ├── EfGenericRepositoryRegistrar.cs │ │ │ └── IEfGenericRepositoryRegistrar.cs │ │ ├── SecondaryOrmRegistrarBase.cs │ │ ├── StudioX.EntityFramework.Common.csproj │ │ └── StudioXEntityFrameworkCommonModule.cs │ ├── StudioX.EntityFramework.GraphDiff │ │ ├── GraphDiff │ │ │ ├── Configuration │ │ │ │ ├── IStudioXEntityFrameworkGraphDiffModuleConfiguration.cs │ │ │ │ ├── StudioXEntityFrameworkGraphDiffConfigurationExtensions.cs │ │ │ │ └── StudioXEntityFrameworkGraphDiffModuleConfiguration.cs │ │ │ ├── Extensions │ │ │ │ └── GraphDiffExtensions.cs │ │ │ ├── Mapping │ │ │ │ ├── EntityMappingManager.cs │ │ │ │ ├── EntityMappingOfTEntity.cs │ │ │ │ ├── IEntityMappingManager.cs │ │ │ │ └── MappingExpressionBuilder.cs │ │ │ └── StudioXEntityFrameworkGraphDiffModule.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.EntityFramework.GraphDiff.csproj │ ├── StudioX.EntityFramework │ │ ├── EntityFramework │ │ │ ├── DbContextHelper.cs │ │ │ ├── DbContextTypeMatcher.cs │ │ │ ├── DefaultDbContextResolver.cs │ │ │ ├── EfActiveTransactionProvider.cs │ │ │ ├── EfBasedSecondaryOrmRegistrar.cs │ │ │ ├── EfDbContextEntityFinder.cs │ │ │ ├── Extensions │ │ │ │ ├── EntityFrameworkModelBuilderExtensions.cs │ │ │ │ └── QueryableExtensions.cs │ │ │ ├── IDbContextProvider.cs │ │ │ ├── IDbContextResolver.cs │ │ │ ├── Interceptors │ │ │ │ └── WithNolockInterceptor.cs │ │ │ ├── Linq │ │ │ │ └── EfAsyncQueryableExecuter.cs │ │ │ ├── Repositories │ │ │ │ ├── EfAutoRepositoryTypes.cs │ │ │ │ ├── EfRepositoryBaseOfTEntity.cs │ │ │ │ ├── EfRepositoryBaseOfTEntityAndTPrimaryKey.cs │ │ │ │ ├── EfRepositoryExtensions.cs │ │ │ │ └── IRepositoryWithDbContext.cs │ │ │ ├── SimpleDbContextProvider.cs │ │ │ ├── StudioXDbContext.cs │ │ │ ├── StudioXEntityFrameworkModule.cs │ │ │ ├── Uow │ │ │ │ ├── ActiveDbContextInfo.cs │ │ │ │ ├── ActiveTransactionInfo.cs │ │ │ │ ├── DbContextEfTransactionStrategy.cs │ │ │ │ ├── EfDynamicFiltersUnitOfWorkFilterExecuter.cs │ │ │ │ ├── EfUnitOfWork.cs │ │ │ │ ├── IEfTransactionStrategy.cs │ │ │ │ ├── IEfUnitOfWorkFilterExecuter.cs │ │ │ │ ├── TransactionScopeEfTransactionStrategy.cs │ │ │ │ ├── UnitOfWorkDbContextProvider.cs │ │ │ │ └── UnitOfWorkExtensions.cs │ │ │ └── Utils │ │ │ │ ├── DateTimePropertyInfoHelper.cs │ │ │ │ └── EntityDateTimePropertiesInfo.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.EntityFramework.csproj │ ├── StudioX.EntityFrameworkCore │ │ ├── EntityFrameworkCore │ │ │ ├── Configuration │ │ │ │ ├── IStudioXDbContextConfigurer.cs │ │ │ │ ├── IStudioXEfCoreConfiguration.cs │ │ │ │ ├── StudioXAspNetCoreConfigurationExtensions.cs │ │ │ │ ├── StudioXDbContextConfiguration.cs │ │ │ │ ├── StudioXDbContextConfigurerAction.cs │ │ │ │ └── StudioXEfCoreConfiguration.cs │ │ │ ├── DatabaseFacadeExtensions.cs │ │ │ ├── DbContextTypeMatcher.cs │ │ │ ├── DefaultDbContextResolver.cs │ │ │ ├── EfCoreActiveTransactionProvider.cs │ │ │ ├── EfCoreBasedSecondaryOrmRegistrar.cs │ │ │ ├── EfCoreDbContextEntityFinder.cs │ │ │ ├── Extensions │ │ │ │ ├── DbContextExtensions.cs │ │ │ │ └── QueryableExtensions.cs │ │ │ ├── IDbContextProvider.cs │ │ │ ├── IDbContextResolver.cs │ │ │ ├── Linq │ │ │ │ └── EfCoreAsyncQueryableExecuter.cs │ │ │ ├── Repositories │ │ │ │ ├── EfCoreAutoRepositoryTypes.cs │ │ │ │ ├── EfCoreRepositoryBaseOfTEntity.cs │ │ │ │ ├── EfCoreRepositoryBaseOfTEntityAndTPrimaryKey.cs │ │ │ │ ├── EfCoreRepositoryExtensions.cs │ │ │ │ └── IRepositoryWithDbContext.cs │ │ │ ├── SimpleDbContextProvider.cs │ │ │ ├── StudioXDbContext.cs │ │ │ ├── StudioXEfCoreServiceCollectionExtensions.cs │ │ │ ├── StudioXEntityFrameworkCoreModule.cs │ │ │ ├── StudioXEntityMaterializerSource.cs │ │ │ ├── Uow │ │ │ │ ├── ActiveTransactionInfo.cs │ │ │ │ ├── DbContextEfCoreTransactionStrategy.cs │ │ │ │ ├── EfCoreUnitOfWork.cs │ │ │ │ ├── IEfCoreTransactionStrategy.cs │ │ │ │ ├── UnitOfWorkDbContextProvider.cs │ │ │ │ └── UnitOfWorkExtensions.cs │ │ │ └── Utils │ │ │ │ ├── DateTimePropertyInfoHelper.cs │ │ │ │ └── EntityDateTimePropertiesInfo.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.EntityFrameworkCore.csproj │ ├── StudioX.HangFire.AspNetCore │ │ ├── Hangfire │ │ │ ├── HangfireBackgroundJobManager.cs │ │ │ ├── StudioXHangfireAspNetCoreModule.cs │ │ │ ├── StudioXHangfireAuthorizationFilter.cs │ │ │ ├── StudioXHangfireJobExceptionFilter.cs │ │ │ └── StudioXHangfireModuleConfigurationExtensions.cs │ │ └── StudioX.HangFire.AspNetCore.csproj │ ├── StudioX.HangFire │ │ ├── Hangfire │ │ │ ├── Configuration │ │ │ │ ├── IStudioXHangfireConfiguration.cs │ │ │ │ ├── StudioXHangfireConfiguration.cs │ │ │ │ └── StudioXHangfireModuleConfigurationExtensions.cs │ │ │ ├── HangfireBackgroundJobManager.cs │ │ │ ├── HangfireIocJobActivator.cs │ │ │ ├── StudioXHangfireAuthorizationFilter.cs │ │ │ ├── StudioXHangfireJobExceptionFilter.cs │ │ │ └── StudioXHangfireModule.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.HangFire.csproj │ ├── StudioX.MailKit │ │ ├── DefaultMailKitSmtpBuilder.cs │ │ ├── EmailExtensitons.cs │ │ ├── IMailKitSmtpBuilder.cs │ │ ├── MailKitEmailSender.cs │ │ ├── StudioX.MailKit.csproj │ │ └── StudioXMailKitModule.cs │ ├── StudioX.MemoryDb │ │ ├── Configuration │ │ │ └── Startup │ │ │ │ └── StudioXMemoryDbConfigurationExtensions.cs │ │ ├── MemoryDb │ │ │ ├── Configuration │ │ │ │ ├── IStudioXMemoryDbModuleConfiguration.cs │ │ │ │ └── StudioXMemoryDbModuleConfiguration.cs │ │ │ ├── IMemoryDatabaseProvider.cs │ │ │ ├── MemoryDatabase.cs │ │ │ ├── Repositories │ │ │ │ ├── MemoryPrimaryKeyGenerator.cs │ │ │ │ ├── MemoryRepositoryOfTEntity.cs │ │ │ │ └── MemoryRepositoryOfTEntityAndTPrimaryKey.cs │ │ │ ├── StudioXMemoryDbModule.cs │ │ │ └── Uow │ │ │ │ ├── MemoryDbUnitOfWork.cs │ │ │ │ └── UnitOfWorkMemoryDatabaseProvider.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── README.md │ │ └── StudioX.MemoryDb.csproj │ ├── StudioX.MongoDB │ │ ├── Configuration │ │ │ └── Startup │ │ │ │ └── StudioXMongoDbConfigurationExtensions.cs │ │ ├── MongoDb │ │ │ ├── Configuration │ │ │ │ ├── IStudioXMongoDbModuleConfiguration.cs │ │ │ │ └── StudioXMongoDbModuleConfiguration.cs │ │ │ ├── IMongoDatabaseProvider.cs │ │ │ ├── Repositories │ │ │ │ └── MongoDbRepositoryBase.cs │ │ │ ├── StudioXMongoDbModule.cs │ │ │ └── Uow │ │ │ │ ├── MongoDbUnitOfWork.cs │ │ │ │ └── UnitOfWorkMongoDatabaseProvider.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.MongoDB.csproj │ ├── StudioX.Owin │ │ ├── EmbeddedResources │ │ │ ├── StudioXOwinEmbeddedResourceFileInfo.cs │ │ │ └── StudioXOwinEmbeddedResourceFileSystem.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Owin.csproj │ │ ├── StudioXOwinExtensions.cs │ │ ├── StudioXOwinModule.cs │ │ └── StudioXOwinOptions.cs │ ├── StudioX.Quartz │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Quartz │ │ │ ├── Configuration │ │ │ │ ├── IStudioXQuartzConfiguration.cs │ │ │ │ ├── StudioXQuartzConfiguration.cs │ │ │ │ └── StudioXQuartzConfigurationExtensions.cs │ │ │ ├── IQuartzScheduleJobManager.cs │ │ │ ├── JobBase.cs │ │ │ ├── QuartzScheduleJobManager.cs │ │ │ ├── StudioXQuartzJobFactory.cs │ │ │ ├── StudioXQuartzJobListener.cs │ │ │ └── StudioXQuartzModule.cs │ │ └── StudioX.Quartz.csproj │ ├── StudioX.RedisCache.ProtoBuf │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Runtime │ │ │ └── Caching │ │ │ │ └── Redis │ │ │ │ ├── ProtoBufRedisCacheSerializer.cs │ │ │ │ └── StudioXRedisCacheOptionsExtensions.cs │ │ └── StudioX.RedisCache.ProtoBuf.csproj │ ├── StudioX.RedisCache │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Runtime │ │ │ └── Caching │ │ │ │ └── Redis │ │ │ │ ├── DefaultRedisCacheSerializer.cs │ │ │ │ ├── IRedisCacheSerializer.cs │ │ │ │ ├── IStudioXRedisCacheDatabaseProvider.cs │ │ │ │ ├── RedisCacheConfigurationExtensions.cs │ │ │ │ ├── RedisDatabaseExtensions.cs │ │ │ │ ├── StudioXRedisCache.cs │ │ │ │ ├── StudioXRedisCacheDatabaseProvider.cs │ │ │ │ ├── StudioXRedisCacheManager.cs │ │ │ │ ├── StudioXRedisCacheModule.cs │ │ │ │ └── StudioXRedisCacheOptions.cs │ │ └── StudioX.RedisCache.csproj │ ├── StudioX.TestBase │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.TestBase.csproj │ │ └── TestBase │ │ │ ├── Runtime │ │ │ └── Session │ │ │ │ └── TestStudioXSession.cs │ │ │ ├── StudioXIntegratedTestBase.cs │ │ │ └── StudioXTestBaseModule.cs │ ├── StudioX.Web.Api │ │ ├── Configuration │ │ │ └── Startup │ │ │ │ └── StudioXWebApiConfigurationExtensions.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Web.Api.csproj │ │ ├── Web │ │ │ └── Security │ │ │ │ └── AntiForgery │ │ │ │ └── StudioXAntiForgeryManagerWebApiExtensions.cs │ │ └── WebApi │ │ │ ├── Auditing │ │ │ └── StudioXApiAuditFilter.cs │ │ │ ├── Authorization │ │ │ ├── StudioXApiAuthorizeAttribute.cs │ │ │ └── StudioXApiAuthorizeFilter.cs │ │ │ ├── Client │ │ │ ├── IStudioXWebApiClient.cs │ │ │ ├── StudioXRemoteCallException.cs │ │ │ └── StudioXWebApiClient.cs │ │ │ ├── Configuration │ │ │ ├── IStudioXWebApiConfiguration.cs │ │ │ └── StudioXWebApiConfiguration.cs │ │ │ ├── Controllers │ │ │ ├── ApiControllerConventionalRegistrar.cs │ │ │ ├── ApiExplorer │ │ │ │ ├── StudioXApiExplorer.cs │ │ │ │ └── StudioXHttpActionDescriptor.cs │ │ │ ├── Dynamic │ │ │ │ ├── Binders │ │ │ │ │ └── StudioXApiDateTimeBinder.cs │ │ │ │ ├── Builders │ │ │ │ │ ├── ApiControllerActionBuilder.cs │ │ │ │ │ ├── ApiControllerBuilder.cs │ │ │ │ │ ├── BatchApiControllerBuilder.cs │ │ │ │ │ ├── DynamicApiControllerActionHelper.cs │ │ │ │ │ ├── DynamicApiControllerBuilder.cs │ │ │ │ │ ├── DynamicApiServiceNameHelper.cs │ │ │ │ │ ├── DynamicApiVerbHelper.cs │ │ │ │ │ ├── IApiControllerActionBuilder.cs │ │ │ │ │ ├── IApiControllerBuilder.cs │ │ │ │ │ ├── IBatchApiControllerBuilder.cs │ │ │ │ │ └── IDynamicApiControllerBuilder.cs │ │ │ │ ├── Clients │ │ │ │ │ ├── ApiClientBuilder.cs │ │ │ │ │ ├── DynamicApiClientBuilder.cs │ │ │ │ │ ├── IApiClientBuilder.cs │ │ │ │ │ └── IDynamicApiClient.cs │ │ │ │ ├── DynamicApiController.cs │ │ │ │ ├── DynamicApiControllerInfo.cs │ │ │ │ ├── DynamicApiControllerManager.cs │ │ │ │ ├── DynamicApiMethodInfo.cs │ │ │ │ ├── Formatters │ │ │ │ │ └── PlainTextFormatter.cs │ │ │ │ ├── IDynamicApiController.cs │ │ │ │ ├── Interceptors │ │ │ │ │ └── StudioXDynamicApiControllerInterceptor.cs │ │ │ │ ├── Scripting │ │ │ │ │ ├── ActionScriptingHelper.cs │ │ │ │ │ ├── Angular │ │ │ │ │ │ ├── AngularActionScriptWriter.cs │ │ │ │ │ │ └── AngularProxyGenerator.cs │ │ │ │ │ ├── IScriptProxyGenerator.cs │ │ │ │ │ ├── ProxyScriptType.cs │ │ │ │ │ ├── ScriptProxyManager.cs │ │ │ │ │ ├── StudioXServiceProxiesController.cs │ │ │ │ │ ├── TypeScript │ │ │ │ │ │ ├── TypeScriptDefinitionGenerator.cs │ │ │ │ │ │ ├── TypeScriptDefinitionProxyGenerator.cs │ │ │ │ │ │ ├── TypeScriptHelper.cs │ │ │ │ │ │ ├── TypeScriptServiceGenerator.cs │ │ │ │ │ │ └── TypeScriptServiceProxyGenerator.cs │ │ │ │ │ ├── TypeScriptController.cs │ │ │ │ │ └── jQuery │ │ │ │ │ │ ├── JQueryActionScriptGenerator.cs │ │ │ │ │ │ └── JQueryProxyGenerator.cs │ │ │ │ └── Selectors │ │ │ │ │ ├── DynamicHttpActionDescriptor.cs │ │ │ │ │ ├── DynamicHttpControllerDescriptor.cs │ │ │ │ │ ├── HttpVerbExtensions.cs │ │ │ │ │ ├── StudioXApiControllerActionSelector.cs │ │ │ │ │ └── StudioXHttpControllerSelector.cs │ │ │ ├── HttpActionDescriptorHelper.cs │ │ │ ├── ResultWrapperHandler.cs │ │ │ ├── StudioXApiController.cs │ │ │ └── StudioXApiControllerActivator.cs │ │ │ ├── ExceptionHandling │ │ │ └── StudioXApiExceptionFilterAttribute.cs │ │ │ ├── Extensions │ │ │ └── HttpResponseHeadersExtensions.cs │ │ │ ├── Runtime │ │ │ └── Caching │ │ │ │ ├── ClearAllCacheModel.cs │ │ │ │ ├── ClearCacheModel.cs │ │ │ │ ├── ClearCacheSettingNames.cs │ │ │ │ ├── ClearCacheSettingProvider.cs │ │ │ │ └── StudioXCacheController.cs │ │ │ ├── Security │ │ │ └── AntiForgery │ │ │ │ └── StudioXAntiForgeryApiFilter.cs │ │ │ ├── StudioXWebApiModule.cs │ │ │ ├── Uow │ │ │ └── StudioXApiUowFilter.cs │ │ │ └── Validation │ │ │ ├── ActionDescriptorExtensions.cs │ │ │ ├── StudioXApiValidationFilter.cs │ │ │ └── WebApiActionInvocationValidator.cs │ ├── StudioX.Web.Common │ │ ├── Configuration │ │ │ └── Startup │ │ │ │ └── StudioXWebConfigurationExtensions.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Web.Common.csproj │ │ └── Web │ │ │ ├── Api │ │ │ ├── Modeling │ │ │ │ ├── ActionApiDescriptionModel.cs │ │ │ │ ├── ApplicationApiDescriptionModel.cs │ │ │ │ ├── ControllerApiDescriptionModel.cs │ │ │ │ ├── IApiDescriptionModelProvider.cs │ │ │ │ ├── ModuleApiDescriptionModel.cs │ │ │ │ ├── ParameterApiDescriptionModel.cs │ │ │ │ └── ReturnValueApiDescriptionModel.cs │ │ │ └── ProxyScripting │ │ │ │ ├── ApiProxyGenerationOptions.cs │ │ │ │ ├── ApiProxyScriptManager.cs │ │ │ │ ├── Configuration │ │ │ │ ├── ApiProxyScriptingConfiguration.cs │ │ │ │ └── IApiProxyScriptingConfiguration.cs │ │ │ │ ├── Generators │ │ │ │ ├── IProxyScriptGenerator.cs │ │ │ │ ├── JQuery │ │ │ │ │ └── JQueryProxyScriptGenerator.cs │ │ │ │ ├── ParameterBindingSources.cs │ │ │ │ ├── ProxyScriptingHelper.cs │ │ │ │ └── ProxyScriptingJsFuncHelper.cs │ │ │ │ └── IApiProxyScriptManager.cs │ │ │ ├── Authorization │ │ │ ├── AuthorizationScriptManager.cs │ │ │ └── IAuthorizationScriptManager.cs │ │ │ ├── Configuration │ │ │ ├── IStudioXWebCommonModuleConfiguration.cs │ │ │ ├── IWebEmbeddedResourcesConfiguration.cs │ │ │ ├── StudioXUserConfigurationBuilder.cs │ │ │ ├── StudioXWebCommonModuleConfiguration.cs │ │ │ └── WebEmbeddedResourcesConfiguration.cs │ │ │ ├── Features │ │ │ ├── FeaturesScriptManager.cs │ │ │ └── IFeaturesScriptManager.cs │ │ │ ├── HttpVerb.cs │ │ │ ├── HttpVerbHelper.cs │ │ │ ├── Localization │ │ │ ├── ILocalizationScriptManager.cs │ │ │ ├── LocalizationScriptManager.cs │ │ │ └── StudioXWebXmlSource │ │ │ │ ├── StudioXWeb-ca-ES.xml │ │ │ │ ├── StudioXWeb-de.xml │ │ │ │ ├── StudioXWeb-es.xml │ │ │ │ ├── StudioXWeb-fr.xml │ │ │ │ ├── StudioXWeb-it.xml │ │ │ │ ├── StudioXWeb-lt.xml │ │ │ │ ├── StudioXWeb-lv.xml │ │ │ │ ├── StudioXWeb-pt-BR.xml │ │ │ │ ├── StudioXWeb-ru.xml │ │ │ │ ├── StudioXWeb-tr.xml │ │ │ │ ├── StudioXWeb-uk.xml │ │ │ │ ├── StudioXWeb-zh-CN.xml │ │ │ │ └── StudioXWeb.xml │ │ │ ├── Models │ │ │ ├── AjaxResponse.cs │ │ │ ├── AjaxResponseBase.cs │ │ │ ├── AjaxResponseOfTResult.cs │ │ │ ├── DefaultErrorInfoConverter.cs │ │ │ ├── ErrorInfo.cs │ │ │ ├── ErrorInfoBuilder.cs │ │ │ ├── IErrorInfoBuilder.cs │ │ │ ├── IExceptionToErrorInfoConverter.cs │ │ │ ├── StudioXUserConfiguration │ │ │ │ ├── StudioXLocalizationSourceDto.cs │ │ │ │ ├── StudioXMultiTenancyConfigDto.cs │ │ │ │ ├── StudioXMultiTenancySidesConfigDto.cs │ │ │ │ ├── StudioXStringValueDto.cs │ │ │ │ ├── StudioXUserAntiForgeryConfigDto.cs │ │ │ │ ├── StudioXUserAuthConfigDto.cs │ │ │ │ ├── StudioXUserClockConfigDto.cs │ │ │ │ ├── StudioXUserConfigurationDto.cs │ │ │ │ ├── StudioXUserCurrentCultureConfigDto.cs │ │ │ │ ├── StudioXUserFeatureConfigDto.cs │ │ │ │ ├── StudioXUserIanaTimeZoneConfigDto.cs │ │ │ │ ├── StudioXUserLocalizationConfigDto.cs │ │ │ │ ├── StudioXUserNavConfigDto.cs │ │ │ │ ├── StudioXUserSecurityConfigDto.cs │ │ │ │ ├── StudioXUserSessionConfigDto.cs │ │ │ │ ├── StudioXUserSettingConfigDto.cs │ │ │ │ ├── StudioXUserTimeZoneConfigDto.cs │ │ │ │ ├── StudioXUserTimingConfigDto.cs │ │ │ │ └── StudioXUserWindowsTimeZoneConfigDto.cs │ │ │ └── ValidationErrorInfo.cs │ │ │ ├── MultiTenancy │ │ │ ├── IMultiTenancyScriptManager.cs │ │ │ ├── IWebMultiTenancyConfiguration.cs │ │ │ ├── MultiTenancyScriptManager.cs │ │ │ └── WebMultiTenancyConfiguration.cs │ │ │ ├── Mvc │ │ │ └── Models │ │ │ │ └── ErrorViewModel.cs │ │ │ ├── Navigation │ │ │ ├── INavigationScriptManager.cs │ │ │ └── NavigationScriptManager.cs │ │ │ ├── Security │ │ │ ├── AntiForgery │ │ │ │ ├── IStudioXAntiForgeryConfiguration.cs │ │ │ │ ├── IStudioXAntiForgeryManager.cs │ │ │ │ ├── IStudioXAntiForgeryValidator.cs │ │ │ │ ├── StudioXAntiForgeryConfiguration.cs │ │ │ │ └── StudioXAntiForgeryManager.cs │ │ │ ├── ISecurityScriptManager.cs │ │ │ └── SecurityScriptManager.cs │ │ │ ├── Sessions │ │ │ ├── ISessionScriptManager.cs │ │ │ └── SessionScriptManager.cs │ │ │ ├── Settings │ │ │ ├── ISettingScriptManager.cs │ │ │ └── SettingScriptManager.cs │ │ │ ├── StudioXWebCommonModule.cs │ │ │ ├── StudioXWebConsts.cs │ │ │ └── Timing │ │ │ ├── ITimingScriptManager.cs │ │ │ └── TimingScriptManager.cs │ ├── StudioX.Web.Mvc │ │ ├── Application │ │ │ └── Services │ │ │ │ └── Dto │ │ │ │ └── ComboboxItemDtoExtensions.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Web.Mvc.csproj │ │ └── Web │ │ │ ├── Mvc │ │ │ ├── Auditing │ │ │ │ ├── StudioXAuditFilterData.cs │ │ │ │ └── StudioXMvcAuditFilter.cs │ │ │ ├── Authorization │ │ │ │ ├── StudioXMvcAuthorizeAttribute.cs │ │ │ │ └── StudioXMvcAuthorizeFilter.cs │ │ │ ├── Configuration │ │ │ │ ├── IStudioXMvcConfiguration.cs │ │ │ │ ├── StudioXMvcConfiguration.cs │ │ │ │ └── StudioXMvcConfigurationExtensions.cs │ │ │ ├── Controllers │ │ │ │ ├── ControllerConventionalRegistrar.cs │ │ │ │ ├── Localization │ │ │ │ │ └── StudioXLocalizationController.cs │ │ │ │ ├── Results │ │ │ │ │ └── StudioXJsonResult.cs │ │ │ │ ├── StudioXAppViewController.cs │ │ │ │ ├── StudioXController.cs │ │ │ │ ├── StudioXScriptsController.cs │ │ │ │ ├── StudioXUserConfigurationController.cs │ │ │ │ └── WindsorControllerFactory.cs │ │ │ ├── Extensions │ │ │ │ ├── ActionDescriptorExtensions.cs │ │ │ │ └── HtmlHelperResourceExtensions.cs │ │ │ ├── Helpers │ │ │ │ └── MethodInfoHelper.cs │ │ │ ├── ModelBinding │ │ │ │ └── Binders │ │ │ │ │ └── StudioXMvcDateTimeBinder.cs │ │ │ ├── Models │ │ │ │ └── ModelStateExtensions.cs │ │ │ ├── Resources │ │ │ │ ├── Embedded │ │ │ │ │ ├── EmbeddedResourceItemCacheDependency.cs │ │ │ │ │ ├── EmbeddedResourceItemVirtualFile.cs │ │ │ │ │ ├── EmbeddedResourceVirtualPathProvider.cs │ │ │ │ │ └── Handlers │ │ │ │ │ │ ├── EmbeddedResourceHttpHandler.cs │ │ │ │ │ │ └── EmbeddedResourceRouteHandler.cs │ │ │ │ └── WebResourceHelper.cs │ │ │ ├── Security │ │ │ │ └── AntiForgery │ │ │ │ │ ├── StudioXAntiForgeryMvcFilter.cs │ │ │ │ │ └── StudioXMvcAntiForgeryTokenManager.cs │ │ │ ├── StudioXWebMvcModule.cs │ │ │ ├── Uow │ │ │ │ └── StudioXMvcUowFilter.cs │ │ │ ├── Validation │ │ │ │ ├── MvcActionInvocationValidator.cs │ │ │ │ └── StudioXMvcValidationFilter.cs │ │ │ └── Views │ │ │ │ ├── StudioXWebViewPage.cs │ │ │ │ └── StudioXWebViewPageOfTModel.cs │ │ │ └── Security │ │ │ └── AntiForgery │ │ │ └── StudioXAntiForgeryManagerMvcExtensions.cs │ ├── StudioX.Web.SignalR │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Web.SignalR.csproj │ │ └── Web │ │ │ └── SignalR │ │ │ ├── Hubs │ │ │ └── StudioXCommonHub.cs │ │ │ ├── Notifications │ │ │ └── SignalRRealTimeNotifier.cs │ │ │ ├── StudioXSignalRContractResolver.cs │ │ │ ├── StudioXWebSignalRModule.cs │ │ │ └── WindsorDependencyResolver.cs │ ├── StudioX.Web │ │ ├── Auditing │ │ │ └── WebClientInfoProvider.cs │ │ ├── Configuration │ │ │ └── Startup │ │ │ │ └── StudioXWebConfigurationExtensions.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Web.csproj │ │ └── Web │ │ │ ├── Configuration │ │ │ ├── IStudioXWebLocalizationConfiguration.cs │ │ │ ├── IStudioXWebModuleConfiguration.cs │ │ │ ├── StudioXWebLocalizationConfiguration.cs │ │ │ └── StudioXWebModuleConfiguration.cs │ │ │ ├── Localization │ │ │ ├── CurrentCultureSetter.cs │ │ │ └── ICurrentCultureSetter.cs │ │ │ ├── MultiTenancy │ │ │ ├── DomainTenantResolveContributor.cs │ │ │ ├── HttpContextTenantResolverCache.cs │ │ │ ├── HttpCookieTenantResolveContributor.cs │ │ │ └── HttpHeaderTenantResolveContributor.cs │ │ │ ├── PlugInSourceExtensions.cs │ │ │ ├── Security │ │ │ └── AntiForgery │ │ │ │ ├── DisableStudioXAntiForgeryTokenValidationAttribute.cs │ │ │ │ ├── IStudioXAntiForgeryWebConfiguration.cs │ │ │ │ ├── StudioXAntiForgeryManagerWebExtensions.cs │ │ │ │ ├── StudioXAntiForgeryWebConfiguration.cs │ │ │ │ └── ValidateStudioXAntiForgeryTokenAttribute.cs │ │ │ ├── Session │ │ │ └── HttpContextPrincipalAccessor.cs │ │ │ ├── StudioXUrlHelper.cs │ │ │ ├── StudioXWebApplication.cs │ │ │ └── StudioXWebModule.cs │ └── StudioX │ │ ├── Application │ │ ├── Features │ │ │ ├── Feature.cs │ │ │ ├── FeatureChecker.cs │ │ │ ├── FeatureCheckerExtensions.cs │ │ │ ├── FeatureConfiguration.cs │ │ │ ├── FeatureDefinitionContextBase.cs │ │ │ ├── FeatureDependencyContext.cs │ │ │ ├── FeatureDependencyExtensions.cs │ │ │ ├── FeatureDictionary.cs │ │ │ ├── FeatureManager.cs │ │ │ ├── FeatureProvider.cs │ │ │ ├── FeatureScopes.cs │ │ │ ├── IFeatureChecker.cs │ │ │ ├── IFeatureConfiguration.cs │ │ │ ├── IFeatureDefinitionContext.cs │ │ │ ├── IFeatureDependency.cs │ │ │ ├── IFeatureDependencyContext.cs │ │ │ ├── IFeatureManager.cs │ │ │ ├── IFeatureValueStore.cs │ │ │ ├── NullFeatureValueStore.cs │ │ │ ├── RequiresFeatureAttribute.cs │ │ │ └── SimpleFeatureDependency.cs │ │ ├── Navigation │ │ │ ├── HasMenuItemDefinitionsExtensions.cs │ │ │ ├── IHasMenuItemDefinitions.cs │ │ │ ├── INavigationManager.cs │ │ │ ├── INavigationProviderContext.cs │ │ │ ├── IUserNavigationManager.cs │ │ │ ├── MenuDefinition.cs │ │ │ ├── MenuItemDefinition.cs │ │ │ ├── MenuItemDefinitionExtensions.cs │ │ │ ├── NavigationManager.cs │ │ │ ├── NavigationProvider.cs │ │ │ ├── NavigationProviderContext.cs │ │ │ ├── UserMenu.cs │ │ │ ├── UserMenuItem.cs │ │ │ └── UserNavigationManager.cs │ │ └── Services │ │ │ ├── ApplicationService.cs │ │ │ ├── AsyncCrudAppService.cs │ │ │ ├── CrudAppService.cs │ │ │ ├── CrudAppServiceBase.cs │ │ │ ├── Dto │ │ │ ├── AuditedEntityDto.cs │ │ │ ├── ComboboxItemDto.cs │ │ │ ├── CreationAuditedEntityDto.cs │ │ │ ├── EntityDto.cs │ │ │ ├── FullAuditedEntityDto.cs │ │ │ ├── IEntityDto.cs │ │ │ ├── IHasLongTotalCount.cs │ │ │ ├── IHasTotalCount.cs │ │ │ ├── ILimitedResultRequest.cs │ │ │ ├── IListResult.cs │ │ │ ├── IPagedAndSortedResultRequest.cs │ │ │ ├── IPagedResult.cs │ │ │ ├── IPagedResultRequest.cs │ │ │ ├── ISortedResultRequest.cs │ │ │ ├── LimitedResultRequestDto.cs │ │ │ ├── ListResultDto.cs │ │ │ ├── NameValueDto.cs │ │ │ ├── NullableIdDto.cs │ │ │ ├── PagedAndSortedResultRequestDto.cs │ │ │ ├── PagedResultDto.cs │ │ │ └── PagedResultRequestDto.cs │ │ │ ├── IApplicationService.cs │ │ │ ├── IAsyncCrudAppService.cs │ │ │ ├── IAvoidDuplicateCrossCuttingConcerns.cs │ │ │ ├── ICrudAppService.cs │ │ │ └── RemoteServiceAttribute.cs │ │ ├── Aspects │ │ ├── AspectAttribute.cs │ │ └── StudioXCrossCuttingConcerns.cs │ │ ├── Auditing │ │ ├── AuditInfo.cs │ │ ├── AuditedAttribute.cs │ │ ├── AuditingConfiguration.cs │ │ ├── AuditingContractResolver.cs │ │ ├── AuditingHelper.cs │ │ ├── AuditingInterceptor.cs │ │ ├── AuditingInterceptorRegistrar.cs │ │ ├── AuditingSelectorList.cs │ │ ├── AuditingStoreExtensions.cs │ │ ├── DisableAuditingAttribute.cs │ │ ├── IAuditInfoProvider.cs │ │ ├── IAuditSerializer.cs │ │ ├── IAuditingConfiguration.cs │ │ ├── IAuditingHelper.cs │ │ ├── IAuditingSelectorList.cs │ │ ├── IAuditingStore.cs │ │ ├── IClientInfoProvider.cs │ │ ├── JsonNetAuditSerializer.cs │ │ ├── NullAuditInfoProvider.cs │ │ ├── NullClientInfoProvider.cs │ │ └── SimpleLogAuditingStore.cs │ │ ├── Authorization │ │ ├── AuthorizationHelper.cs │ │ ├── AuthorizationHelperExtensions.cs │ │ ├── AuthorizationInterceptor.cs │ │ ├── AuthorizationInterceptorRegistrar.cs │ │ ├── AuthorizationProvider.cs │ │ ├── IAuthorizationHelper.cs │ │ ├── IPermissionChecker.cs │ │ ├── IPermissionDefinitionContext.cs │ │ ├── IPermissionDependency.cs │ │ ├── IPermissionDependencyContext.cs │ │ ├── IPermissionManager.cs │ │ ├── IStudioXAllowAnonymousAttribute.cs │ │ ├── IStudioXAuthorizeAttribute.cs │ │ ├── NullPermissionChecker.cs │ │ ├── Permission.cs │ │ ├── PermissionCheckerExtensions.cs │ │ ├── PermissionDefinitionContextBase.cs │ │ ├── PermissionDependencyContext.cs │ │ ├── PermissionDependencyExtensions.cs │ │ ├── PermissionDictionary.cs │ │ ├── PermissionFinder.cs │ │ ├── PermissionManager.cs │ │ ├── SimplePermissionDependency.cs │ │ ├── StudioXAllowAnonymousAttribute.cs │ │ ├── StudioXAuthorizationException.cs │ │ └── StudioXAuthorizeAttribute.cs │ │ ├── BackgroundJobs │ │ ├── BackgroundJob.cs │ │ ├── BackgroundJobConfiguration.cs │ │ ├── BackgroundJobException.cs │ │ ├── BackgroundJobInfo.cs │ │ ├── BackgroundJobManager.cs │ │ ├── BackgroundJobManagerExtensions.cs │ │ ├── BackgroundJobPriority.cs │ │ ├── IBackgroundJob.cs │ │ ├── IBackgroundJobConfiguration.cs │ │ ├── IBackgroundJobManager.cs │ │ ├── IBackgroundJobStore.cs │ │ ├── InMemoryBackgroundJobStore.cs │ │ └── NullBackgroundJobStore.cs │ │ ├── Check.cs │ │ ├── Collections │ │ ├── Extensions │ │ │ ├── CollectionExtensions.cs │ │ │ ├── DictionaryExtensions.cs │ │ │ ├── EnumerableExtensions.cs │ │ │ └── ListExtensions.cs │ │ ├── ITypeList.cs │ │ └── TypeList.cs │ │ ├── Compability │ │ └── System.Transactions.cs │ │ ├── Configuration │ │ ├── CacheManagerSettingExtensions.cs │ │ ├── DefaultConfigSettingStore.cs │ │ ├── DictionaryBasedConfig.cs │ │ ├── IDictionaryBasedConfig.cs │ │ ├── ISettingDefinitionManager.cs │ │ ├── ISettingManager.cs │ │ ├── ISettingStore.cs │ │ ├── ISettingValue.cs │ │ ├── SettingDefinition.cs │ │ ├── SettingDefinitionGroup.cs │ │ ├── SettingDefinitionManager.cs │ │ ├── SettingDefinitionProviderContext.cs │ │ ├── SettingInfo.cs │ │ ├── SettingManager.cs │ │ ├── SettingManagerExtensions.cs │ │ ├── SettingProvider.cs │ │ ├── SettingScope.cs │ │ └── Startup │ │ │ ├── AuthorizationConfiguration.cs │ │ │ ├── EventBusConfiguration.cs │ │ │ ├── IAuthorizationConfiguration.cs │ │ │ ├── IEventBusConfiguration.cs │ │ │ ├── ILocalizationConfiguration.cs │ │ │ ├── ILocalizationSourceList.cs │ │ │ ├── IModuleConfigurations.cs │ │ │ ├── IMultiTenancyConfig.cs │ │ │ ├── INavigationConfiguration.cs │ │ │ ├── ISettingsConfiguration.cs │ │ │ ├── IStudioXStartupConfiguration.cs │ │ │ ├── IValidationConfiguration.cs │ │ │ ├── LocalizationConfiguration.cs │ │ │ ├── LocalizationSourceList.cs │ │ │ ├── ModuleConfigurations.cs │ │ │ ├── MultiTenancyConfig.cs │ │ │ ├── NavigationConfiguration.cs │ │ │ ├── SettingsConfiguration.cs │ │ │ ├── StudioXStartupConfiguration.cs │ │ │ ├── StudioXStartupConfigurationExtensions.cs │ │ │ └── ValidationConfiguration.cs │ │ ├── Data │ │ ├── ActiveTransactionProviderArgs.cs │ │ └── IActiveTransactionProvider.cs │ │ ├── Dependency │ │ ├── BasicConventionalRegistrar.cs │ │ ├── ConventionalRegistrationConfig.cs │ │ ├── ConventionalRegistrationContext.cs │ │ ├── DependencyLifeStyle.cs │ │ ├── DisposableDependencyObjectWrapperOfT.cs │ │ ├── IConventionalDependencyRegistrar.cs │ │ ├── IConventionalRegistrationContext.cs │ │ ├── IDisposableDependencyObjectWrapper.cs │ │ ├── IDisposableDependencyObjectWrapperOfT.cs │ │ ├── IIocManager.cs │ │ ├── IIocManagerAccessor.cs │ │ ├── IIocRegistrar.cs │ │ ├── IIocResolver.cs │ │ ├── IScopedIocResolver.cs │ │ ├── ISingletonDependency.cs │ │ ├── ITransientDependency.cs │ │ ├── Installers │ │ │ └── StudioXCoreInstaller.cs │ │ ├── IocManager.cs │ │ ├── IocRegistrarExtensions.cs │ │ ├── IocResolverExtensions.cs │ │ ├── ScopedIocResolver.cs │ │ └── SingletonDependency.cs │ │ ├── DisposeAction.cs │ │ ├── Domain │ │ ├── Entities │ │ │ ├── AggregateRoot.cs │ │ │ ├── Auditing │ │ │ │ ├── AuditedAggregateRoot.cs │ │ │ │ ├── AuditedEntity.cs │ │ │ │ ├── CreationAuditedAggregateRoot.cs │ │ │ │ ├── CreationAuditedEntity.cs │ │ │ │ ├── EntityAuditingHelper.cs │ │ │ │ ├── FullAuditedAggregateRoot.cs │ │ │ │ ├── FullAuditedEntity.cs │ │ │ │ ├── IAudited.cs │ │ │ │ ├── ICreationAudited.cs │ │ │ │ ├── IDeletionAudited.cs │ │ │ │ ├── IFullAudited.cs │ │ │ │ ├── IHasCreationTime.cs │ │ │ │ ├── IHasDeletionTime.cs │ │ │ │ ├── IHasModificationTime.cs │ │ │ │ └── IModificationAudited.cs │ │ │ ├── Caching │ │ │ │ ├── EntityCache.cs │ │ │ │ └── IEntityCache.cs │ │ │ ├── Entity.cs │ │ │ ├── EntityExtensions.cs │ │ │ ├── EntityHelper.cs │ │ │ ├── EntityIdentifier.cs │ │ │ ├── EntityNotFoundException.cs │ │ │ ├── EntityTypeInfo.cs │ │ │ ├── ExtendableObjectExtensions.cs │ │ │ ├── IAggregateRoot.cs │ │ │ ├── IEntity.cs │ │ │ ├── IEntityOfTPrimaryKey.cs │ │ │ ├── IExtendableObject.cs │ │ │ ├── IMayHaveTenant.cs │ │ │ ├── IMustHaveTenant.cs │ │ │ ├── IPassivable.cs │ │ │ └── ISoftDelete.cs │ │ ├── Policies │ │ │ └── IPolicy.cs │ │ ├── Repositories │ │ │ ├── AutoRepositoryTypesAttribute.cs │ │ │ ├── IRepository.cs │ │ │ ├── IRepositoryOfTEntity.cs │ │ │ ├── IRepositoryOfTEntityAndTPrimaryKey.cs │ │ │ ├── ISupportsExplicitLoading.cs │ │ │ ├── RepositoryExtensions.cs │ │ │ └── StudioXRepositoryBase.cs │ │ ├── Services │ │ │ ├── DomainService.cs │ │ │ └── IDomainService.cs │ │ ├── Uow │ │ │ ├── AsyncLocalCurrentUnitOfWorkProvider.cs │ │ │ ├── CallContextCurrentUnitOfWorkProvider.cs │ │ │ ├── ConnectionStringResolveArgs.cs │ │ │ ├── DataFilterConfiguration.cs │ │ │ ├── DefaultConnectionStringResolver.cs │ │ │ ├── IActiveUnitOfWork.cs │ │ │ ├── IConnectionStringResolver.cs │ │ │ ├── ICurrentUnitOfWorkProvider.cs │ │ │ ├── IUnitOfWork.cs │ │ │ ├── IUnitOfWorkCompleteHandle.cs │ │ │ ├── IUnitOfWorkDefaultOptions.cs │ │ │ ├── IUnitOfWorkFilterExecuter.cs │ │ │ ├── IUnitOfWorkManager.cs │ │ │ ├── InnerUnitOfWorkCompleteHandle.cs │ │ │ ├── NullUnitOfWork.cs │ │ │ ├── NullUnitOfWorkFilterExecuter.cs │ │ │ ├── StudioXDataFilters.cs │ │ │ ├── StudioXDbConcurrencyException.cs │ │ │ ├── UnitOfWorkAttribute.cs │ │ │ ├── UnitOfWorkBase.cs │ │ │ ├── UnitOfWorkDefaultOptions.cs │ │ │ ├── UnitOfWorkDefaultOptionsExtensions.cs │ │ │ ├── UnitOfWorkFailedEventArgs.cs │ │ │ ├── UnitOfWorkHelper.cs │ │ │ ├── UnitOfWorkInterceptor.cs │ │ │ ├── UnitOfWorkManager.cs │ │ │ ├── UnitOfWorkOptions.cs │ │ │ └── UnitOfWorkRegistrar.cs │ │ └── Values │ │ │ └── ValueObject.cs │ │ ├── Events │ │ └── Bus │ │ │ ├── Entities │ │ │ ├── DomainEventEntry.cs │ │ │ ├── EntityChangeEntry.cs │ │ │ ├── EntityChangeEventHelper.cs │ │ │ ├── EntityChangeReport.cs │ │ │ ├── EntityChangeType.cs │ │ │ ├── EntityChangedEventData.cs │ │ │ ├── EntityChangingEventData.cs │ │ │ ├── EntityCreatedEventData.cs │ │ │ ├── EntityCreatingEventData.cs │ │ │ ├── EntityDeletedEventData.cs │ │ │ ├── EntityDeletingEventData.cs │ │ │ ├── EntityEventData.cs │ │ │ ├── EntityUpdatedEventData.cs │ │ │ ├── EntityUpdatingEventData.cs │ │ │ ├── IEntityChangeEventHelper.cs │ │ │ └── NullEntityChangeEventHelper.cs │ │ │ ├── EventBus.cs │ │ │ ├── EventBusInstaller.cs │ │ │ ├── EventData.cs │ │ │ ├── Exceptions │ │ │ ├── ExceptionData.cs │ │ │ └── StudioXHandledExceptionData.cs │ │ │ ├── Factories │ │ │ ├── IEventHandlerFactory.cs │ │ │ ├── Internals │ │ │ │ ├── FactoryUnregistrar.cs │ │ │ │ ├── SingleInstanceHandlerFactory.cs │ │ │ │ └── TransientEventHandlerFactory.cs │ │ │ └── IocHandlerFactory.cs │ │ │ ├── Handlers │ │ │ ├── IEventHandler.cs │ │ │ ├── IEventHandlerOfTEventData.cs │ │ │ └── Internals │ │ │ │ └── ActionEventHandler.cs │ │ │ ├── IEventBus.cs │ │ │ ├── IEventData.cs │ │ │ ├── IEventDataWithInheritableGenericArgument.cs │ │ │ └── NullEventBus.cs │ │ ├── Extensions │ │ ├── ComparableExtensions.cs │ │ ├── DateTimeExtensions.cs │ │ ├── DateTimeRangeExtensions.cs │ │ ├── DayOfWeekExtensions.cs │ │ ├── EventHandlerExtensions.cs │ │ ├── ExceptionExtensions.cs │ │ ├── ObjectExtensions.cs │ │ └── StringExtensions.cs │ │ ├── IGuidGenerator.cs │ │ ├── IHasErrorCode.cs │ │ ├── IO │ │ ├── DirectoryHelper.cs │ │ ├── Extensions │ │ │ └── StreamExtensions.cs │ │ └── FileHelper.cs │ │ ├── IShouldInitialize.cs │ │ ├── IUserIdentifier.cs │ │ ├── Json │ │ ├── JsonExtensions.cs │ │ ├── JsonSerializationHelper.cs │ │ └── StudioXDateTimeConverter.cs │ │ ├── Linq │ │ ├── Extensions │ │ │ └── QueryableExtensions.cs │ │ ├── IAsyncQueryableExecuter.cs │ │ └── NullAsyncQueryableExecuter.cs │ │ ├── Localization │ │ ├── CultureInfoHelper.cs │ │ ├── DefaultLanguageProvider.cs │ │ ├── Dictionaries │ │ │ ├── DictionaryBasedLocalizationSource.cs │ │ │ ├── IDictionaryBasedLocalizationSource.cs │ │ │ ├── ILocalizationDictionary.cs │ │ │ ├── ILocalizationDictionaryProvider.cs │ │ │ ├── Json │ │ │ │ ├── JsonEmbeddedFileLocalizationDictionaryProvider.cs │ │ │ │ ├── JsonFileLocalizationDictionaryProvider.cs │ │ │ │ ├── JsonLocalizationDictionary.cs │ │ │ │ └── JsonLocalizationFile.cs │ │ │ ├── LocalizationDictionary.cs │ │ │ ├── Utf8Helper.cs │ │ │ └── Xml │ │ │ │ ├── LocalizationDictionaryProviderBase.cs │ │ │ │ ├── XmlEmbeddedFileLocalizationDictionaryProvider.cs │ │ │ │ ├── XmlFileLocalizationDictionaryProvider.cs │ │ │ │ └── XmlLocalizationDictionary.cs │ │ ├── FixedLocalizableString.cs │ │ ├── GlobalizationHelper.cs │ │ ├── ILanguageManager.cs │ │ ├── ILanguageProvider.cs │ │ ├── ILocalizableString.cs │ │ ├── ILocalizationContext.cs │ │ ├── ILocalizationManager.cs │ │ ├── LanguageInfo.cs │ │ ├── LanguageManager.cs │ │ ├── LocalizableString.cs │ │ ├── LocalizableStringToStringJsonConverter.cs │ │ ├── LocalizationContext.cs │ │ ├── LocalizationHelper.cs │ │ ├── LocalizationManager.cs │ │ ├── LocalizationManagerExtensions.cs │ │ ├── LocalizationSettingNames.cs │ │ ├── LocalizationSettingProvider.cs │ │ ├── LocalizationSourceHelper.cs │ │ ├── LocalizedString.cs │ │ ├── NullLocalizationManager.cs │ │ ├── Sources │ │ │ ├── ILocalizationSource.cs │ │ │ ├── LocalizationSourceExtensionInfo.cs │ │ │ ├── LocalizationSourceExtensions.cs │ │ │ ├── NullLocalizationSource.cs │ │ │ ├── Resource │ │ │ │ └── ResourceFileLocalizationSource.cs │ │ │ └── StudioXXmlSource │ │ │ │ ├── StudioX-ca-ES.xml │ │ │ │ ├── StudioX-de.xml │ │ │ │ ├── StudioX-es.xml │ │ │ │ ├── StudioX-fa.xml │ │ │ │ ├── StudioX-fr.xml │ │ │ │ ├── StudioX-it.xml │ │ │ │ ├── StudioX-lt.xml │ │ │ │ ├── StudioX-lv.xml │ │ │ │ ├── StudioX-pt-BR.xml │ │ │ │ ├── StudioX-ru.xml │ │ │ │ ├── StudioX-tr.xml │ │ │ │ ├── StudioX-uk.xml │ │ │ │ ├── StudioX-zh-CN.xml │ │ │ │ └── StudioX.xml │ │ └── StudioXDisplayNameAttribute.cs │ │ ├── Logging │ │ ├── IHasLogSeverity.cs │ │ ├── LogHelper.cs │ │ ├── LogSeverity.cs │ │ └── LoggerExtensions.cs │ │ ├── Modules │ │ ├── DependsOnAttribute.cs │ │ ├── IStudioXModuleManager.cs │ │ ├── StudioXModule.cs │ │ ├── StudioXModuleCollection.cs │ │ ├── StudioXModuleInfo.cs │ │ └── StudioXModuleManager.cs │ │ ├── MultiTenancy │ │ ├── ITenantResolveContributor.cs │ │ ├── ITenantResolver.cs │ │ ├── ITenantResolverCache.cs │ │ ├── ITenantStore.cs │ │ ├── MultiTenancyConsts.cs │ │ ├── MultiTenancyExtensions.cs │ │ ├── MultiTenancyHelper.cs │ │ ├── MultiTenancySideAttribute.cs │ │ ├── MultiTenancySides.cs │ │ ├── NullTenantResolverCache.cs │ │ ├── NullTenantStore.cs │ │ ├── TenantInfo.cs │ │ ├── TenantResolver.cs │ │ └── TenantResolverCacheItem.cs │ │ ├── NameValue.cs │ │ ├── NamedTypeSelector.cs │ │ ├── Net │ │ └── Mail │ │ │ ├── EmailSenderBase.cs │ │ │ ├── EmailSenderConfiguration.cs │ │ │ ├── EmailSettingNames.cs │ │ │ ├── EmailSettingProvider.cs │ │ │ ├── IEmailSender.cs │ │ │ ├── IEmailSenderConfiguration.cs │ │ │ ├── NullEmailSender.cs │ │ │ └── Smtp │ │ │ ├── ISmtpEmailSender.cs │ │ │ ├── ISmtpEmailSenderConfiguration.cs │ │ │ ├── SmtpEmailSender.cs │ │ │ └── SmtpEmailSenderConfiguration.cs │ │ ├── Notifications │ │ ├── INotificationConfiguration.cs │ │ ├── INotificationDefinitionContext.cs │ │ ├── INotificationDefinitionManager.cs │ │ ├── INotificationDistributer.cs │ │ ├── INotificationPublisher.cs │ │ ├── INotificationStore.cs │ │ ├── INotificationSubscriptionManager.cs │ │ ├── IRealTimeNotifier.cs │ │ ├── IUserNotificationManager.cs │ │ ├── LocalizableMessageNotificationData.cs │ │ ├── MessageNotificationData.cs │ │ ├── NotificationConfiguration.cs │ │ ├── NotificationData.cs │ │ ├── NotificationDefinition.cs │ │ ├── NotificationDefinitionContext.cs │ │ ├── NotificationDefinitionManager.cs │ │ ├── NotificationDefinitionManagerExtensions.cs │ │ ├── NotificationDistributer.cs │ │ ├── NotificationDistributionJob.cs │ │ ├── NotificationDistributionJobArgs.cs │ │ ├── NotificationExtensions.cs │ │ ├── NotificationInfo.cs │ │ ├── NotificationProvider.cs │ │ ├── NotificationPublisher.cs │ │ ├── NotificationSettingNames.cs │ │ ├── NotificationSettingProvider.cs │ │ ├── NotificationSeverity.cs │ │ ├── NotificationSubscription.cs │ │ ├── NotificationSubscriptionInfo.cs │ │ ├── NotificationSubscriptionInfoExtensions.cs │ │ ├── NotificationSubscriptionManager.cs │ │ ├── NullNotificationStore.cs │ │ ├── NullRealTimeNotifier.cs │ │ ├── TenantNotification.cs │ │ ├── TenantNotificationInfo.cs │ │ ├── TenantNotificationInfoExtensions.cs │ │ ├── UserNotification.cs │ │ ├── UserNotificationInfo.cs │ │ ├── UserNotificationInfoExtensions.cs │ │ ├── UserNotificationInfoWithNotificationInfo.cs │ │ ├── UserNotificationInfoWithNotificationInfoExtensions.cs │ │ ├── UserNotificationManager.cs │ │ └── UserNotificationState.cs │ │ ├── ObjectMapping │ │ ├── IObjectMapper.cs │ │ └── NullObjectMapper.cs │ │ ├── Orm │ │ └── ISecondaryOrmRegistrar.cs │ │ ├── PlugIns │ │ ├── AssemblyFileListPlugInSource.cs │ │ ├── FolderPlugInSource.cs │ │ ├── IPlugInSource.cs │ │ ├── IStudioXPlugInManager.cs │ │ ├── PlugInSourceExtensions.cs │ │ ├── PlugInSourceList.cs │ │ ├── PlugInSourceListExtensions.cs │ │ ├── PlugInTypeListSource.cs │ │ └── StudioXPlugInManager.cs │ │ ├── Properties │ │ └── AssemblyInfo.cs │ │ ├── RandomHelper.cs │ │ ├── RealTime │ │ ├── IOnlineClient.cs │ │ ├── IOnlineClientManager.cs │ │ ├── OnlineClient.cs │ │ ├── OnlineClientEventArgs.cs │ │ ├── OnlineClientExtensions.cs │ │ ├── OnlineClientManager.cs │ │ ├── OnlineClientManagerExtensions.cs │ │ └── OnlineUserEventArgs.cs │ │ ├── Reflection │ │ ├── AssemblyHelper.cs │ │ ├── Extensions │ │ │ ├── AssemblyExtensions.cs │ │ │ ├── MemberInfoExtensions.cs │ │ │ └── TypeExtensions.cs │ │ ├── IAssemblyFinder.cs │ │ ├── ITypeFinder.cs │ │ ├── ProxyHelper.cs │ │ ├── ReflectionHelper.cs │ │ ├── StudioXAssemblyFinder.cs │ │ ├── TypeFinder.cs │ │ └── TypeHelper.cs │ │ ├── RegularGuidGenerator.cs │ │ ├── Resources │ │ └── Embedded │ │ │ ├── EmbeddedFilePathHelper.cs │ │ │ ├── EmbeddedResourceItem.cs │ │ │ ├── EmbeddedResourceManager.cs │ │ │ ├── EmbeddedResourceSet.cs │ │ │ ├── EmbeddedResourcesConfiguration.cs │ │ │ ├── IEmbeddedResourceManager.cs │ │ │ └── IEmbeddedResourcesConfiguration.cs │ │ ├── Runtime │ │ ├── Caching │ │ │ ├── CacheBase.cs │ │ │ ├── CacheExtensions.cs │ │ │ ├── CacheManagerBase.cs │ │ │ ├── CacheManagerExtensions.cs │ │ │ ├── Configuration │ │ │ │ ├── CacheConfigurator.cs │ │ │ │ ├── CachingConfiguration.cs │ │ │ │ ├── ICacheConfigurator.cs │ │ │ │ └── ICachingConfiguration.cs │ │ │ ├── ICache.cs │ │ │ ├── ICacheManager.cs │ │ │ ├── ITypedCache.cs │ │ │ ├── Memory │ │ │ │ ├── StudioXMemoryCache.cs │ │ │ │ ├── StudioXMemoryCacheManager.cs │ │ │ │ └── StudioXMemoryCache_NetStandard.cs │ │ │ ├── StudioXCacheNames.cs │ │ │ ├── TypedCacheExtensions.cs │ │ │ └── TypedCacheWrapper.cs │ │ ├── IAmbientDataContext.cs │ │ ├── IAmbientScopeProvider.cs │ │ ├── Remoting │ │ │ ├── AsyncLocalAmbientDataContext.cs │ │ │ ├── CallContextAmbientDataContext.cs │ │ │ └── DataContextAmbientScopeProvider.cs │ │ ├── Security │ │ │ ├── ClaimsIdentityExtensions.cs │ │ │ ├── SimpleStringCipher.cs │ │ │ ├── SimpleStringCipher_NetStandard.cs │ │ │ └── StudioXClaimTypes.cs │ │ ├── Serialization │ │ │ └── BinarySerializationHelper.cs │ │ ├── Session │ │ │ ├── ClaimsStudioXSession.cs │ │ │ ├── DefaultPrincipalAccessor.cs │ │ │ ├── IPrincipalAccessor.cs │ │ │ ├── IStudioXSession.cs │ │ │ ├── NullStudioXSession.cs │ │ │ ├── SessionOverride.cs │ │ │ ├── StudioXSessionBase.cs │ │ │ └── StudioXSessionExtensions.cs │ │ └── Validation │ │ │ ├── AlwaysValidValueValidator.cs │ │ │ ├── BooleanValueValidator.cs │ │ │ ├── CustomValidationContext.cs │ │ │ ├── DisableValidationAttribute.cs │ │ │ ├── EnableValidationAttribute.cs │ │ │ ├── ICustomValidate.cs │ │ │ ├── IShouldNormalize.cs │ │ │ ├── IValueValidator.cs │ │ │ ├── Interception │ │ │ ├── MethodInvocationValidator.cs │ │ │ ├── ValidationInterceptor.cs │ │ │ └── ValidationInterceptorRegistrar.cs │ │ │ ├── NumericValueValidator.cs │ │ │ ├── StringValueValidator.cs │ │ │ ├── StudioXValidationException.cs │ │ │ ├── ValidatorAttribute.cs │ │ │ └── ValueValidatorBase.cs │ │ ├── SequentialGuidGenerator.cs │ │ ├── Specifications │ │ ├── AndNotSpecification.cs │ │ ├── AndSpecification.cs │ │ ├── AnySpecification.cs │ │ ├── CompositeSpecification.cs │ │ ├── ExpressionFuncExtender.cs │ │ ├── ExpressionSpecification.cs │ │ ├── ICompositeSpecification.cs │ │ ├── ISpecification.cs │ │ ├── ISpecificationParser.cs │ │ ├── NoneSpecification.cs │ │ ├── NotSpecification.cs │ │ ├── OrSpecification.cs │ │ ├── ParameterRebinder.cs │ │ ├── Specification.cs │ │ └── SpecificationExtensions.cs │ │ ├── StudioX.csproj │ │ ├── StudioXBootstrapper.cs │ │ ├── StudioXConsts.cs │ │ ├── StudioXException.cs │ │ ├── StudioXInitializationException.cs │ │ ├── StudioXKernelModule.cs │ │ ├── StudioXServiceBase.cs │ │ ├── Text │ │ ├── FormattedStringValueExtracter.cs │ │ └── Formatting │ │ │ ├── FormatStringToken.cs │ │ │ ├── FormatStringTokenType.cs │ │ │ └── FormatStringTokenizer.cs │ │ ├── Threading │ │ ├── AsyncHelper.cs │ │ ├── BackgroundWorkers │ │ │ ├── BackgroundWorkerBase.cs │ │ │ ├── BackgroundWorkerManager.cs │ │ │ ├── IBackgroundWorker.cs │ │ │ ├── IBackgroundWorkerManager.cs │ │ │ └── PeriodicBackgroundWorkerBase.cs │ │ ├── Extensions │ │ │ └── LockExtensions.cs │ │ ├── IRunnable.cs │ │ ├── InternalAsyncHelper.cs │ │ ├── RunnableBase.cs │ │ ├── RunnableExtensions.cs │ │ ├── StudioXTaskCache.cs │ │ ├── ThreadCultureSanitizer.cs │ │ └── Timers │ │ │ └── StudioXTimer.cs │ │ ├── Timing │ │ ├── Clock.cs │ │ ├── ClockProviders.cs │ │ ├── DateTimeRange.cs │ │ ├── IClockProvider.cs │ │ ├── IDateTimeRange.cs │ │ ├── LocalClockProvider.cs │ │ ├── Timezone │ │ │ ├── ITimeZoneConverter.cs │ │ │ ├── Mapping │ │ │ │ └── WindowsZones.xml │ │ │ ├── TimeZoneConverter.cs │ │ │ └── TimezoneHelper.cs │ │ ├── TimingSettingNames.cs │ │ ├── TimingSettingProvider.cs │ │ ├── UnspecifiedClockProvider.cs │ │ └── UtcClockProvider.cs │ │ ├── Transactions │ │ └── Extensions │ │ │ └── IsolationLevelExtensions.cs │ │ ├── UI │ │ ├── Inputs │ │ │ ├── CheckboxInputType.cs │ │ │ ├── ComboboxInputType.cs │ │ │ ├── IInputType.cs │ │ │ ├── ILocalizableComboboxItem.cs │ │ │ ├── ILocalizableComboboxItemSource.cs │ │ │ ├── InputTypeAttribute.cs │ │ │ ├── InputTypeBase.cs │ │ │ ├── LocalizableComboboxItem.cs │ │ │ ├── SingleLineStringInputType.cs │ │ │ └── StaticLocalizableComboboxItemSource.cs │ │ └── UserFriendlyException.cs │ │ ├── UserIdentifier.cs │ │ ├── UserIdentifierExtensions.cs │ │ ├── Utils │ │ └── Etc │ │ │ └── NullDisposable.cs │ │ ├── Web │ │ └── Models │ │ │ ├── DontWrapResultAttribute.cs │ │ │ └── WrapResultAttribute.cs │ │ └── Xml │ │ └── Extensions │ │ └── XmlExtensions.cs ├── test │ ├── StudioX.AspNetCore.Tests │ │ ├── App │ │ │ ├── AppModule.cs │ │ │ ├── AppServices │ │ │ │ ├── NameConflictAppService.cs │ │ │ │ └── ParameterTestAppService.cs │ │ │ ├── Controllers │ │ │ │ ├── AuthTest2Controller.cs │ │ │ │ ├── AuthTestController.cs │ │ │ │ ├── MultiTenancyTestController.cs │ │ │ │ ├── NameConflictController.cs │ │ │ │ ├── SimpleTestController.cs │ │ │ │ └── ValidationTestController.cs │ │ │ ├── Models │ │ │ │ └── SimpleViewModel.cs │ │ │ ├── MultiTenancy │ │ │ │ └── TestTenantStore.cs │ │ │ └── Startup.cs │ │ ├── Mocks │ │ │ └── MockAuditingStore.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.AspNetCore.Tests.csproj │ │ └── Tests │ │ │ ├── AppTestBase.cs │ │ │ ├── AuditLogTests.cs │ │ │ ├── AuthTestControllerTests.cs │ │ │ ├── MultiTenancyTests.cs │ │ │ ├── NameConflictTests.cs │ │ │ ├── ProxyScriptingTests.cs │ │ │ ├── SimpleTestControllerTests.cs │ │ │ ├── Utils │ │ │ └── ArrayMactherTests.cs │ │ │ └── ValidationTests.cs │ ├── StudioX.AutoMapper.Tests │ │ ├── AutoMapperInheritanceTests.cs │ │ ├── AutoMappingTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.AutoMapper.Tests.csproj │ ├── StudioX.Dapper.Tests │ │ ├── DapperApplicationTestBase.cs │ │ ├── DapperRepositoryTests.cs │ │ ├── Entities │ │ │ ├── Product.cs │ │ │ └── ProductDetail.cs │ │ ├── Mappings │ │ │ ├── Product.cs │ │ │ └── ProductDetail.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── SampleDapperApplicationDbContext.cs │ │ ├── SampleDapperApplicationDbContext2.cs │ │ ├── Scripts │ │ │ └── CreateInitialTables.sql │ │ ├── StudioX.Dapper.Tests.csproj │ │ └── StudioXDapperTestModule.cs │ ├── StudioX.EntityFramework.GraphDiff.Tests │ │ ├── Entities │ │ │ ├── MyDependentEntity.cs │ │ │ ├── MyMainEntity.cs │ │ │ └── MyUnmappedEntity.cs │ │ ├── Mapping │ │ │ └── EntityMappingManagerTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.EntityFramework.GraphDiff.Tests.csproj │ │ ├── StudioXEntityFrameworkGraphDiffTestBase.cs │ │ └── StudioXEntityFrameworkGraphDiffTestModule.cs │ ├── StudioX.EntityFramework.Tests │ │ ├── DbContextTypeMatcherTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Repositories │ │ │ └── EntityFrameworkGenericRepositoryRegistrarTests.cs │ │ ├── StudioX.EntityFramework.Tests.csproj │ │ └── Utils │ │ │ └── DateTimePropertyInfoFinderTests.cs │ ├── StudioX.EntityFrameworkCore.Dapper.Tests │ │ ├── Dapper │ │ │ ├── BlogMap.cs │ │ │ ├── CommentMap.cs │ │ │ └── PostMap.cs │ │ ├── Domain │ │ │ ├── Blog.cs │ │ │ ├── BlogUrlChangedEventData.cs │ │ │ ├── Comment.cs │ │ │ └── Post.cs │ │ ├── Ef │ │ │ ├── BloggingDbContext.cs │ │ │ ├── IPostRepository.cs │ │ │ └── PostRepository.cs │ │ ├── StudioX.EntityFrameworkCore.Dapper.Tests.csproj │ │ ├── StudioXEfCoreDapperTestApplicationBase.cs │ │ ├── StudioXEfCoreDapperTestModule.cs │ │ └── Tests │ │ │ ├── DomainEventsTests.cs │ │ │ ├── RepositoryTests.cs │ │ │ └── TransactionTests.cs │ ├── StudioX.EntityFrameworkCore.Tests │ │ ├── Domain │ │ │ ├── Blog.cs │ │ │ ├── BlogUrlChangedEventData.cs │ │ │ ├── Post.cs │ │ │ └── Ticket.cs │ │ ├── Ef │ │ │ ├── BloggingDbContext.cs │ │ │ ├── IPostRepository.cs │ │ │ ├── PostRepository.cs │ │ │ └── SupportDbContext.cs │ │ ├── EntityFrameworkCoreModuleTestBase.cs │ │ ├── EntityFrameworkCoreTestModule.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.EntityFrameworkCore.Tests.csproj │ │ └── Tests │ │ │ ├── DomainEventsTests.cs │ │ │ ├── EntityChangeEventsTests.cs │ │ │ ├── EntityUtcDateTimeTests.cs │ │ │ ├── ExplicitLoadingTests.cs │ │ │ ├── ParallelQueryingTests.cs │ │ │ ├── RepositoryResolveTests.cs │ │ │ ├── RepositoryTests.cs │ │ │ └── TransactionTests.cs │ ├── StudioX.MailKit.Tests │ │ ├── MailKitEmailSenderTests.cs │ │ └── StudioX.MailKit.Tests.csproj │ ├── StudioX.MemoryDb.Tests │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Repositories │ │ │ └── MemoryRepositorySimpleTests.cs │ │ └── StudioX.MemoryDb.Tests.csproj │ ├── StudioX.Quartz.Tests │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── QuartzTests.cs │ │ ├── StudioX.Quartz.Tests.csproj │ │ └── StudioXQuartzTestModule.cs │ ├── StudioX.RedisCache.Tests │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── ProtoBufRedisCacheSerializerTest.cs │ │ ├── RedisCacheManagerTest.cs │ │ └── StudioX.RedisCache.Tests.csproj │ ├── StudioX.TestBase.SampleApplication.Tests │ │ ├── Auditing │ │ │ ├── AuditedEntityTests.cs │ │ │ └── SimpleAuditingTest.cs │ │ ├── Authorization │ │ │ └── CrudServiceAuthTest.cs │ │ ├── ContactLists │ │ │ ├── ContactListMultiTenancyTests.cs │ │ │ ├── MessagesMultiTenancyTests.cs │ │ │ └── QueryingTests.cs │ │ ├── Crud │ │ │ └── CrudAppServiceTests.cs │ │ ├── Domain │ │ │ ├── Entities │ │ │ │ └── Caching │ │ │ │ │ └── EntityCacheInvalidationTests.cs │ │ │ └── Uow │ │ │ │ └── UnitOfWorkAttributeTests.cs │ │ ├── EntityFramework │ │ │ ├── EfRepositoryExtensionsTests.cs │ │ │ ├── GraphDiff │ │ │ │ └── GraphDiffExtensionsTests.cs │ │ │ └── ObjectMaterializeTests.cs │ │ ├── Features │ │ │ └── FeatureSystemTests.cs │ │ ├── GuidEntities │ │ │ └── GuidEntityTests.cs │ │ ├── Messages │ │ │ └── MessageAppServiceTests.cs │ │ ├── Net │ │ │ └── Mail │ │ │ │ └── SmtpEmailSenderResolveTest.cs │ │ ├── People │ │ │ ├── NestedTransactionTest.cs │ │ │ ├── PersonAppServiceTests.cs │ │ │ ├── PersonRepositoryGeneralNolockingTests.cs │ │ │ ├── PersonRepositoryGeneralTests.cs │ │ │ ├── PersonRepositorySoftDeleteTests.cs │ │ │ ├── PersonRepositoryTestsForEntityChangeEvents.cs │ │ │ └── TwoDbContextUowTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── SampleApplicationTestBase.cs │ │ ├── SampleApplicationTestModule.cs │ │ ├── Session │ │ │ └── SessionTests.cs │ │ ├── StudioX.TestBase.SampleApplication.Tests.csproj │ │ └── Uow │ │ │ ├── AsyncLocalTests.cs │ │ │ ├── CustomUowConventionTests.cs │ │ │ ├── UnitOfWorkClassAttributeTest.cs │ │ │ ├── UnitOfWorkEventTests.cs │ │ │ └── UnitOfWorkNestedTests.cs │ ├── StudioX.TestBase.SampleApplication │ │ ├── ContacLists │ │ │ ├── ContactList.cs │ │ │ ├── ContactListAppService.cs │ │ │ ├── ContactListDto.cs │ │ │ ├── IContactListAppService.cs │ │ │ └── SampleFeatureProvider.cs │ │ ├── Crm │ │ │ ├── Address.cs │ │ │ ├── AsyncCompanyAppService.cs │ │ │ ├── Branch.cs │ │ │ ├── Company.cs │ │ │ ├── CompanyAppService.cs │ │ │ └── CompanyDto.cs │ │ ├── EntityFramework │ │ │ ├── Repositories │ │ │ │ └── SampleApplicationEfRepositoryBase.cs │ │ │ ├── SampleApplicationDbContext.cs │ │ │ └── SecondDbContext.cs │ │ ├── GuidEntities │ │ │ ├── TestEntityWithGuidPk.cs │ │ │ └── TestEntityWithGuidPkAndDbGeneratedValue.cs │ │ ├── Messages │ │ │ ├── AsyncMessageAppService.cs │ │ │ ├── GetMessagesWithFilterInput.cs │ │ │ ├── IAsyncMessageAppService.cs │ │ │ ├── Message.cs │ │ │ ├── MessageAppService.cs │ │ │ └── MessageDto.cs │ │ ├── People │ │ │ ├── Dto │ │ │ │ ├── CreatePersonInput.cs │ │ │ │ ├── GetPeopleInput.cs │ │ │ │ └── PersonDto.cs │ │ │ ├── IPersonAppService.cs │ │ │ ├── Person.cs │ │ │ └── PersonAppService.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── SampleApplicationModule.cs │ │ └── StudioX.TestBase.SampleApplication.csproj │ ├── StudioX.TestBase.Tests │ │ ├── Application │ │ │ └── Services │ │ │ │ ├── ApplicationWithoutDbTests.cs │ │ │ │ ├── ServiceWithDifferentInputsTests.cs │ │ │ │ └── ValidationTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Runtime │ │ │ └── Session │ │ │ │ └── SessionTests.cs │ │ └── StudioX.TestBase.Tests.csproj │ ├── StudioX.Tests │ │ ├── Application │ │ │ └── Navigation │ │ │ │ ├── MenuTests.cs │ │ │ │ └── NavigationTestCase.cs │ │ ├── Auditing │ │ │ └── AuditingHelperTests.cs │ │ ├── Authorization │ │ │ ├── AuthorizationHelperTests.cs │ │ │ ├── AuthorizationInterceptorTests.cs │ │ │ └── PermissionDefinitionTests.cs │ │ ├── BackgroundJobs │ │ │ └── InMemoryBackgroundJobStoreTests.cs │ │ ├── Collections │ │ │ ├── Extensions │ │ │ │ └── ListExtensionsTests.cs │ │ │ └── TypeListTest.cs │ │ ├── Configuration │ │ │ ├── DictionaryBasedConfigTest.cs │ │ │ └── SettingManagerTests.cs │ │ ├── Dependency │ │ │ ├── CircularConstructorDependencyTests.cs │ │ │ ├── CircularPropertyDependencyTests.cs │ │ │ ├── DisposableDependencyObjectWrapperTests.cs │ │ │ ├── GenericInjectionTests.cs │ │ │ ├── Interceptors │ │ │ │ └── InterceptorsTests.cs │ │ │ ├── IocManagerLifeStyleTests.cs │ │ │ ├── IocManagerOverrideTests.cs │ │ │ ├── IocManagerSelfRegisterTests.cs │ │ │ ├── IocManagerTests.cs │ │ │ ├── PropertyInjectionTests.cs │ │ │ ├── RegistrarAndResolverTests.cs │ │ │ ├── ScopedIocResolverInjectTests.cs │ │ │ ├── ScopedIocResolverTests.cs │ │ │ ├── ShouldInitializeSimpleTests.cs │ │ │ ├── SimpleDisposableObject.cs │ │ │ ├── SimpleDisposableObject2.cs │ │ │ ├── SimpleDisposableObject3.cs │ │ │ └── UnicodeNamingTests.cs │ │ ├── DisposeActionTest.cs │ │ ├── Domain │ │ │ ├── Entities │ │ │ │ ├── Department.cs │ │ │ │ ├── EntitiesTest.cs │ │ │ │ ├── EntityHelperTests.cs │ │ │ │ ├── ExtendableObjectTests.cs │ │ │ │ ├── Manager.cs │ │ │ │ └── Worker.cs │ │ │ ├── Uow │ │ │ │ ├── InnerUnitOfWorkCompleteHandleTest.cs │ │ │ │ └── UnitOfWorkManagerTests.cs │ │ │ └── Values │ │ │ │ ├── Address.cs │ │ │ │ └── ValueObjectSimpleTests.cs │ │ ├── Events │ │ │ └── Bus │ │ │ │ ├── ActionBasedEventHandlerTest.cs │ │ │ │ ├── EventBusExceptionTest.cs │ │ │ │ ├── EventBusMultipleHandleTest.cs │ │ │ │ ├── EventBusTestBase.cs │ │ │ │ ├── GenericInheritanceTest.cs │ │ │ │ ├── InheritanceTest.cs │ │ │ │ ├── MyDerivedEventData.cs │ │ │ │ ├── MySimpleEventData.cs │ │ │ │ ├── MySimpleTransientEventHandler.cs │ │ │ │ └── TransientDisposableEventHandlerTest.cs │ │ ├── Experimental │ │ │ └── GenericMethodCallTests.cs │ │ ├── Extensions │ │ │ ├── ComparableExtensionsTests.cs │ │ │ ├── DateTimeRangeTests.cs │ │ │ ├── DayOfWeekExtensionsTests.cs │ │ │ ├── ObjectExtensionTest.cs │ │ │ └── StringExtensionsTests.cs │ │ ├── Json │ │ │ ├── EntityDtoSerializationTests.cs │ │ │ ├── JsonExtensionsTests.cs │ │ │ └── JsonSerializationHelperTests.cs │ │ ├── Localization │ │ │ ├── DictionaryBasedLocalizationSourceTests.cs │ │ │ ├── HumanizerOfUndefinedLocalizationSourceTests.cs │ │ │ ├── Json │ │ │ │ ├── JsonAndXmlSourceMixingTests.cs │ │ │ │ ├── JsonEmbeddedFileLocalizationDictionaryProviderTests.cs │ │ │ │ ├── JsonSources │ │ │ │ │ ├── Lang-zh-CN.json │ │ │ │ │ └── Lang.json │ │ │ │ └── XmlSources │ │ │ │ │ ├── Lang-zh-CN.xml │ │ │ │ │ └── Lang.xml │ │ │ ├── LocalizationDictionaryWithAddMethod.cs │ │ │ ├── ResourceFileLocalizationSourceTests.cs │ │ │ ├── TestResourceFiles │ │ │ │ ├── MyTestResource.Designer.cs │ │ │ │ ├── MyTestResource.resx │ │ │ │ └── MyTestResource.tr.resx │ │ │ ├── TestXmlFiles │ │ │ │ ├── Test-tr.xml │ │ │ │ └── Test.xml │ │ │ ├── XmlEmbeddedFileLocalizationDictionaryProviderTests.cs │ │ │ └── XmlLocalizationDictionaryBuilderTests.cs │ │ ├── Modules │ │ │ ├── PlugInModuleLoadingTests.cs │ │ │ ├── StartupModuleToBeLastTests.cs │ │ │ └── StudioXAssemblyFinderTests.cs │ │ ├── Net │ │ │ └── Mail │ │ │ │ └── SmtpEmailSenderTests.cs │ │ ├── Notifications │ │ │ ├── NotificationDataSerializationTests.cs │ │ │ └── NotificationPublisherTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── Reflection │ │ │ ├── Extensions │ │ │ │ └── MemberInfoExtensionsTests.cs │ │ │ ├── ReflectionHelperTests.cs │ │ │ └── TypeHelperTests.cs │ │ ├── Resources │ │ │ └── Embedded │ │ │ │ ├── EmbeddedResourceTests.cs │ │ │ │ └── MyResources │ │ │ │ └── js │ │ │ │ └── MyScriptFile1.js │ │ ├── Runtime │ │ │ ├── Caching │ │ │ │ └── Memory │ │ │ │ │ └── MemoryCacheManagerTests.cs │ │ │ ├── Remoting │ │ │ │ └── DataContextAmbientScopeProviderTests.cs │ │ │ └── Security │ │ │ │ └── SimpleStringCipherTests.cs │ │ ├── Specifications │ │ │ └── SpecificationTests.cs │ │ ├── Startup │ │ │ └── StudioXBootstraperTester.cs │ │ ├── StudioX.Tests.csproj │ │ ├── TestBaseWithLocalIocManager.cs │ │ ├── Text │ │ │ └── Formatting │ │ │ │ ├── FormattedStringTokenizerTest.cs │ │ │ │ └── FormattedStringValueExtracterTests.cs │ │ ├── Threading │ │ │ ├── AsyncHelperTests.cs │ │ │ ├── InternalAsyncHelperTests.cs │ │ │ └── LockExtensionsTests.cs │ │ └── Timing │ │ │ └── TimezoneHelperTests.cs │ ├── StudioX.Web.Api.Tests │ │ ├── AppServices │ │ │ ├── IMyFirstAppService.cs │ │ │ ├── MyFirstAppService.cs │ │ │ └── MyIgnoreApiAttribute.cs │ │ ├── Controllers │ │ │ └── Dynamic │ │ │ │ └── StudioXApiDateTimeConverterTests.cs │ │ ├── DynamicApiController │ │ │ ├── BatchBuilding │ │ │ │ └── BatchDynamicApiControllerBuilderTest.cs │ │ │ ├── DynamicApiControllerActionHelperTests.cs │ │ │ └── ServiceNameValidationTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Web.Api.Tests.csproj │ │ └── StudioXWebApiTestModule.cs │ ├── StudioX.Web.Common.Tests │ │ ├── Configuration │ │ │ └── StudioXUserConfigurationBuilderTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ ├── StudioX.Web.Common.Tests.csproj │ │ ├── StudioXWebCommonTestModule.cs │ │ └── Web │ │ │ └── DefaultErrorInfoConverterTests.cs │ ├── StudioX.Web.Mvc.Tests │ │ ├── ModelBinders │ │ │ └── Binders │ │ │ │ └── StudioXMvcDateTimeBinderTests.cs │ │ ├── Properties │ │ │ └── AssemblyInfo.cs │ │ └── StudioX.Web.Mvc.Tests.csproj │ └── StudioX.Web.Tests │ │ ├── ErrorInfoBuilderTests.cs │ │ ├── Localization │ │ └── StudioXWebLocalizationTests.cs │ │ ├── MultiTenancy │ │ └── MultiTenancyScriptManagerTests.cs │ │ ├── Navigation │ │ └── NavigationScriptTests.cs │ │ ├── Properties │ │ └── AssemblyInfo.cs │ │ └── StudioX.Web.Tests.csproj └── tools │ ├── gitlink │ └── GitLink.exe │ └── nuget │ └── nuget.exe └── module-zero ├── .gitignore ├── StudioX.Zero.sln ├── appveyor.yml ├── common.props ├── src ├── StudioX.Zero.AspNetCore │ ├── AspNetCoreUserTokenProviderAccessor.cs │ ├── DataProtectorUserTokenProvider.cs │ ├── ExternalLoginUserInfo.cs │ ├── IStudioXZeroAspNetCoreConfiguration.cs │ ├── Internal │ │ └── StreamExtensions.cs │ ├── ModuleZeroAspNetCoreConfigurationExtensions.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── SignInStatus.cs │ ├── StudioX.Zero.AspNetCore.csproj │ ├── StudioXSignInManager.cs │ ├── StudioXZeroAspNetCoreConfiguration.cs │ ├── StudioXZeroAspNetCoreModule.cs │ └── StudioXZeroClaimsIdentityHelper.cs ├── StudioX.Zero.Common │ ├── Application │ │ ├── Editions │ │ │ ├── Edition.cs │ │ │ ├── EditionfeatureCacheItem.cs │ │ │ └── StudioXEditionManager.cs │ │ └── Features │ │ │ ├── EditionFeatureSetting.cs │ │ │ ├── FeatureSetting.cs │ │ │ ├── IStudioXZeroFeatureValueStore.cs │ │ │ └── StudioXFeatureValueStore.cs │ ├── Auditing │ │ ├── AuditLog.cs │ │ └── AuditingStore.cs │ ├── Authorization │ │ ├── PermissionGrantInfo.cs │ │ ├── PermissionSetting.cs │ │ ├── Roles │ │ │ ├── IRolePermissionStore.cs │ │ │ ├── PermissionEqualityComparer.cs │ │ │ ├── RoleClaim.cs │ │ │ ├── RolePermissionCacheItem.cs │ │ │ ├── RolePermissionSetting.cs │ │ │ ├── StudioXRoleBase.cs │ │ │ └── StudioXRolePermissionCacheItemInvalidator.cs │ │ ├── StudioXLoginResultType.cs │ │ └── Users │ │ │ ├── DefaultExternalAuthenticationSource.cs │ │ │ ├── IExternalAuthenticationSource.cs │ │ │ ├── IUserPermissionStore.cs │ │ │ ├── StudioXUserBase.cs │ │ │ ├── StudioXUserPermissionCacheItemInvalidator.cs │ │ │ ├── UserAccount.cs │ │ │ ├── UserAccountSynchronizer.cs │ │ │ ├── UserClaim.cs │ │ │ ├── UserLogin.cs │ │ │ ├── UserLoginAttempt.cs │ │ │ ├── UserOrganizationUnit.cs │ │ │ ├── UserOrganizationUnitRemover.cs │ │ │ ├── UserPermissionCacheItem.cs │ │ │ ├── UserPermissionSetting.cs │ │ │ ├── UserRole.cs │ │ │ └── UserRoleRemover.cs │ ├── BackgroundJobs │ │ └── BackgroundJobStore.cs │ ├── Configuration │ │ ├── Setting.cs │ │ ├── SettingExtensions.cs │ │ └── SettingStore.cs │ ├── Localization │ │ ├── ApplicationLanguage.cs │ │ ├── ApplicationLanguageManager.cs │ │ ├── ApplicationLanguageProvider.cs │ │ ├── ApplicationLanguageText.cs │ │ ├── ApplicationLanguageTextManager.cs │ │ ├── EmptyDictionary.cs │ │ ├── IApplicationLanguageManager.cs │ │ ├── IApplicationLanguageTextManager.cs │ │ ├── IMultiTenantLocalizationDictionary.cs │ │ ├── IMultiTenantLocalizationSource.cs │ │ ├── MultiTenantLocalizationDictionary.cs │ │ ├── MultiTenantLocalizationDictionaryCacheCleaner.cs │ │ ├── MultiTenantLocalizationDictionaryCacheHelper.cs │ │ ├── MultiTenantLocalizationDictionaryProvider.cs │ │ └── MultiTenantLocalizationSource.cs │ ├── MultiTenancy │ │ ├── DbPerTenantConnectionStringResolveArgs.cs │ │ ├── IDbPerTenantConnectionStringResolver.cs │ │ ├── IStudioXZeroDbMigrator.cs │ │ ├── ITenantCache.cs │ │ ├── StudioXTenant.cs │ │ ├── StudioXTenantBase.cs │ │ ├── StudioXTenantManager.cs │ │ ├── StudioXTenantManagerExtensions.cs │ │ ├── TenantCache.cs │ │ ├── TenantCacheItem.cs │ │ ├── TenantCacheManagerExtensions.cs │ │ ├── TenantFeatureCacheItem.cs │ │ ├── TenantFeatureCacheItemInvalidator.cs │ │ ├── TenantFeatureSetting.cs │ │ └── TenantStore.cs │ ├── Notifications │ │ └── NotificationStore.cs │ ├── Organizations │ │ ├── IMayHaveOrganizationUnit.cs │ │ ├── IMustHaveOrganizationUnit.cs │ │ ├── IOrganizationUnitSettings.cs │ │ ├── OrganizationUnit.cs │ │ ├── OrganizationUnitManager.cs │ │ ├── OrganizationUnitManagerExtensions.cs │ │ └── OrganizationUnitSettings.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Runtime │ │ ├── Caching │ │ │ └── StudioXZeroCacheManagerExtensions.cs │ │ └── Session │ │ │ └── StudioXSessionExtensions.cs │ ├── StudioX.Zero.Common.csproj │ └── Zero │ │ ├── Configuration │ │ ├── ILanguageManagementConfig.cs │ │ ├── IRoleManagementConfig.cs │ │ ├── IStudioXZeroConfig.cs │ │ ├── IStudioXZeroEntityTypes.cs │ │ ├── IUserManagementConfig.cs │ │ ├── LanguageManagementConfig.cs │ │ ├── ModuleZeroConfigurationExtensions.cs │ │ ├── RoleManagementConfig.cs │ │ ├── StaticRoleDefinition.cs │ │ ├── StudioXZeroConfig.cs │ │ ├── StudioXZeroEntityTypes.cs │ │ ├── StudioXZeroSettingNames.cs │ │ ├── StudioXZeroSettingProvider.cs │ │ └── UserManagementConfig.cs │ │ ├── Localization │ │ └── Source │ │ │ ├── StudioXZero-de.xml │ │ │ ├── StudioXZero-fa.xml │ │ │ ├── StudioXZero-fr.xml │ │ │ ├── StudioXZero-it.xml │ │ │ ├── StudioXZero-lt.xml │ │ │ ├── StudioXZero-lv.xml │ │ │ ├── StudioXZero-pt-BR.xml │ │ │ ├── StudioXZero-ru.xml │ │ │ ├── StudioXZero-tr.xml │ │ │ ├── StudioXZero-zh-CN.xml │ │ │ └── StudioXZero.xml │ │ ├── StudioXZeroCommonModule.cs │ │ └── StudioXZeroConsts.cs ├── StudioX.Zero.EntityFramework │ ├── Data │ │ └── ConnectionStringHelper.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── StudioX.Zero.EntityFramework.csproj │ └── Zero │ │ └── EntityFramework │ │ ├── DbPerTenantConnectionStringResolver.cs │ │ ├── IMultiTenantSeed.cs │ │ ├── StudioXZeroCommonDbContext.cs │ │ ├── StudioXZeroDbContext.cs │ │ ├── StudioXZeroDbMigrator.cs │ │ ├── StudioXZeroDbModelBuilderExtensions.cs │ │ ├── StudioXZeroEntityFrameworkModule.cs │ │ ├── StudioXZeroHostDbContext.cs │ │ └── StudioXZeroTenantDbContext.cs ├── StudioX.Zero.EntityFrameworkCore │ ├── Data │ │ └── ConnectionStringHelper.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── StudioX.Zero.EntityFrameworkCore.csproj │ └── Zero │ │ └── EntityFrameworkCore │ │ ├── DbPerTenantConnectionStringResolver.cs │ │ ├── IMultiTenantSeed.cs │ │ ├── StudioXZeroCommonDbContext.cs │ │ ├── StudioXZeroDbContext.cs │ │ ├── StudioXZeroDbMigrator.cs │ │ ├── StudioXZeroDbModelBuilderExtensions.cs │ │ ├── StudioXZeroEntityFrameworkCoreModule.cs │ │ ├── StudioXZeroHostDbContext.cs │ │ └── StudioXZeroTenantDbContext.cs ├── StudioX.Zero.Ldap │ ├── Ldap │ │ ├── Authentication │ │ │ └── LdapAuthenticationSource.cs │ │ ├── Configuration │ │ │ ├── ILdapSettings.cs │ │ │ ├── IStudioXZeroLdapModuleConfig.cs │ │ │ ├── LdapSettingNames.cs │ │ │ ├── LdapSettingProvider.cs │ │ │ ├── LdapSettings.cs │ │ │ ├── ModuleZeroLdapConfigurationExtensions.cs │ │ │ └── StudioXZeroLdapModuleConfig.cs │ │ ├── Localization │ │ │ └── Source │ │ │ │ ├── StudioXZero-fa.xml │ │ │ │ ├── StudioXZero-lt.xml │ │ │ │ ├── StudioXZero-lv.xml │ │ │ │ ├── StudioXZero-tr.xml │ │ │ │ ├── StudioXZero-zh-CN.xml │ │ │ │ └── StudioXZero.xml │ │ └── StudioXZeroLdapModule.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── StudioX.Zero.Ldap.csproj ├── StudioX.Zero.Owin │ ├── Authorization │ │ └── StudioXSignInManager.cs │ ├── Owin │ │ ├── OwinUserTokenProviderAccessor.cs │ │ └── StudioXZeroOwinAppBuilderExtensions.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── StudioX.Zero.Owin.csproj │ └── StudioXZeroOwinModule.cs ├── StudioX.Zero │ ├── Authorization │ │ ├── PermissionChecker.cs │ │ ├── Roles │ │ │ ├── StudioXRole.cs │ │ │ ├── StudioXRoleManager.cs │ │ │ └── StudioXRoleStore.cs │ │ ├── StudioXLoginManager.cs │ │ ├── StudioXLoginManagerExtensions.cs │ │ └── Users │ │ │ ├── IUserTokenProviderAccessor.cs │ │ │ ├── NullUserTokenProviderAccessor.cs │ │ │ ├── StudioXLoginResult.cs │ │ │ ├── StudioXUser.cs │ │ │ ├── StudioXUserManager.cs │ │ │ ├── StudioXUserManagerExtensions.cs │ │ │ └── StudioXUserStore.cs │ ├── IdentityFramework │ │ ├── IdentityEmailService.cs │ │ ├── IdentityResultExtensions.cs │ │ └── StudioXIdentityResult.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── StudioX.Zero.csproj │ └── Zero │ │ ├── Localization │ │ └── SourceExt │ │ │ ├── StudioXZero-de.xml │ │ │ ├── StudioXZero-fa.xml │ │ │ ├── StudioXZero-fr.xml │ │ │ ├── StudioXZero-it.xml │ │ │ ├── StudioXZero-lt.xml │ │ │ ├── StudioXZero-lv.xml │ │ │ ├── StudioXZero-pt-BR.xml │ │ │ ├── StudioXZero-ru.xml │ │ │ ├── StudioXZero-tr.xml │ │ │ ├── StudioXZero-zh-CN.xml │ │ │ └── StudioXZero.xml │ │ └── StudioXZeroCoreModule.cs ├── StudioX.ZeroCore.EntityFrameworkCore │ ├── Data │ │ └── ConnectionStringHelper.cs │ ├── StudioX.ZeroCore.EntityFrameworkCore.csproj │ └── Zero │ │ └── EntityFrameworkCore │ │ ├── DbPerTenantConnectionStringResolver.cs │ │ ├── IMultiTenantSeed.cs │ │ ├── StudioXZeroCommonDbContext.cs │ │ ├── StudioXZeroCoreEntityFrameworkCoreModule.cs │ │ ├── StudioXZeroDbContext.cs │ │ ├── StudioXZeroDbMigrator.cs │ │ ├── StudioXZeroDbModelBuilderExtensions.cs │ │ ├── StudioXZeroHostDbContext.cs │ │ └── StudioXZeroTenantDbContext.cs ├── StudioX.ZeroCore.IdentityServer4.EntityFrameworkCore │ ├── IdentityServer4 │ │ ├── IStudioXPersistedGrantDbContext.cs │ │ ├── StudioXZeroCoreIdentityServerEntityFrameworkCoreConfigurationExtensions.cs │ │ ├── StudioXZeroCoreIdentityServerEntityFrameworkCoreModule.cs │ │ └── StudioXZeroIdentityServerBuilderEntityFrameworkCoreExtensions.cs │ └── StudioX.ZeroCore.IdentityServer4.EntityFrameworkCore.csproj ├── StudioX.ZeroCore.IdentityServer4 │ ├── IdentityServer4 │ │ ├── PersistedGrantEntity.cs │ │ ├── StudioXClaimsService.cs │ │ ├── StudioXIdentityServerOptions.cs │ │ ├── StudioXIdentityServerUserClaimsFactory.cs │ │ ├── StudioXPersistentGrantStore.cs │ │ ├── StudioXProfileService.cs │ │ ├── StudioXResourceOwnerPasswordValidator.cs │ │ ├── StudioXZeroCoreIdentityServerModule.cs │ │ └── StudioXZeroIdentityServerBuilderExtensions.cs │ └── StudioX.ZeroCore.IdentityServer4.csproj └── StudioX.ZeroCore │ ├── Authorization │ ├── PermissionChecker.cs │ ├── Roles │ │ ├── StudioXRole.cs │ │ ├── StudioXRoleManager.cs │ │ └── StudioXRoleStore.cs │ ├── StudioXLoginManager.cs │ ├── StudioXLoginManagerExtensions.cs │ ├── StudioXSecurityStampValidator.cs │ ├── StudioXSignInManager.cs │ ├── StudioXUserClaimsPrincipalFactory.cs │ ├── StudioXZeroClaimsIdentityHelper.cs │ └── Users │ │ ├── StudioXLoginResult.cs │ │ ├── StudioXUser.cs │ │ ├── StudioXUserManager.cs │ │ ├── StudioXUserManagerExtensions.cs │ │ ├── StudioXUserStore.cs │ │ └── UserToken.cs │ ├── IdentityFramework │ ├── IdentityResultExtensions.cs │ ├── StudioXIdentityBuilder.cs │ ├── StudioXZeroIdentityBuilderExtensions.cs │ └── StudioXZeroServiceCollectionExtensions.cs │ ├── StudioX.ZeroCore.csproj │ └── Zero │ ├── CollectionExtensions.cs │ ├── Localization │ └── SourceExt │ │ ├── StudioXZero-de.xml │ │ ├── StudioXZero-fa.xml │ │ ├── StudioXZero-fr.xml │ │ ├── StudioXZero-it.xml │ │ ├── StudioXZero-lt.xml │ │ ├── StudioXZero-lv.xml │ │ ├── StudioXZero-pt-BR.xml │ │ ├── StudioXZero-ru.xml │ │ ├── StudioXZero-tr.xml │ │ ├── StudioXZero-zh-CN.xml │ │ └── StudioXZero.xml │ └── StudioXZeroCoreModule.cs ├── test ├── StudioX.Zero.ConsoleApp.EntityFrameworkCore │ ├── Program.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── StudioX.Zero.ConsoleApp.EntityFrameworkCore.csproj │ └── log4net.config ├── StudioX.Zero.SampleApp.EntityFramework │ ├── EntityFramework │ │ ├── AppDbContext.cs │ │ ├── AppEfRepositoryBase.cs │ │ └── SampleAppEntityFrameworkModule.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ └── StudioX.Zero.SampleApp.EntityFramework.csproj ├── StudioX.Zero.SampleApp.EntityFrameworkCore.Tests │ ├── EfCore_Tests.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── SampleAppTestModule.cs │ ├── SimpleTaskAppTestBase.cs │ └── StudioX.Zero.SampleApp.EntityFrameworkCore.Tests.csproj ├── StudioX.Zero.SampleApp.EntityFrameworkCore │ ├── AppDbContext.cs │ ├── AppEfRepositoryBase.cs │ ├── Migrations │ │ ├── 20170611164854_InitialCreate.Designer.cs │ │ ├── 20170611164854_InitialCreate.cs │ │ └── AppDbContextModelSnapshot.cs │ ├── Program.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── SampleAppEntityFrameworkCoreModule.cs │ ├── StudioX.Zero.SampleApp.EntityFrameworkCore.csproj │ ├── StudioXProjectNameDbContextFactory.cs │ └── TestDataBuilders │ │ ├── HostDatas │ │ ├── HostDataBuilder.cs │ │ ├── HostTenantsBuilder.cs │ │ └── HostUserBuilder.cs │ │ └── TenantDatas │ │ ├── TenantDataBuilder.cs │ │ └── TenantUserBuilder.cs ├── StudioX.Zero.SampleApp.Tests │ ├── Application │ │ └── Editions │ │ │ └── EditionAndFeatureTests.cs │ ├── Configuration │ │ └── SettingsTests.cs │ ├── IdentityFramework │ │ └── IdentityResultHelper_Tests.cs │ ├── Ldap │ │ └── LdapAuthenticationSourceTests.cs │ ├── Localization │ │ ├── ApplicationLanguageManagerTests.cs │ │ ├── ApplicationLanguageProvider_Tests.cs │ │ └── SimpleLocalizationTests.cs │ ├── MultiTenancy │ │ ├── TenantCacheTests.cs │ │ ├── TenantFeatureTests.cs │ │ ├── TenantManagerTests.cs │ │ └── TenantStoreTests.cs │ ├── Organizations │ │ ├── OrganizationUnitManagerTests.cs │ │ └── OrganizationUnitTests.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Roles │ │ ├── RoleManagerDeleteTests.cs │ │ └── RoleManagerTests.cs │ ├── SampleAppTestBase.cs │ ├── SampleAppTestModule.cs │ ├── StudioX.Zero.SampleApp.Tests.csproj │ ├── TestDatas │ │ ├── InitialTenantsBuilder.cs │ │ ├── InitialTestDataBuilder.cs │ │ ├── InitialTestLanguagesBuilder.cs │ │ ├── InitialTestOrganizationUnitsBuilder.cs │ │ ├── InitialUserOrganizationUnitsBuilder.cs │ │ └── InitialUsersBuilder.cs │ └── Users │ │ ├── UserAccountSynchronizerTests.cs │ │ ├── UserAppServiceTests.cs │ │ ├── UserLoginExternalAuthenticationSourcesTest.cs │ │ ├── UserLoginHelper.cs │ │ ├── UserLoginTests.cs │ │ ├── UserManagerLockoutTests.cs │ │ ├── UserManagerPermissionTests.cs │ │ ├── UserManagerSecurityStampTests.cs │ │ ├── UserManagerUpdateTests.cs │ │ ├── UserOrganizationUnitTests.cs │ │ ├── UserRepositoryTests.cs │ │ └── UserRoleTests.cs ├── StudioX.Zero.SampleApp │ ├── Authorization │ │ ├── AppAuthorizationProvider.cs │ │ ├── AppLoginManager.cs │ │ └── AppPermissionChecker.cs │ ├── Configuration │ │ └── AppSettingProvider.cs │ ├── Editions │ │ └── EditionManager.cs │ ├── Features │ │ ├── AppFeatureProvider.cs │ │ └── FeatureValueStore.cs │ ├── MultiTenancy │ │ ├── Tenant.cs │ │ └── TenantManager.cs │ ├── Properties │ │ └── AssemblyInfo.cs │ ├── Roles │ │ ├── Role.cs │ │ ├── RoleManager.cs │ │ └── RoleStore.cs │ ├── SampleAppModule.cs │ ├── StudioX.Zero.SampleApp.csproj │ └── Users │ │ ├── Dto │ │ ├── CreateUserInput.cs │ │ ├── ResetPasswordInput.cs │ │ └── UpdateUserInput.cs │ │ ├── IUserAppService.cs │ │ ├── User.cs │ │ ├── UserAppService.cs │ │ ├── UserManager.cs │ │ └── UserStore.cs ├── StudioX.ZeroCore.IdentityServer4.Tests │ ├── IdentityServer4 │ │ ├── DependencyInjectionTests.cs │ │ ├── IdentityServerConfig.cs │ │ ├── StudioXZeroIdentityServerTestBase.cs │ │ └── StudioXZeroIdentityServerTestModule.cs │ └── StudioX.ZeroCore.IdentityServer4.Tests.csproj ├── StudioX.ZeroCore.SampleApp │ ├── Application │ │ ├── AppAuthorizationProvider.cs │ │ ├── AppConsts.cs │ │ ├── AppFeatureProvider.cs │ │ ├── AppFeatures.cs │ │ ├── AppLocalizationHelper.cs │ │ ├── AppStaticRoleNames.cs │ │ └── Users │ │ │ ├── IUserAppService.cs │ │ │ ├── UserAppService.cs │ │ │ └── UserDto.cs │ ├── Core │ │ ├── Role.cs │ │ ├── ServicesCollectionDependencyRegistrar.cs │ │ ├── Tenant.cs │ │ ├── User.cs │ │ └── _Service_Overrides.cs │ ├── EntityFramework │ │ ├── SampleAppDbContext.cs │ │ ├── Seed │ │ │ ├── Host │ │ │ │ ├── DefaultEditionCreator.cs │ │ │ │ ├── DefaultLanguagesCreator.cs │ │ │ │ ├── DefaultSettingsCreator.cs │ │ │ │ ├── HostRoleAndUserCreator.cs │ │ │ │ └── InitialHostDbBuilder.cs │ │ │ ├── SeedHelper.cs │ │ │ └── Tenants │ │ │ │ ├── DefaultTenantBuilder.cs │ │ │ │ └── TenantRoleAndUserBuilder.cs │ │ └── StudioXZeroTemplateDbContextConfigurer.cs │ ├── StudioX.ZeroCore.SampleApp.csproj │ └── StudioXZeroCoreSampleAppModule.cs └── StudioX.ZeroCore.Tests │ ├── StudioX.ZeroCore.Tests.csproj │ └── Zero │ ├── DependencyInjectionTests.cs │ ├── Roles │ └── RoleStoreTests.cs │ ├── StudioXZeroTestBase.cs │ ├── StudioXZeroTestModule.cs │ ├── TestData │ ├── TestDataBuilder.cs │ ├── TestOrganizationUnitsBuilder.cs │ └── TestRolesBuilder.cs │ ├── TestServiceCollectionRegistrar.cs │ └── Users │ └── UserAppService_Tests.cs └── tools ├── gitlink └── GitLink.exe └── nuget └── nuget.exe /.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # IDEs and editors 4 | .vs/ 5 | obj/ 6 | bin/ 7 | aspnet-core/src/StudioX.Boilerplate.Web.Host/App_Data/Logs/ 8 | aspnet-core/src/StudioX.Boilerplate.Web.Mvc/App_Data/Logs/ 9 | aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/lib/ 10 | 11 | # Database files 12 | *.mdf 13 | *.ldf -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | -------------------------------------------------------------------------------- /_screenshots/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/_screenshots/home.png -------------------------------------------------------------------------------- /_screenshots/login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/_screenshots/login.png -------------------------------------------------------------------------------- /_screenshots/swagger.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/_screenshots/swagger.png -------------------------------------------------------------------------------- /_screenshots/user-create-modal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/_screenshots/user-create-modal.png -------------------------------------------------------------------------------- /angular/.editorconfig: -------------------------------------------------------------------------------- 1 | # Editor configuration, see http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | indent_style = space 7 | insert_final_newline = true 8 | trim_trailing_whitespace = true 9 | 10 | [*.md] 11 | max_line_length = off 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /angular/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "./node_modules/typescript/lib" 3 | } -------------------------------------------------------------------------------- /angular/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx 2 | 3 | COPY . /usr/share/nginx/html -------------------------------------------------------------------------------- /angular/debug.log: -------------------------------------------------------------------------------- 1 | [0609/100417:ERROR:tcp_listen_socket.cc(76)] Could not bind socket to 127.0.0.1:6004 2 | [0609/100417:ERROR:node_debugger.cc(86)] Cannot start debugger server 3 | -------------------------------------------------------------------------------- /angular/e2e/app.e2e-spec.ts: -------------------------------------------------------------------------------- 1 | import { StudioXBoilerplateTemplatePage } from './app.po'; 2 | 3 | describe('StudioX Boilerplate App', function() { 4 | let page: StudioXBoilerplateTemplatePage; 5 | 6 | beforeEach(() => { 7 | page = new StudioXBoilerplateTemplatePage(); 8 | }); 9 | 10 | it('should display message saying app works', () => { 11 | page.navigateTo(); 12 | expect(page.getParagraphText()).toEqual('app works!'); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /angular/e2e/app.po.ts: -------------------------------------------------------------------------------- 1 | import { browser, element, by } from 'protractor'; 2 | 3 | export class StudioXBoilerplateTemplatePage { 4 | navigateTo() { 5 | return browser.get('/'); 6 | } 7 | 8 | getParagraphText() { 9 | return element(by.css('app-root h1')).getText(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /angular/e2e/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compileOnSave": false, 3 | "compilerOptions": { 4 | "declaration": false, 5 | "emitDecoratorMetadata": true, 6 | "experimentalDecorators": true, 7 | "lib": [ 8 | "es2016" 9 | ], 10 | "module": "commonjs", 11 | "moduleResolution": "node", 12 | "outDir": "../dist/out-tsc-e2e", 13 | "sourceMap": true, 14 | "target": "es6", 15 | "typeRoots": [ 16 | "../node_modules/@types" 17 | ] 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /angular/nswag/refresh.bat: -------------------------------------------------------------------------------- 1 | "..\node_modules\.bin\nswag" run -------------------------------------------------------------------------------- /angular/nswag/service.extensions.ts: -------------------------------------------------------------------------------- 1 | import * as moment from 'moment'; -------------------------------------------------------------------------------- /angular/src/account/account.component.less: -------------------------------------------------------------------------------- 1 | .content.account-forms { 2 | margin-top: 10px; 3 | } 4 | 5 | .content.tenant-change-box { 6 | padding: 16px 16px 0px 16px; 7 | margin: 120px auto 0px auto; 8 | max-width: 400px; 9 | 10 | a { 11 | cursor: pointer; 12 | } 13 | } 14 | 15 | div#LoginArea { 16 | margin-top: 0px !important; 17 | max-width: 400px; 18 | margin: 120px auto 10px auto; 19 | } -------------------------------------------------------------------------------- /angular/src/account/layout/account-languages.component.html: -------------------------------------------------------------------------------- 1 |  6 | -------------------------------------------------------------------------------- /angular/src/account/layout/account-languages.component.less: -------------------------------------------------------------------------------- 1 | .account-language-switch-list { 2 | list-style: none; 3 | margin: 0px; 4 | padding: 10px; 5 | 6 | > li { 7 | display: inline; 8 | margin: 0px; 9 | padding: 0px; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /angular/src/account/login/login.component.less: -------------------------------------------------------------------------------- 1 | .social-icons { 2 | padding-left: 0px; 3 | 4 | li { 5 | display: inline-block; 6 | margin-right: 5px; 7 | 8 | a { 9 | width: 40px; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /angular/src/app/layout/sidebar-footer.component.html: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /angular/src/app/layout/topbar.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Injector, ViewEncapsulation } from '@angular/core'; 2 | import { AppComponentBase } from '@shared/app-component-base'; 3 | 4 | @Component({ 5 | templateUrl: './topbar.component.html', 6 | selector: 'top-bar', 7 | encapsulation: ViewEncapsulation.None 8 | }) 9 | export class TopBarComponent extends AppComponentBase { 10 | 11 | constructor( 12 | injector: Injector 13 | ) { 14 | super(injector); 15 | } 16 | } -------------------------------------------------------------------------------- /angular/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/.gitkeep -------------------------------------------------------------------------------- /angular/src/assets/app-logo-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/app-logo-small.png -------------------------------------------------------------------------------- /angular/src/assets/appconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "remoteServiceBaseUrl": "http://localhost:21021", 3 | "appBaseUrl": "http://localhost:4200" 4 | } -------------------------------------------------------------------------------- /angular/src/assets/fonts/material-icons/materialicons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/material-icons/materialicons.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/CWB0XYA8bzo0kSThX0UTuA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/CWB0XYA8bzo0kSThX0UTuA.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /angular/src/assets/fonts/roboto/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/fonts/roboto/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /angular/src/assets/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/assets/images/user.png -------------------------------------------------------------------------------- /angular/src/bsb-theme/images/user-img-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/bsb-theme/images/user-img-background.jpg -------------------------------------------------------------------------------- /angular/src/environments/environment.hmr.ts: -------------------------------------------------------------------------------- 1 | // "Hot Module Replacement" enabled environment 2 | 3 | export const environment = { 4 | production: false, 5 | hmr: true 6 | }; -------------------------------------------------------------------------------- /angular/src/environments/environment.prod.ts: -------------------------------------------------------------------------------- 1 | // "Production" enabled environment 2 | 3 | export const environment = { 4 | production: true, 5 | hmr: false 6 | }; -------------------------------------------------------------------------------- /angular/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `angular-cli.json`. 5 | 6 | export const environment = { 7 | production: false, 8 | hmr: false 9 | }; -------------------------------------------------------------------------------- /angular/src/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/angular/src/favicon.ico -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/build.bat: -------------------------------------------------------------------------------- 1 | npm run build -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;AAAA,sCAAiC;AACjC,uDAAkD;AAClD,2DAAsD;AACtD,4DAAuD;AACvD,6DAAwD;AACxD,oDAA+C;AAC/C,iDAA4C;AAC5C,mDAA8C;AAC9C,2CAAsC;AACtC,mEAA8D;AAC9D,8CAAyC;AACzC,+CAA0C;AAC1C,mCAA8B;AAC9B,0DAAqD"} -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/auth/permission-checker.service.d.ts: -------------------------------------------------------------------------------- 1 | export declare class PermissionCheckerService { 2 | isGranted(permissionName: string): boolean; 3 | } 4 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/auth/permission-checker.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"permission-checker.service.js","sourceRoot":"","sources":["../../../src/auth/permission-checker.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,sCAA2C;AAG3C,IAAa,wBAAwB;IAArC;IAMA,CAAC;IAJG,4CAAS,GAAT,UAAU,cAAsB;QAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAC9C,CAAC;IAEL,+BAAC;AAAD,CAAC,AAND,IAMC;AANY,wBAAwB;IADpC,iBAAU,EAAE;;GACA,wBAAwB,CAMpC;AANY,4DAAwB"} -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/auth/token.service.d.ts: -------------------------------------------------------------------------------- 1 | export declare class TokenService { 2 | getToken(): string; 3 | getTokenCookieName(): string; 4 | clearToken(): void; 5 | setToken(authToken: string, expireDate?: Date): void; 6 | } 7 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/log/log.service.d.ts: -------------------------------------------------------------------------------- 1 | export declare class LogService { 2 | debug(logObject?: any): void; 3 | info(logObject?: any): void; 4 | warn(logObject?: any): void; 5 | error(logObject?: any): void; 6 | fatal(logObject?: any): void; 7 | } 8 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/message/message.service.d.ts: -------------------------------------------------------------------------------- 1 | export declare class MessageService { 2 | info(message: string, title?: string): any; 3 | success(message: string, title?: string): any; 4 | warn(message: string, title?: string): any; 5 | error(message: string, title?: string): any; 6 | confirm(message: string, callback?: (result: boolean) => void): any; 7 | confirm(message: string, title?: string, callback?: (result: boolean) => void): any; 8 | } 9 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/multi-tenancy/studiox-multi-tenancy.service.d.ts: -------------------------------------------------------------------------------- 1 | export declare class StudioXMultiTenancyService { 2 | readonly isEnabled: boolean; 3 | } 4 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/multi-tenancy/studiox-multi-tenancy.service.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"studiox-multi-tenancy.service.js","sourceRoot":"","sources":["../../../src/multi-tenancy/studiox-multi-tenancy.service.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,sCAA2C;AAG3C,IAAa,sBAAsB;IAAnC;IAMA,CAAC;IAJG,sBAAI,6CAAS;aAAb;YACI,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC;QACtC,CAAC;;;OAAA;IAEL,6BAAC;AAAD,CAAC,AAND,IAMC;AANY,sBAAsB;IADlC,iBAAU,EAAE;;GACA,sBAAsB,CAMlC;AANY,wDAAsB"} -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/notify/notify.service.d.ts: -------------------------------------------------------------------------------- 1 | export declare class NotifyService { 2 | info(message: string, title?: string, options?: any): void; 3 | success(message: string, title?: string, options?: any): void; 4 | warn(message: string, title?: string, options?: any): void; 5 | error(message: string, title?: string, options?: any): void; 6 | } 7 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/settings/setting.service.d.ts: -------------------------------------------------------------------------------- 1 | export declare class SettingService { 2 | get(name: string): string; 3 | getBoolean(name: string): boolean; 4 | getInt(name: string): number; 5 | } 6 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/studiox-user-configuration.service.d.ts: -------------------------------------------------------------------------------- 1 | import { Http } from '@angular/http'; 2 | export declare class StudioXUserConfigurationService { 3 | private _http; 4 | constructor(_http: Http); 5 | initialize(): void; 6 | } 7 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/dist/src/utils/utils.service.d.ts: -------------------------------------------------------------------------------- 1 | export declare class UtilsService { 2 | getCookieValue(key: string): string; 3 | setCookieValue(key: string, value: string, expireDate?: Date, path?: string): void; 4 | deleteCookie(key: string, path?: string): void; 5 | } 6 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/index.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @module 3 | * @description 4 | * Entry point for all public APIs of the Angular Module 5 | */ 6 | export * from './src/index'; -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/rollup.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | entry: 'dist/index.js', 3 | dest: 'dist/bundles/studiox-ng2-module.umd.js', 4 | sourceMap: false, 5 | format: 'umd', 6 | moduleName: 'ng.studioxModule', 7 | globals: { 8 | '@angular/core': 'ng.core' 9 | } 10 | } -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/src/auth/permission-checker.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable() 4 | export class PermissionCheckerService { 5 | 6 | isGranted(permissionName: string): boolean { 7 | return studiox.auth.isGranted(permissionName); 8 | } 9 | 10 | } -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/src/index.ts: -------------------------------------------------------------------------------- 1 | export { StudioXModule } from './studiox.module'; 2 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/src/multi-tenancy/studiox-multi-tenancy.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable() 4 | export class StudioXMultiTenancyService { 5 | 6 | get isEnabled(): boolean { 7 | return studiox.multiTenancy.isEnabled; 8 | } 9 | 10 | } -------------------------------------------------------------------------------- /angular/src/framework/studiox-ng2-module/src/settings/setting.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable() 4 | export class SettingService { 5 | 6 | get(name: string): string { 7 | return studiox.setting.get(name); 8 | } 9 | 10 | getBoolean(name: string): boolean { 11 | return studiox.setting.getBoolean(name); 12 | } 13 | 14 | getInt(name: string): number { 15 | return studiox.setting.getInt(name); 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /angular/src/framework/studiox-table/studiox-table-directives.ts: -------------------------------------------------------------------------------- 1 | import { NgTableComponent } from './table/studiox-table.component'; 2 | import { NgTableFilteringDirective } from './table/studiox-table-filtering.directive'; 3 | import { NgTablePagingDirective } from './table/studiox-table-paging.directive'; 4 | import { NgTableSortingDirective } from './table/studiox-table-sorting.directive'; 5 | export const NgTableDirectives = [NgTableComponent, NgTableFilteringDirective, NgTablePagingDirective, NgTableSortingDirective]; 6 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-table/studiox-table-module.d.ts: -------------------------------------------------------------------------------- 1 | export declare class StudioXTableModule { 2 | } 3 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-table/table/studiox-table-filtering.directive.d.ts: -------------------------------------------------------------------------------- 1 | import { EventEmitter, ElementRef, Renderer } from '@angular/core'; 2 | export declare class NgTableFilteringDirective { 3 | ngTableFiltering: any; 4 | tableChanged: EventEmitter; 5 | config: any; 6 | private element; 7 | private renderer; 8 | onChangeFilter(event: any): void; 9 | constructor(element: ElementRef, renderer: Renderer); 10 | } 11 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-table/table/studiox-table-paging.directive.d.ts: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from '@angular/core'; 2 | export declare class NgTablePagingDirective { 3 | ngTablePaging: boolean; 4 | tableChanged: EventEmitter; 5 | config: any; 6 | onChangePage(event: any): void; 7 | } 8 | -------------------------------------------------------------------------------- /angular/src/framework/studiox-table/table/studiox-table-sorting.directive.d.ts: -------------------------------------------------------------------------------- 1 | import { EventEmitter } from '@angular/core'; 2 | export declare class NgTableSortingDirective { 3 | ngTableSorting: any; 4 | column: any; 5 | sortChanged: EventEmitter; 6 | config: any; 7 | onToggleSort(event: any): void; 8 | } 9 | -------------------------------------------------------------------------------- /angular/src/framework/studiox/scripts/libs/requirejs/plugins/service.js: -------------------------------------------------------------------------------- 1 | define(function () { 2 | return { 3 | load: function (name, req, onload, config) { 4 | var url = studiox.appPath + 'api/StudioXServiceProxies/Get?name=' + name; 5 | req([url], function (value) { 6 | onload(value); 7 | }); 8 | } 9 | }; 10 | }); -------------------------------------------------------------------------------- /angular/src/framework/studiox/scripts/libs/studiox.jquery.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace studiox { 2 | 3 | //TODO: Gets JQuery.AjaxOptions and returns JQuery.Promise 4 | 5 | function ajax(userOptions: any): any; 6 | 7 | } -------------------------------------------------------------------------------- /angular/src/framework/studiox/scripts/libs/studiox.signalr.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace studiox { 2 | 3 | namespace signalr { 4 | 5 | let autoConnect: boolean; 6 | 7 | function connect(): any; 8 | 9 | namespace hubs { 10 | 11 | let common: any; 12 | 13 | } 14 | 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /angular/src/framework/studiox/scripts/libs/utils/ie10fix.js: -------------------------------------------------------------------------------- 1 | //Windows Phone 8 and Internet Explorer 10 FIX 2 | if (navigator.userAgent.match(/IEMobile\/10\.0/)) { 3 | var msViewportStyle = document.createElement("style"); 4 | msViewportStyle.appendChild( 5 | document.createTextNode( 6 | "@-ms-viewport{width:auto!important}" 7 | ) 8 | ); 9 | 10 | document.getElementsByTagName("head")[0].appendChild(msViewportStyle); 11 | } -------------------------------------------------------------------------------- /angular/src/framework/studiox/styles/studiox.css.map: -------------------------------------------------------------------------------- 1 | "{\"version\":3,\"sources\":[\"studiox.less\",\"studiox.mixings.less\"],\"names\":[],\"mappings\":\"AAIA;EACI,eAAA;;AAKJ;ECSI,OAAA;EACA,MAAA;EACA,QAAA;EA0CA,kBAAA;EACA,SAAA;;ADlDJ;ECWI,QAAA;EACA,MAAA;EACA,SAAA;EAoCA,kBAAA;EACA,SAAA;;AD9CJ;ECaI,OAAA;EACA,QAAA;EACA,SAAA;EA8BA,kBAAA;EACA,SAAA;;AD1CJ;ECeI,OAAA;EACA,MAAA;EACA,SAAA;EAwBA,kBAAA;EACA,SAAA;;ADhCJ;EACI,WAAA;EACA,YAAA;;AAEA,yBAAC;AACD,yBAAC;EACG,YAAA\",\"file\":\"studiox.css\"}" 2 | -------------------------------------------------------------------------------- /angular/src/framework/studiox/styles/studiox.min.css: -------------------------------------------------------------------------------- 1 | .studiox-clickable{cursor:pointer}.studiox-dock-top{left:0;top:0;right:0;position:absolute;margin:0}.studiox-dock-right{right:0;top:0;bottom:0;position:absolute;margin:0}.studiox-dock-bottom{left:0;right:0;bottom:0;position:absolute;margin:0}.studiox-dock-left{left:0;top:0;bottom:0;position:absolute;margin:0}.studiox-busy-indicator-small{width:36px;height:36px}.studiox-busy-indicator-small.studiox-dock-left,.studiox-busy-indicator-small.studiox-dock-right{height:auto} 2 | -------------------------------------------------------------------------------- /angular/src/framework/studiox/styles/studiox.mixings.css: -------------------------------------------------------------------------------- 1 | /*# sourceMappingURL=studiox.mixings.css.map */ 2 | -------------------------------------------------------------------------------- /angular/src/framework/studiox/styles/studiox.mixings.css.map: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /angular/src/framework/studiox/styles/studiox.mixings.min.css: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /angular/src/framework/studiox/styles/utils/ie10fix.css: -------------------------------------------------------------------------------- 1 | @-webkit-viewport { 2 | width: device-width; 3 | } 4 | 5 | @-moz-viewport { 6 | width: device-width; 7 | } 8 | 9 | @-ms-viewport { 10 | width: device-width; 11 | } 12 | 13 | @-o-viewport { 14 | width: device-width; 15 | } 16 | 17 | @viewport 18 | 19 | { 20 | width: device-width; 21 | } -------------------------------------------------------------------------------- /angular/src/root.component.ts: -------------------------------------------------------------------------------- 1 | import { Component } from '@angular/core'; 2 | 3 | @Component({ 4 | selector: 'app-root', 5 | template: `` 6 | }) 7 | export class RootComponent { 8 | 9 | } -------------------------------------------------------------------------------- /angular/src/shared/AppConsts.ts: -------------------------------------------------------------------------------- 1 | export class AppConsts { 2 | 3 | static remoteServiceBaseUrl: string; 4 | static appBaseUrl: string; 5 | 6 | static readonly userManagement = { 7 | defaultAdminUserName: 'admin' 8 | }; 9 | 10 | static readonly localization = { 11 | defaultLocalizationSourceName: 'Boilerplate' 12 | }; 13 | 14 | static readonly authorization = { 15 | encrptedAuthTokenName: 'enc_auth_token' 16 | }; 17 | } -------------------------------------------------------------------------------- /angular/src/shared/AppEnums.ts: -------------------------------------------------------------------------------- 1 | import { IsTenantAvailableOutputState } from '@shared/service-proxies/service-proxies'; 2 | 3 | 4 | export class AppTenantAvailabilityState { 5 | static Available: number = IsTenantAvailableOutputState._1; 6 | static InActive: number = IsTenantAvailableOutputState._2; 7 | static NotFound: number = IsTenantAvailableOutputState._3; 8 | } -------------------------------------------------------------------------------- /angular/src/shared/auth/app-auth.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { AppConsts } from '@shared/AppConsts'; 3 | 4 | @Injectable() 5 | export class AppAuthService { 6 | 7 | logout(reload?: boolean): void { 8 | studiox.auth.clearToken(); 9 | if (reload !== false) { 10 | location.href = AppConsts.appBaseUrl; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /angular/src/shared/helpers/UrlHelper.ts: -------------------------------------------------------------------------------- 1 | export class UrlHelper { 2 | /** 3 | * The URL requested, before initial routing. 4 | */ 5 | static readonly initialUrl = location.href; 6 | 7 | static getQueryParameters(): any { 8 | return document.location.search.replace(/(^\?)/, '').split("&").map(function (n) { return n = n.split("="), this[n[0]] = n[1], this }.bind({}))[0]; 9 | } 10 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/AppConsts.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate 2 | { 3 | public class AppConsts 4 | { 5 | /// 6 | /// Default pass phrase for SimpleStringCipher decrypt/encrypt operations 7 | /// 8 | public const string DefaultPassPhrase = "gsKxGZ012HLL3MI5"; 9 | } 10 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Authorization/Accounts/Dto/IsTenantAvailableInput.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | using StudioX.MultiTenancy; 3 | 4 | namespace StudioX.Boilerplate.Authorization.Accounts.Dto 5 | { 6 | public class IsTenantAvailableInput 7 | { 8 | [Required] 9 | [MaxLength(StudioXTenantBase.MaxTenancyNameLength)] 10 | public string TenancyName { get; set; } 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Authorization/Accounts/Dto/RegisterOutput.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Authorization.Accounts.Dto 2 | { 3 | public class RegisterOutput 4 | { 5 | public bool CanLogin { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Authorization/Accounts/Dto/TenantAvailabilityState.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Authorization.Accounts.Dto 2 | { 3 | public enum TenantAvailabilityState 4 | { 5 | Available = 1, 6 | InActive, 7 | NotFound 8 | } 9 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/BaseModel/InputConstant.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.BaseModel 2 | { 3 | public class InputConstant 4 | { 5 | public const string DefaultSorting = "Id DESC"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Configuration/Dto/ChangeUiThemeInput.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace StudioX.Boilerplate.Configuration.Dto 4 | { 5 | public class ChangeUiThemeInput 6 | { 7 | [Required] 8 | [MaxLength(32)] 9 | public string Theme { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Configuration/IConfigurationAppService.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using StudioX.Boilerplate.Configuration.Dto; 3 | 4 | namespace StudioX.Boilerplate.Configuration 5 | { 6 | public interface IConfigurationAppService 7 | { 8 | Task ChangeUiTheme(ChangeUiThemeInput input); 9 | } 10 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Configuration/Ui/UiThemeInfo.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Configuration.Ui 2 | { 3 | public class UiThemeInfo 4 | { 5 | public string Name { get; } 6 | public string CssClass { get; } 7 | 8 | public UiThemeInfo(string name, string cssClass) 9 | { 10 | Name = name; 11 | CssClass = cssClass; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/MultiTenancy/ITenantAppService.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services; 2 | using StudioX.Application.Services.Dto; 3 | using StudioX.Boilerplate.MultiTenancy.Dto; 4 | 5 | namespace StudioX.Boilerplate.MultiTenancy 6 | { 7 | public interface ITenantAppService : 8 | IAsyncCrudAppService 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Permissions/IPermissionAppService.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using StudioX.Application.Services; 3 | using StudioX.Application.Services.Dto; 4 | using StudioX.Boilerplate.Permissions.Dto; 5 | 6 | namespace StudioX.Boilerplate.Permissions 7 | { 8 | public interface IPermissionAppService : IApplicationService 9 | { 10 | Task> GetAll(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Roles/Dto/UpdateRolePermissionsInput.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.ComponentModel.DataAnnotations; 3 | 4 | namespace StudioX.Boilerplate.Roles.Dto 5 | { 6 | public class UpdateRolePermissionsInput 7 | { 8 | [Range(1, int.MaxValue)] 9 | public int RoleId { get; set; } 10 | 11 | [Required] 12 | public List GrantedPermissionNames { get; set; } 13 | } 14 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Sessions/Dto/ApplicationInfoDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace StudioX.Boilerplate.Sessions.Dto 5 | { 6 | public class ApplicationInfoDto 7 | { 8 | public string Version { get; set; } 9 | 10 | public DateTime ReleaseDate { get; set; } 11 | 12 | public Dictionary Features { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Sessions/Dto/GetCurrentLoginInformationsOutput.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Sessions.Dto 2 | { 3 | public class GetCurrentLoginInformationsOutput 4 | { 5 | public ApplicationInfoDto Application { get; set; } 6 | 7 | public UserLoginInfoDto User { get; set; } 8 | 9 | public TenantLoginInfoDto Tenant { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Sessions/Dto/TenantLoginInfoDto.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services.Dto; 2 | using StudioX.AutoMapper; 3 | using StudioX.Boilerplate.MultiTenancy; 4 | 5 | namespace StudioX.Boilerplate.Sessions.Dto 6 | { 7 | [AutoMapFrom(typeof(Tenant))] 8 | public class TenantLoginInfoDto : EntityDto 9 | { 10 | public string TenancyName { get; set; } 11 | 12 | public string Name { get; set; } 13 | } 14 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Sessions/ISessionAppService.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using StudioX.Application.Services; 3 | using StudioX.Boilerplate.Sessions.Dto; 4 | 5 | namespace StudioX.Boilerplate.Sessions 6 | { 7 | public interface ISessionAppService : IApplicationService 8 | { 9 | Task GetCurrentLoginInformations(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Settings/Dto/SettingDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Settings.Dto 2 | { 3 | public class SettingDto 4 | { 5 | public virtual DefaultPasswordComplexityDto DefaultPasswordComplexity { get; set; } 6 | 7 | public virtual PasswordComplexityDto PasswordComplexity { get; set; } 8 | 9 | public virtual UserLockOutDto UserLockOut { get; set; } 10 | 11 | public virtual UserManagementDto UserManagement { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Settings/Dto/UserLockOutDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Settings.Dto 2 | { 3 | public class UserLockOutDto 4 | { 5 | public virtual bool IsEnabled { get; set; } 6 | 7 | public virtual int DefaultAccountLockoutSeconds { get; set; } 8 | 9 | public virtual int MaxFailedAccessAttemptsBeforeLockout { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Settings/Dto/UserManagementDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Settings.Dto 2 | { 3 | public class UserManagementDto 4 | { 5 | public virtual bool IsEmailConfirmationRequiredForLogin { get; set; } 6 | 7 | public virtual bool IsNewRegisteredUserActiveByDefault { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/SignalR/SignalRFeature.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.SignalR 2 | { 3 | public static class SignalRFeature 4 | { 5 | public static bool IsAvailable 6 | { 7 | get 8 | { 9 | #if FEATURE_SIGNALR 10 | return true; 11 | #else 12 | return false; 13 | #endif 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Application/Users/Dto/ProhibitPermissionInput.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace StudioX.Boilerplate.Users.Dto 4 | { 5 | public class ProhibitPermissionInput 6 | { 7 | [Range(1, long.MaxValue)] 8 | public int UserId { get; set; } 9 | 10 | [Required] 11 | public string PermissionName { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Core/Authorization/Modules/ModuleAuthorizationProvider.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Localization; 2 | 3 | namespace StudioX.Boilerplate.Authorization.Modules 4 | { 5 | public class ModuleAuthorizationProvider 6 | { 7 | // TODO: Will be change to localization 8 | public ILocalizableString L(string name) 9 | { 10 | return new FixedLocalizableString(name); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Core/Authorization/PermissionChecker.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Authorization; 2 | using StudioX.Boilerplate.Authorization.Roles; 3 | using StudioX.Boilerplate.Authorization.Users; 4 | 5 | namespace StudioX.Boilerplate.Authorization 6 | { 7 | public class PermissionChecker : PermissionChecker 8 | { 9 | public PermissionChecker(UserManager userManager) 10 | : base(userManager) 11 | { 12 | 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Core/Authorization/Roles/StaticRoleNames.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Authorization.Roles 2 | { 3 | public static class StaticRoleNames 4 | { 5 | public static class Host 6 | { 7 | public const string Admin = "Admin"; 8 | } 9 | 10 | public static class Tenants 11 | { 12 | public const string Admin = "Admin"; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Core/BoilerplateConsts.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate 2 | { 3 | public class BoilerplateConsts 4 | { 5 | public const string LocalizationSourceName = "Boilerplate"; 6 | 7 | public const string ConnectionStringName = "Default"; 8 | 9 | public const bool MultiTenancyEnabled = true; 10 | } 11 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Core/Configuration/AppSettingNames.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Configuration 2 | { 3 | public static class AppSettingNames 4 | { 5 | public const string UiTheme = "App.UiTheme"; 6 | } 7 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Core/MultiTenancy/Tenant.cs: -------------------------------------------------------------------------------- 1 | using StudioX.MultiTenancy; 2 | using StudioX.Boilerplate.Authorization.Users; 3 | 4 | namespace StudioX.Boilerplate.MultiTenancy 5 | { 6 | public class Tenant : StudioXTenant 7 | { 8 | public Tenant() 9 | { 10 | 11 | } 12 | 13 | public Tenant(string tenancyName, string name) 14 | : base(tenancyName, name) 15 | { 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Core/Timing/AppTimes.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using StudioX.Dependency; 3 | 4 | namespace StudioX.Boilerplate.Timing 5 | { 6 | public class AppTimes : ISingletonDependency 7 | { 8 | /// 9 | /// Gets the startup time of the application. 10 | /// 11 | public DateTime StartupTime { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.EntityFrameworkCore/EntityFrameworkCore/BoilerplateDbContextConfigurer.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | 3 | namespace StudioX.Boilerplate.EntityFrameworkCore 4 | { 5 | public static class BoilerplateDbContextConfigurer 6 | { 7 | public static void Configure(DbContextOptionsBuilder builder, string connectionString) 8 | { 9 | builder.UseSqlServer(connectionString); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Migrator/appsettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "ConnectionStrings": { 3 | "Default": "Server=localhost; Database=BoilerplateDb; Trusted_Connection=True;" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Core/Authentication/External/ExternalAuthUserInfo.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Authentication.External 2 | { 3 | public class ExternalAuthUserInfo 4 | { 5 | public string ProviderKey { get; set; } 6 | 7 | public string FirstName { get; set; } 8 | 9 | public string EmailAddress { get; set; } 10 | 11 | public string LastName { get; set; } 12 | 13 | public string Provider { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Core/Authentication/External/IExternalAuthConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Boilerplate.Authentication.External 4 | { 5 | public interface IExternalAuthConfiguration 6 | { 7 | List Providers { get; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Core/Authentication/External/IExternalAuthManager.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace StudioX.Boilerplate.Authentication.External 4 | { 5 | public interface IExternalAuthManager 6 | { 7 | Task IsValidUser(string provider, string providerKey, string providerAccessCode); 8 | 9 | Task GetUserInfo(string provider, string accessCode); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Core/Models/TokenAuth/AuthenticateResultModel.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Models.TokenAuth 2 | { 3 | public class AuthenticateResultModel 4 | { 5 | public string AccessToken { get; set; } 6 | 7 | public string EncryptedAccessToken { get; set; } 8 | 9 | public int ExpireInSeconds { get; set; } 10 | 11 | public long UserId { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Core/Models/TokenAuth/ExternalAuthenticateResultModel.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Models.TokenAuth 2 | { 3 | public class ExternalAuthenticateResultModel 4 | { 5 | public string AccessToken { get; set; } 6 | 7 | public string EncryptedAccessToken { get; set; } 8 | 9 | public int ExpireInSeconds { get; set; } 10 | 11 | public bool WaitingForActivation { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Core/Models/TokenAuth/ExternalLoginProviderInfoModel.cs: -------------------------------------------------------------------------------- 1 | using StudioX.AutoMapper; 2 | using StudioX.Boilerplate.Authentication.External; 3 | 4 | namespace StudioX.Boilerplate.Models.TokenAuth 5 | { 6 | [AutoMapFrom(typeof(ExternalLoginProviderInfo))] 7 | public class ExternalLoginProviderInfoModel 8 | { 9 | public string Name { get; set; } 10 | 11 | public string ClientId { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Host/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM microsoft/aspnetcore:1.1.2 2 | 3 | WORKDIR /app 4 | COPY . . 5 | 6 | ENTRYPOINT ["dotnet", "StudioX.Boilerplate.Web.Host.dll"] 7 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Host/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Host/appsettings.Staging.json: -------------------------------------------------------------------------------- 1 | { 2 | "ConnectionStrings": { 3 | "Default": "Server=10.0.75.1; Database=BoilerplateDb; User=sa; Password=123qwe;" 4 | }, 5 | "App": { 6 | "WebSiteRootAddress": "http://localhost:9902/", 7 | "CorsOrigins": "http://localhost:9902" 8 | } 9 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "wwwroot/lib" 3 | } 4 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Controllers/AboutController.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Boilerplate.Controllers; 2 | using Microsoft.AspNetCore.Mvc; 3 | 4 | namespace StudioX.Boilerplate.Web.Controllers 5 | { 6 | public class AboutController : BoilerplateControllerBase 7 | { 8 | public ActionResult Index() 9 | { 10 | return View(); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Controllers/HomeController.cs: -------------------------------------------------------------------------------- 1 | using StudioX.AspNetCore.Mvc.Authorization; 2 | using StudioX.Boilerplate.Controllers; 3 | using Microsoft.AspNetCore.Mvc; 4 | 5 | namespace StudioX.Boilerplate.Web.Controllers 6 | { 7 | [StudioXMvcAuthorize] 8 | public class HomeController : BoilerplateControllerBase 9 | { 10 | public ActionResult Index() 11 | { 12 | return View(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM microsoft/aspnetcore:1.1.2 2 | 3 | WORKDIR /app 4 | COPY . . 5 | 6 | ENTRYPOINT ["dotnet", "StudioX.Boilerplate.Web.Mvc.dll"] 7 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Models/Account/LoginFormViewModel.cs: -------------------------------------------------------------------------------- 1 | using StudioX.MultiTenancy; 2 | 3 | namespace StudioX.Boilerplate.Web.Models.Account 4 | { 5 | public class LoginFormViewModel 6 | { 7 | public string ReturnUrl { get; set; } 8 | 9 | public bool IsMultiTenancyEnabled { get; set; } 10 | 11 | public bool IsSelfRegistrationAllowed { get; set; } 12 | 13 | public MultiTenancySides MultiTenancySide { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Models/Account/LoginViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace StudioX.Boilerplate.Web.Models.Account 4 | { 5 | public class LoginViewModel 6 | { 7 | [Required] 8 | public string UsernameOrEmailAddress { get; set; } 9 | 10 | [Required] 11 | public string Password { get; set; } 12 | 13 | public bool RememberMe { get; set; } 14 | } 15 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Models/Common/Modals/ModalHeaderViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Web.Models.Common.Modals 2 | { 3 | public class ModalHeaderViewModel 4 | { 5 | public string Title { get; set; } 6 | 7 | public ModalHeaderViewModel(string title) 8 | { 9 | Title = title; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Models/Roles/RoleListViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.Boilerplate.Permissions.Dto; 3 | using StudioX.Boilerplate.Roles.Dto; 4 | 5 | namespace StudioX.Boilerplate.Web.Models.Roles 6 | { 7 | public class RoleListViewModel 8 | { 9 | public IReadOnlyList Roles { get; set; } 10 | 11 | public IReadOnlyList Permissions { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Models/Users/UserListViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.Boilerplate.Roles.Dto; 3 | using StudioX.Boilerplate.Users.Dto; 4 | 5 | namespace StudioX.Boilerplate.Web.Models.Users 6 | { 7 | public class UserListViewModel 8 | { 9 | public IReadOnlyList Users { get; set; } 10 | 11 | public IReadOnlyList Roles { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Resources/IWebResourceManager.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using Microsoft.AspNetCore.Mvc.Razor; 3 | 4 | namespace StudioX.Boilerplate.Web.Resources 5 | { 6 | public interface IWebResourceManager 7 | { 8 | void AddScript(string url, bool addMinifiedOnProd = true); 9 | 10 | IReadOnlyList GetScripts(); 11 | 12 | HelperResult RenderScripts(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Startup/PageNames.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Web.Startup 2 | { 3 | public class PageNames 4 | { 5 | public const string Home = "Home"; 6 | public const string About = "About"; 7 | public const string Tenants = "Tenants"; 8 | public const string Roles = "Roles"; 9 | public const string Users = "Users"; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/Account/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Account/_Layout.cshtml"; 3 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/BoilerplateViewComponent.cs: -------------------------------------------------------------------------------- 1 | using StudioX.AspNetCore.Mvc.ViewComponents; 2 | 3 | namespace StudioX.Boilerplate.Web.Views 4 | { 5 | public abstract class BoilerplateViewComponent : StudioXViewComponent 6 | { 7 | protected BoilerplateViewComponent() 8 | { 9 | LocalizationSourceName = BoilerplateConsts.LocalizationSourceName; 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/Shared/Components/RightSideBar/RightSideBarViewModel.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Boilerplate.Configuration.Ui; 2 | 3 | namespace StudioX.Boilerplate.Web.Views.Shared.Components.RightSideBar 4 | { 5 | public class RightSideBarViewModel 6 | { 7 | public UiThemeInfo CurrentTheme { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/Shared/Components/SideBarNav/SideBarNavViewModel.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Navigation; 2 | 3 | namespace StudioX.Boilerplate.Web.Views.Shared.Components.SideBarNav 4 | { 5 | public class SideBarNavViewModel 6 | { 7 | public UserMenu MainMenu { get; set; } 8 | 9 | public string ActiveMenuItemName { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/Shared/Components/TenantChange/ChangeModalViewModel.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Boilerplate.Web.Views.Shared.Components.TenantChange 2 | { 3 | public class ChangeModalViewModel 4 | { 5 | public string TenancyName { get; set; } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/Shared/Components/TenantChange/TenantChangeViewModel.cs: -------------------------------------------------------------------------------- 1 | using StudioX.AutoMapper; 2 | using StudioX.Boilerplate.Sessions.Dto; 3 | 4 | namespace StudioX.Boilerplate.Web.Views.Shared.Components.TenantChange 5 | { 6 | [AutoMapFrom(typeof(GetCurrentLoginInformationsOutput))] 7 | public class TenantChangeViewModel 8 | { 9 | public TenantLoginInfoDto Tenant { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/Shared/Components/TopBarLanguageSwitch/TopBarLanguageSwitchViewModel.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.Localization; 3 | 4 | namespace StudioX.Boilerplate.Web.Views.Shared.Components.TopBarLanguageSwitch 5 | { 6 | public class TopBarLanguageSwitchViewModel 7 | { 8 | public LanguageInfo CurrentLanguage { get; set; } 9 | 10 | public IReadOnlyList Languages { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/Shared/Modals/_ModalFooterWithSaveAndCancel.cshtml: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/Shared/Modals/_ModalHeader.cshtml: -------------------------------------------------------------------------------- 1 | @using StudioX.Boilerplate.Web.Models.Common.Modals 2 | @model ModalHeaderViewModel 3 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/_ViewImports.cshtml: -------------------------------------------------------------------------------- 1 | @using StudioX.Localization 2 | @inherits StudioX.Boilerplate.Web.Views.BoilerplateRazorPage 3 | @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers 4 | @addTagHelper *, StudioX.Boilerplate.Web.Mvc 5 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/Views/_ViewStart.cshtml: -------------------------------------------------------------------------------- 1 | @{ 2 | Layout = "~/Views/Shared/_Layout.cshtml"; 3 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/appsettings.Staging.json: -------------------------------------------------------------------------------- 1 | { 2 | "ConnectionStrings": { 3 | "Default": "Server=10.0.75.1; Database=StudioXZeroTemplateDb; User=sa; Password=123qwe;" 4 | }, 5 | "App": { 6 | "WebSiteRootAddress": "http://localhost:9903/" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/StudioX/Framework/scripts/libs/requirejs/plugins/service.js: -------------------------------------------------------------------------------- 1 | define(function () { 2 | return { 3 | load: function (name, req, onload, config) { 4 | var url = studiox.appPath + 'api/StudioXServiceProxies/Get?name=' + name; 5 | req([url], function (value) { 6 | onload(value); 7 | }); 8 | } 9 | }; 10 | }); -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/StudioX/Framework/scripts/libs/studiox.jquery.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace studiox { 2 | 3 | //TODO: Gets JQuery.AjaxOptions and returns JQuery.Promise 4 | 5 | function ajax(userOptions: any): any; 6 | 7 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/StudioX/Framework/scripts/libs/studiox.signalr.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace studiox { 2 | 3 | namespace signalr { 4 | 5 | let autoConnect: boolean; 6 | 7 | function connect(): any; 8 | 9 | namespace hubs { 10 | 11 | let common: any; 12 | 13 | } 14 | 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/StudioX/Framework/scripts/libs/utils/ie10fix.js: -------------------------------------------------------------------------------- 1 | //Windows Phone 8 and Internet Explorer 10 FIX 2 | if (navigator.userAgent.match(/IEMobile\/10\.0/)) { 3 | var msViewportStyle = document.createElement("style"); 4 | msViewportStyle.appendChild( 5 | document.createTextNode( 6 | "@-ms-viewport{width:auto!important}" 7 | ) 8 | ); 9 | 10 | document.getElementsByTagName("head")[0].appendChild(msViewportStyle); 11 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/StudioX/Framework/styles/studiox.mixings.css: -------------------------------------------------------------------------------- 1 | /*# sourceMappingURL=studiox.mixings.css.map */ 2 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/StudioX/Framework/styles/studiox.mixings.css.map: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/StudioX/Framework/styles/studiox.mixings.min.css: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/StudioX/Framework/styles/utils/ie10fix.css: -------------------------------------------------------------------------------- 1 | @-webkit-viewport { 2 | width: device-width; 3 | } 4 | 5 | @-moz-viewport { 6 | width: device-width; 7 | } 8 | 9 | @-ms-viewport { 10 | width: device-width; 11 | } 12 | 13 | @-o-viewport { 14 | width: device-width; 15 | } 16 | 17 | @viewport 18 | 19 | { 20 | width: device-width; 21 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/favicon.ico -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/material-icons/materialicons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/material-icons/materialicons.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/-2n2p-_Y08sg57CNWQfKNvesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/77FXFjRbGzN4aCrSFhlh3hJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/97uahxiqZRoncBaCEI3aWxJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/CWB0XYA8bzo0kSThX0UTuA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/CWB0XYA8bzo0kSThX0UTuA.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/Fcx7Wwv8OzT71A3E1XOAjvesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/PwZc-YbIL414wB9rB1IAPRJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/UX6i4JxQDm3fVTc1CPuwqhJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/d-6IYplOFocCacKzxwXSOFtXRa8TVwTICgirnJhmVJw.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/ek4gzZ-GeXAPcSbHtCeQI_esZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/isZ-wbCXNKAbnjo6_TwHThJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/jSN2CGVDbcVyCnfJfjSdfBJtnKITppOI_IvcXXDNrsc.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/mErvLBYg_cXG3rLvUsKT_fesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/fonts/roboto/u0TOpm082MNkS5K0Q4rhqvesZW2xOQ-xsNqO47m55DA.woff2 -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/images/user-img-background.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/images/user-img-background.jpg -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/images/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/images/user.png -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/js/script.js: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_bootstrapnotify.scss: -------------------------------------------------------------------------------- 1 | .bootstrap-notify-container { 2 | max-width: 320px; 3 | text-align: center; 4 | } 5 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_collapse.scss: -------------------------------------------------------------------------------- 1 | .collapse, 2 | .collapse.in, 3 | .collapsing { 4 | .well { 5 | @include border-radius(0); 6 | margin-bottom: 0; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_colorpicker.scss: -------------------------------------------------------------------------------- 1 | .colorpicker { 2 | z-index: 1; 3 | 4 | &:before, 5 | &:after { 6 | display: none !important; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_dropzone.scss: -------------------------------------------------------------------------------- 1 | .dropzone { 2 | border: 2px solid transparent !important; 3 | background-color: #eee !important; 4 | 5 | .dz-message { 6 | .drag-icon-cph { 7 | .material-icons { 8 | font-size: 80px; 9 | color: #777; 10 | } 11 | } 12 | } 13 | } 14 | 15 | .dz-drag-hover { 16 | border: 2px dashed #888 !important; 17 | } 18 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_ionrangeslider.scss: -------------------------------------------------------------------------------- 1 | .irs { 2 | .irs-min, 3 | .irs-max, 4 | .irs-from, 5 | .irs-to, 6 | .irs-single { 7 | @include border-radius(0); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_labels.scss: -------------------------------------------------------------------------------- 1 | .label { 2 | @include border-radius(0); 3 | } 4 | 5 | .label-primary { 6 | background-color: #1f91f3; 7 | } 8 | 9 | .label-success { 10 | background-color: #2b982b; 11 | } 12 | 13 | .label-info { 14 | background-color: #00b0e4; 15 | } 16 | 17 | .label-warning { 18 | background-color: #ff9600; 19 | } 20 | 21 | .label-danger { 22 | background-color: #fb483a; 23 | } 24 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_lightgallery.scss: -------------------------------------------------------------------------------- 1 | .lg-outer { 2 | .lg-thumb-item, 3 | .lg-toogle-thumb { 4 | @include border-radius(0 !important); 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_maps.scss: -------------------------------------------------------------------------------- 1 | /* Google Maps */ 2 | .gmap { 3 | width: 100%; 4 | height: 400px; 5 | } 6 | 7 | /* jVector Map */ 8 | .jvector-map { 9 | width: 100%; 10 | height: 600px; 11 | } 12 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_materialicons.scss: -------------------------------------------------------------------------------- 1 | .material-icons.md-18 { font-size: 18px; } 2 | .material-icons.md-24 { font-size: 24px; } 3 | .material-icons.md-26 { font-size: 26px; } 4 | .material-icons.md-28 { font-size: 28px; } 5 | .material-icons.md-30 { font-size: 30px; } 6 | .material-icons.md-32 { font-size: 32px; } 7 | .material-icons.md-36 { font-size: 36px; } 8 | .material-icons.md-48 { font-size: 48px; } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_mediaobject.scss: -------------------------------------------------------------------------------- 1 | .media { 2 | margin-bottom: 25px; 3 | 4 | .media-body { 5 | color: #777; 6 | font-size: 13px; 7 | 8 | .media-heading { 9 | font-size: 16px; 10 | font-weight: bold; 11 | color: #333; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_tagsinput.scss: -------------------------------------------------------------------------------- 1 | .bootstrap-tagsinput { 2 | @include box-shadow(none !important); 3 | border: none !important; 4 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_thumbnails.scss: -------------------------------------------------------------------------------- 1 | .thumbnail { 2 | @include border-radius(0); 3 | 4 | p:not(button) { 5 | color: #999999; 6 | font-size: 14px; 7 | } 8 | 9 | h3 { 10 | font-weight: bold; 11 | font-size: 17px; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/scss/_waveseffect.scss: -------------------------------------------------------------------------------- 1 | .waves-effect { 2 | @each $key, $val in $colors { 3 | &.waves-#{$key} { 4 | .waves-ripple { 5 | background: rgba($val, 0.5); 6 | } 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Account/Login.css: -------------------------------------------------------------------------------- 1 | #LoginArea { 2 | max-width: 400px; 3 | margin: 120px auto 10px auto; 4 | } 5 | .social-icons { 6 | padding-left: 0px; 7 | } 8 | .social-icons a.btn-sm { 9 | margin-right: 5px; 10 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Account/Login.less: -------------------------------------------------------------------------------- 1 | #LoginArea { 2 | max-width: 400px; 3 | margin: 120px auto 10px auto; 4 | } 5 | 6 | .social-icons { 7 | padding-left: 0px; 8 | 9 | a.btn-sm { 10 | margin-right: 5px; 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Account/Login.min.css: -------------------------------------------------------------------------------- 1 | #LoginArea{max-width:400px;margin:120px auto 10px auto;}.social-icons{padding-left:0;}.social-icons a.btn-sm{margin-right:5px;} -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Account/_Layout.css: -------------------------------------------------------------------------------- 1 | .language-switch-area { 2 | text-align: center; 3 | padding: 10px; 4 | } 5 | .famfamfam-flags { 6 | display: inline-block; 7 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Account/_Layout.less: -------------------------------------------------------------------------------- 1 | .language-switch-area { 2 | text-align: center; 3 | padding: 10px; 4 | } 5 | 6 | .famfamfam-flags { 7 | display: inline-block; 8 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Account/_Layout.min.css: -------------------------------------------------------------------------------- 1 | .language-switch-area{text-align:center;padding:10px;}.famfamfam-flags{display:inline-block;} -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Shared/Components/TenantChange/Default.min.js: -------------------------------------------------------------------------------- 1 | (function(){$(".tenant-change-component a").click(function(n){n.preventDefault();$.ajax({url:studiox.appPath+"Account/TenantChangeModal",type:"POST",contentType:"application/html",success:function(n){$("#TenantChangeModal div.modal-content").html(n)},error:function(){}})});$(".tenant-change-component input:first").focus()})(); 2 | -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Shared/_Layout.css: -------------------------------------------------------------------------------- 1 | .famfamfam-flags { 2 | display: inline-block; 3 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Shared/_Layout.less: -------------------------------------------------------------------------------- 1 | .famfamfam-flags { 2 | display: inline-block; 3 | } -------------------------------------------------------------------------------- /aspnet-core/src/StudioX.Boilerplate.Web.Mvc/wwwroot/view-resources/Views/Shared/_Layout.min.css: -------------------------------------------------------------------------------- 1 | .famfamfam-flags{display:inline-block;} -------------------------------------------------------------------------------- /aspnet-core/test/StudioX.Boilerplate.Tests/MultiTenantFactAttribute.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | namespace StudioX.Boilerplate.Tests 4 | { 5 | public sealed class MultiTenantFactAttribute : FactAttribute 6 | { 7 | public MultiTenantFactAttribute() 8 | { 9 | if (!BoilerplateConsts.MultiTenancyEnabled) 10 | { 11 | Skip = "MultiTenancy is disabled."; 12 | } 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /framework/src/StudioX.AspNetCore.TestBase/TestOptions.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | using StudioX.Modules; 3 | 4 | namespace StudioX.AspNetCore.TestBase 5 | { 6 | public class TestOptions 7 | { 8 | public ITypeList Modules { get; private set; } 9 | 10 | public TestOptions() 11 | { 12 | Modules = new TypeList(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX.AspNetCore/AspNetCore/Mvc/Results/Caching/ClientCacheScope.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.AspNetCore.Mvc.Results.Caching 2 | { 3 | public enum ClientCacheScope 4 | { 5 | Public, 6 | Private 7 | } 8 | } -------------------------------------------------------------------------------- /framework/src/StudioX.AspNetCore/AspNetCore/Mvc/Results/Caching/IClientCacheAttribute.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc.Filters; 2 | 3 | namespace StudioX.AspNetCore.Mvc.Results.Caching 4 | { 5 | public interface IClientCacheAttribute 6 | { 7 | void Apply(ResultExecutingContext context); 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.AspNetCore/AspNetCore/Mvc/Results/Wrapping/IStudioXActionResultWrapper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc.Filters; 2 | 3 | namespace StudioX.AspNetCore.Mvc.Results.Wrapping 4 | { 5 | public interface IStudioXActionResultWrapper 6 | { 7 | void Wrap(ResultExecutingContext actionResult); 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.AspNetCore/AspNetCore/Mvc/Results/Wrapping/IStudioXActionResultWrapperFactory.cs: -------------------------------------------------------------------------------- 1 | using JetBrains.Annotations; 2 | using Microsoft.AspNetCore.Mvc.Filters; 3 | using StudioX.Dependency; 4 | 5 | namespace StudioX.AspNetCore.Mvc.Results.Wrapping 6 | { 7 | public interface IStudioXActionResultWrapperFactory : ITransientDependency 8 | { 9 | IStudioXActionResultWrapper CreateFor([NotNull] ResultExecutingContext actionResult); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.AspNetCore/AspNetCore/Mvc/Results/Wrapping/NullStudioXActionResultWrapper.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNetCore.Mvc; 2 | using Microsoft.AspNetCore.Mvc.Filters; 3 | 4 | namespace StudioX.AspNetCore.Mvc.Results.Wrapping 5 | { 6 | public class NullStudioXActionResultWrapper : IStudioXActionResultWrapper 7 | { 8 | public void Wrap(ResultExecutingContext actionResult) 9 | { 10 | 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX.AspNetCore/AspNetCore/StudioXServiceOptions.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dependency; 2 | using StudioX.PlugIns; 3 | 4 | namespace StudioX.AspNetCore 5 | { 6 | public class StudioXServiceOptions 7 | { 8 | public IIocManager IocManager { get; set; } 9 | 10 | public PlugInSourceList PlugInSources { get; } 11 | 12 | public StudioXServiceOptions() 13 | { 14 | PlugInSources = new PlugInSourceList(); 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Castle.Log4Net/Castle/Logging/Log4Net/LoggingFacilityExtensions.cs: -------------------------------------------------------------------------------- 1 | using Castle.Facilities.Logging; 2 | 3 | namespace StudioX.Castle.Logging.Log4Net 4 | { 5 | public static class LoggingFacilityExtensions 6 | { 7 | public static LoggingFacility UseStudioXLog4Net(this LoggingFacility loggingFacility) 8 | { 9 | return loggingFacility.LogUsing(); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Castle.Log4Net/Castle/Logging/Log4Net/StudioXCastleLog4NetModule.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Modules; 2 | 3 | namespace StudioX.Castle.Logging.Log4Net 4 | { 5 | /// 6 | /// StudioX Castle Log4Net module. 7 | /// 8 | [DependsOn(typeof(StudioXKernelModule))] 9 | public class StudioXCastleLog4NetModule : StudioXModule 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Dapper/Dapper/Filters/Action/IDapperActionFilter.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dependency; 2 | using StudioX.Domain.Entities; 3 | 4 | namespace StudioX.Dapper.Filters.Action 5 | { 6 | public interface IDapperActionFilter : ITransientDependency 7 | { 8 | void ExecuteFilter(TEntity entity) where TEntity : class, IEntity; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /framework/src/StudioX.Dapper/Dapper/Repositories/IDapperRepositoryOfTEntity.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Domain.Entities; 2 | 3 | namespace StudioX.Dapper.Repositories 4 | { 5 | public interface IDapperRepository : IDapperRepository where TEntity : class, IEntity 6 | { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework.Common/DefaultDbContextAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.EntityFramework 4 | { 5 | /// 6 | /// Used to mark a DbContext as default for a multi db context project. 7 | /// 8 | public class DefaultDbContextAttribute : Attribute 9 | { 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework.Common/IDbContextEntityFinder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using StudioX.Domain.Entities; 4 | 5 | namespace StudioX.EntityFramework 6 | { 7 | public interface IDbContextEntityFinder 8 | { 9 | IEnumerable GetEntityTypeInfos(Type dbContextType); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework.Common/IDbContextTypeMatcher.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.EntityFramework 4 | { 5 | public interface IDbContextTypeMatcher 6 | { 7 | void Populate(Type[] dbContextTypes); 8 | 9 | Type GetConcreteType(Type sourceDbContextType); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework.Common/Repositories/IEfGenericRepositoryRegistrar.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using StudioX.Dependency; 3 | using StudioX.Domain.Repositories; 4 | 5 | namespace StudioX.EntityFramework.Repositories 6 | { 7 | public interface IEfGenericRepositoryRegistrar 8 | { 9 | void RegisterForDbContext(Type dbContextType, IIocManager iocManager, AutoRepositoryTypesAttribute defaultAutoRepositoryTypesAttribute); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework.GraphDiff/GraphDiff/Configuration/IStudioXEntityFrameworkGraphDiffModuleConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.EntityFramework.GraphDiff.Mapping; 3 | 4 | namespace StudioX.EntityFramework.GraphDiff.Configuration 5 | { 6 | public interface IStudioXEntityFrameworkGraphDiffModuleConfiguration 7 | { 8 | List EntityMappings { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework.GraphDiff/GraphDiff/Configuration/StudioXEntityFrameworkGraphDiffModuleConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.EntityFramework.GraphDiff.Mapping; 3 | 4 | namespace StudioX.EntityFramework.GraphDiff.Configuration 5 | { 6 | public class StudioXEntityFrameworkGraphDiffModuleConfiguration : IStudioXEntityFrameworkGraphDiffModuleConfiguration 7 | { 8 | public List EntityMappings { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework.GraphDiff/GraphDiff/Mapping/IEntityMappingManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq.Expressions; 3 | using RefactorThis.GraphDiff; 4 | 5 | namespace StudioX.EntityFramework.GraphDiff.Mapping 6 | { 7 | public interface IEntityMappingManager 8 | { 9 | Expression, object>> GetEntityMappingOrNull(); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework/EntityFramework/DbContextTypeMatcher.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Domain.Uow; 2 | 3 | namespace StudioX.EntityFramework 4 | { 5 | public class DbContextTypeMatcher : DbContextTypeMatcher 6 | { 7 | public DbContextTypeMatcher(ICurrentUnitOfWorkProvider currentUnitOfWorkProvider) 8 | : base(currentUnitOfWorkProvider) 9 | { 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework/EntityFramework/Repositories/IRepositoryWithDbContext.cs: -------------------------------------------------------------------------------- 1 | using System.Data.Entity; 2 | 3 | namespace StudioX.EntityFramework.Repositories 4 | { 5 | public interface IRepositoryWithDbContext 6 | { 7 | DbContext GetDbContext(); 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework/EntityFramework/Uow/ActiveDbContextInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Data.Entity; 2 | 3 | namespace StudioX.EntityFramework.Uow 4 | { 5 | public class ActiveDbContextInfo 6 | { 7 | public DbContext DbContext { get; } 8 | 9 | public ActiveDbContextInfo(DbContext dbContext) 10 | { 11 | DbContext = dbContext; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFramework/EntityFramework/Uow/IEfUnitOfWorkFilterExecuter.cs: -------------------------------------------------------------------------------- 1 | using System.Data.Entity; 2 | using StudioX.Domain.Uow; 3 | 4 | namespace StudioX.EntityFramework.Uow 5 | { 6 | public interface IEfUnitOfWorkFilterExecuter : IUnitOfWorkFilterExecuter 7 | { 8 | void ApplyCurrentFilters(IUnitOfWork unitOfWork, DbContext dbContext); 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFrameworkCore/EntityFrameworkCore/Configuration/IStudioXDbContextConfigurer.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | 3 | namespace StudioX.EntityFrameworkCore.Configuration 4 | { 5 | public interface IStudioXDbContextConfigurer 6 | where TDbContext : DbContext 7 | { 8 | void Configure(StudioXDbContextConfiguration configuration); 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFrameworkCore/EntityFrameworkCore/Configuration/IStudioXEfCoreConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Microsoft.EntityFrameworkCore; 3 | 4 | namespace StudioX.EntityFrameworkCore.Configuration 5 | { 6 | public interface IStudioXEfCoreConfiguration 7 | { 8 | void AddDbContext(Action> action) 9 | where TDbContext : DbContext; 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFrameworkCore/EntityFrameworkCore/DbContextTypeMatcher.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Domain.Uow; 2 | using StudioX.EntityFramework; 3 | 4 | namespace StudioX.EntityFrameworkCore 5 | { 6 | public class DbContextTypeMatcher : DbContextTypeMatcher 7 | { 8 | public DbContextTypeMatcher(ICurrentUnitOfWorkProvider currentUnitOfWorkProvider) 9 | : base(currentUnitOfWorkProvider) 10 | { 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFrameworkCore/EntityFrameworkCore/IDbContextProvider.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | using StudioX.MultiTenancy; 3 | 4 | namespace StudioX.EntityFrameworkCore 5 | { 6 | public interface IDbContextProvider 7 | where TDbContext : DbContext 8 | { 9 | TDbContext GetDbContext(); 10 | 11 | TDbContext GetDbContext(MultiTenancySides? multiTenancySide); 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFrameworkCore/EntityFrameworkCore/IDbContextResolver.cs: -------------------------------------------------------------------------------- 1 | using System.Data.Common; 2 | using Microsoft.EntityFrameworkCore; 3 | 4 | namespace StudioX.EntityFrameworkCore 5 | { 6 | public interface IDbContextResolver 7 | { 8 | TDbContext Resolve(string connectionString, DbConnection existingConnection) 9 | where TDbContext : DbContext; 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.EntityFrameworkCore/EntityFrameworkCore/Repositories/IRepositoryWithDbContext.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | 3 | namespace StudioX.EntityFrameworkCore.Repositories 4 | { 5 | public interface IRepositoryWithDbContext 6 | { 7 | DbContext GetDbContext(); 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.MailKit/IMailKitSmtpBuilder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using MailKit.Net.Smtp; 3 | 4 | namespace StudioX.MailKit 5 | { 6 | public interface IMailKitSmtpBuilder 7 | { 8 | SmtpClient Build(); 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.MemoryDb/MemoryDb/Configuration/IStudioXMemoryDbModuleConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MemoryDb.Configuration 2 | { 3 | public interface IStudioXMemoryDbModuleConfiguration 4 | { 5 | //TODO: Configuration... 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /framework/src/StudioX.MemoryDb/MemoryDb/Configuration/StudioXMemoryDbModuleConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MemoryDb.Configuration 2 | { 3 | internal class StudioXMemoryDbModuleConfiguration : IStudioXMemoryDbModuleConfiguration 4 | { 5 | //TODO: Configuration... 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.MemoryDb/MemoryDb/IMemoryDatabaseProvider.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MemoryDb 2 | { 3 | /// 4 | /// Defines interface to obtain a object. 5 | /// 6 | public interface IMemoryDatabaseProvider 7 | { 8 | /// 9 | /// Gets the . 10 | /// 11 | MemoryDatabase Database { get; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX.MemoryDb/README.md: -------------------------------------------------------------------------------- 1 | ASP.NET Boilerplate - MemoryDB 2 | ------------------------------ 3 | 4 | MemoryDb implementation for ASP.NET Boilerplate. It's aimed to be used in tests. 5 | 6 | IMPORTANT: This project is experimental for now and not tested yet. -------------------------------------------------------------------------------- /framework/src/StudioX.MongoDB/MongoDb/Configuration/IStudioXMongoDbModuleConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MongoDb.Configuration 2 | { 3 | public interface IStudioXMongoDbModuleConfiguration 4 | { 5 | string ConnectionString { get; set; } 6 | 7 | string DatatabaseName { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /framework/src/StudioX.MongoDB/MongoDb/Configuration/StudioXMongoDbModuleConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MongoDb.Configuration 2 | { 3 | internal class StudioXMongoDbModuleConfiguration : IStudioXMongoDbModuleConfiguration 4 | { 5 | public string ConnectionString { get; set; } 6 | 7 | public string DatatabaseName { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.MongoDB/MongoDb/IMongoDatabaseProvider.cs: -------------------------------------------------------------------------------- 1 | using MongoDB.Driver; 2 | 3 | namespace StudioX.MongoDb 4 | { 5 | /// 6 | /// Defines interface to obtain a object. 7 | /// 8 | public interface IMongoDatabaseProvider 9 | { 10 | /// 11 | /// Gets the . 12 | /// 13 | MongoDatabase Database { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Owin/StudioXOwinOptions.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Owin 2 | { 3 | public class StudioXOwinOptions 4 | { 5 | /// 6 | /// Default: true. 7 | /// 8 | public bool UseEmbeddedFiles { get; set; } 9 | 10 | public StudioXOwinOptions() 11 | { 12 | UseEmbeddedFiles = true; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Quartz/Quartz/Configuration/IStudioXQuartzConfiguration.cs: -------------------------------------------------------------------------------- 1 | using Quartz; 2 | 3 | namespace StudioX.Quartz.Configuration 4 | { 5 | public interface IStudioXQuartzConfiguration 6 | { 7 | IScheduler Scheduler { get;} 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Quartz/Quartz/Configuration/StudioXQuartzConfiguration.cs: -------------------------------------------------------------------------------- 1 | using Quartz; 2 | using Quartz.Impl; 3 | 4 | namespace StudioX.Quartz.Configuration 5 | { 6 | public class StudioXQuartzConfiguration : IStudioXQuartzConfiguration 7 | { 8 | public IScheduler Scheduler => StdSchedulerFactory.GetDefaultScheduler(); 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.RedisCache/Runtime/Caching/Redis/IStudioXRedisCacheDatabaseProvider.cs: -------------------------------------------------------------------------------- 1 | using StackExchange.Redis; 2 | 3 | namespace StudioX.Runtime.Caching.Redis 4 | { 5 | /// 6 | /// Used to get for Redis cache. 7 | /// 8 | public interface IStudioXRedisCacheDatabaseProvider 9 | { 10 | /// 11 | /// Gets the database connection. 12 | /// 13 | IDatabase GetDatabase(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Controllers/Dynamic/Builders/IDynamicApiControllerBuilder.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | 3 | namespace StudioX.WebApi.Controllers.Dynamic.Builders 4 | { 5 | public interface IDynamicApiControllerBuilder 6 | { 7 | IApiControllerBuilder For(string serviceName); 8 | 9 | IBatchApiControllerBuilder ForAll(Assembly assembly, string servicePrefix); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Controllers/Dynamic/Clients/ApiClientBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.WebApi.Controllers.Dynamic.Clients 2 | { 3 | internal class ApiClientBuilder : IApiClientBuilder 4 | { 5 | public ApiClientBuilder(string url) 6 | { 7 | 8 | } 9 | 10 | public void Build() 11 | { 12 | 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Controllers/Dynamic/Clients/IApiClientBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.WebApi.Controllers.Dynamic.Clients 2 | { 3 | /// 4 | /// 5 | /// 6 | public interface IApiClientBuilder 7 | { 8 | /// 9 | /// 10 | /// 11 | void Build(); 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Controllers/Dynamic/IDynamicApiController.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.WebApi.Controllers.Dynamic 2 | { 3 | /// 4 | /// This interface is just used to mark dynamic web api controllers. 5 | /// 6 | internal interface IDynamicApiController 7 | { 8 | 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Controllers/Dynamic/Scripting/IScriptProxyGenerator.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.WebApi.Controllers.Dynamic.Scripting 2 | { 3 | internal interface IScriptProxyGenerator 4 | { 5 | string Generate(); 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Controllers/Dynamic/Scripting/ProxyScriptType.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.WebApi.Controllers.Dynamic.Scripting 2 | { 3 | /// 4 | /// 5 | /// 6 | public enum ProxyScriptType : byte 7 | { 8 | JQuery = 0, 9 | Angular = 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Runtime/Caching/ClearAllCacheModel.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.WebApi.Runtime.Caching 2 | { 3 | public class ClearAllCacheModel 4 | { 5 | public string Password { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Runtime/Caching/ClearCacheModel.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.WebApi.Runtime.Caching 2 | { 3 | public class ClearCacheModel 4 | { 5 | public string Password { get; set; } 6 | 7 | public string[] Caches { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Api/WebApi/Runtime/Caching/ClearCacheSettingNames.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.WebApi.Runtime.Caching 2 | { 3 | public static class ClearCacheSettingNames 4 | { 5 | /// 6 | /// StudioX.WebApi.Runtime.Caching.ClearPassword 7 | /// 8 | public const string Password = "StudioX.WebApi.Runtime.Caching.ClearPassword"; 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Api/Modeling/IApiDescriptionModelProvider.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Api.Modeling 2 | { 3 | public interface IApiDescriptionModelProvider 4 | { 5 | ApplicationApiDescriptionModel CreateModel(); 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Api/Modeling/ReturnValueApiDescriptionModel.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Web.Api.Modeling 4 | { 5 | [Serializable] 6 | public class ReturnValueApiDescriptionModel 7 | { 8 | public Type Type { get; } 9 | public string TypeAsString { get; } 10 | 11 | public ReturnValueApiDescriptionModel(Type type) 12 | { 13 | Type = type; 14 | TypeAsString = type.FullName; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Api/ProxyScripting/Configuration/IApiProxyScriptingConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace StudioX.Web.Api.ProxyScripting.Configuration 5 | { 6 | public interface IApiProxyScriptingConfiguration 7 | { 8 | /// 9 | /// Used to add/replace proxy script generators. 10 | /// 11 | IDictionary Generators { get; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Api/ProxyScripting/Generators/IProxyScriptGenerator.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Web.Api.Modeling; 2 | 3 | namespace StudioX.Web.Api.ProxyScripting.Generators 4 | { 5 | public interface IProxyScriptGenerator 6 | { 7 | string CreateScript(ApplicationApiDescriptionModel model); 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Api/ProxyScripting/IApiProxyScriptManager.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Api.ProxyScripting 2 | { 3 | public interface IApiProxyScriptManager 4 | { 5 | string GetScript(ApiProxyGenerationOptions options); 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Configuration/IWebEmbeddedResourcesConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Web.Configuration 4 | { 5 | public interface IWebEmbeddedResourcesConfiguration 6 | { 7 | /// 8 | /// List of file extensions (without dot) to ignore for embedded resources. 9 | /// Default extensions: cshtml, config. 10 | /// 11 | HashSet IgnoredFileExtensions { get; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Features/IFeaturesScriptManager.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace StudioX.Web.Features 4 | { 5 | /// 6 | /// This class is used to build feature system script. 7 | /// 8 | public interface IFeaturesScriptManager 9 | { 10 | /// 11 | /// Gets Javascript that contains all feature information. 12 | /// 13 | Task GetScriptAsync(); 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Localization/StudioXWebXmlSource/StudioXWeb-zh-CN.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXLocalizationSourceDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXLocalizationSourceDto 4 | { 5 | public string Name { get; set; } 6 | 7 | public string Type { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXStringValueDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXStringValueDto 4 | { 5 | public string Value { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserAntiForgeryConfigDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXUserAntiForgeryConfigDto 4 | { 5 | public string TokenCookieName { get; set; } 6 | 7 | public string TokenHeaderName { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserAuthConfigDto.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Web.Models.StudioXUserConfiguration 4 | { 5 | public class StudioXUserAuthConfigDto 6 | { 7 | public Dictionary AllPermissions { get; set; } 8 | 9 | public Dictionary GrantedPermissions { get; set; } 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserClockConfigDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXUserClockConfigDto 4 | { 5 | public string Provider { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserCurrentCultureConfigDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXUserCurrentCultureConfigDto 4 | { 5 | public string Name { get; set; } 6 | 7 | public string DisplayName { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserFeatureConfigDto.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Web.Models.StudioXUserConfiguration 4 | { 5 | public class StudioXUserFeatureConfigDto 6 | { 7 | public Dictionary AllFeatures { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserIanaTimeZoneConfigDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXUserIanaTimeZoneConfigDto 4 | { 5 | public string TimeZoneId { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserNavConfigDto.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.Application.Navigation; 3 | 4 | namespace StudioX.Web.Models.StudioXUserConfiguration 5 | { 6 | public class StudioXUserNavConfigDto 7 | { 8 | public Dictionary Menus { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserSecurityConfigDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXUserSecurityConfigDto 4 | { 5 | public StudioXUserAntiForgeryConfigDto AntiForgery { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserSettingConfigDto.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Web.Models.StudioXUserConfiguration 4 | { 5 | public class StudioXUserSettingConfigDto 6 | { 7 | public Dictionary Values { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserTimeZoneConfigDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXUserTimeZoneConfigDto 4 | { 5 | public StudioXUserWindowsTimeZoneConfigDto Windows { get; set; } 6 | 7 | public StudioXUserIanaTimeZoneConfigDto Iana { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Models/StudioXUserConfiguration/StudioXUserTimingConfigDto.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Models.StudioXUserConfiguration 2 | { 3 | public class StudioXUserTimingConfigDto 4 | { 5 | public StudioXUserTimeZoneConfigDto TimeZoneInfo { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/MultiTenancy/IMultiTenancyScriptManager.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.MultiTenancy 2 | { 3 | /// 4 | /// Used to create client scripts for multi-tenancy. 5 | /// 6 | public interface IMultiTenancyScriptManager 7 | { 8 | string GetScript(); 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/MultiTenancy/IWebMultiTenancyConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.MultiTenancy 2 | { 3 | public interface IWebMultiTenancyConfiguration 4 | { 5 | string DomainFormat { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/MultiTenancy/WebMultiTenancyConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.MultiTenancy 2 | { 3 | public class WebMultiTenancyConfiguration : IWebMultiTenancyConfiguration 4 | { 5 | public string DomainFormat { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Security/AntiForgery/IStudioXAntiForgeryManager.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Security.AntiForgery 2 | { 3 | public interface IStudioXAntiForgeryManager 4 | { 5 | IStudioXAntiForgeryConfiguration Configuration { get; } 6 | 7 | string GenerateToken(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Security/ISecurityScriptManager.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Security 2 | { 3 | public interface ISecurityScriptManager 4 | { 5 | string GetScript(); 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Sessions/ISessionScriptManager.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Sessions 2 | { 3 | /// 4 | /// Used to create client scripts for session. 5 | /// 6 | public interface ISessionScriptManager 7 | { 8 | string GetScript(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Settings/ISettingScriptManager.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace StudioX.Web.Settings 4 | { 5 | /// 6 | /// Define interface to get setting scripts 7 | /// 8 | public interface ISettingScriptManager 9 | { 10 | /// 11 | /// Gets Javascript that contains setting values. 12 | /// 13 | Task GetScriptAsync(); 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/StudioXWebConsts.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web 2 | { 3 | public static class StudioXWebConsts 4 | { 5 | public const string LocalizaionSourceName = "StudioXWeb"; 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Common/Web/Timing/ITimingScriptManager.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace StudioX.Web.Timing 4 | { 5 | /// 6 | /// Define interface to get timing scripts 7 | /// 8 | public interface ITimingScriptManager 9 | { 10 | /// 11 | /// Gets Javascript that contains all feature information. 12 | /// 13 | Task GetScriptAsync(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Mvc/Web/Mvc/Resources/Embedded/EmbeddedResourceItemCacheDependency.cs: -------------------------------------------------------------------------------- 1 | using System.Web.Caching; 2 | using StudioX.Resources.Embedded; 3 | 4 | namespace StudioX.Web.Mvc.Resources.Embedded 5 | { 6 | public class EmbeddedResourceItemCacheDependency : CacheDependency 7 | { 8 | public EmbeddedResourceItemCacheDependency(EmbeddedResourceItem resource) 9 | { 10 | SetUtcLastModified(resource.LastModifiedUtc); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web.Mvc/Web/Mvc/Views/StudioXWebViewPage.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Mvc.Views 2 | { 3 | /// 4 | /// Base class for all views in StudioX system. 5 | /// 6 | public abstract class StudioXWebViewPage : StudioXWebViewPage 7 | { 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web/Web/Configuration/IStudioXWebLocalizationConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Configuration 2 | { 3 | public interface IStudioXWebLocalizationConfiguration 4 | { 5 | /// 6 | /// Default: "StudioX.Localization.CultureName". 7 | /// 8 | string CookieName { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web/Web/Configuration/IStudioXWebModuleConfiguration.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Web.Security.AntiForgery; 2 | 3 | namespace StudioX.Web.Configuration 4 | { 5 | public interface IStudioXWebModuleConfiguration 6 | { 7 | IStudioXAntiForgeryWebConfiguration AntiForgery { get; } 8 | 9 | IStudioXWebLocalizationConfiguration Localization { get; } 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web/Web/Configuration/StudioXWebLocalizationConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Configuration 2 | { 3 | public class StudioXWebLocalizationConfiguration : IStudioXWebLocalizationConfiguration 4 | { 5 | public string CookieName { get; set; } 6 | 7 | public StudioXWebLocalizationConfiguration() 8 | { 9 | CookieName = "StudioX.Localization.CultureName"; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web/Web/Localization/ICurrentCultureSetter.cs: -------------------------------------------------------------------------------- 1 | using System.Web; 2 | 3 | namespace StudioX.Web.Localization 4 | { 5 | public interface ICurrentCultureSetter 6 | { 7 | void SetCurrentCulture(HttpContext httpContext); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web/Web/Security/AntiForgery/DisableStudioXAntiForgeryTokenValidationAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Web.Security.AntiForgery 4 | { 5 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method)] 6 | public class DisableStudioXAntiForgeryTokenValidationAttribute : Attribute 7 | { 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /framework/src/StudioX.Web/Web/Security/AntiForgery/ValidateStudioXAntiForgeryTokenAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Web.Security.AntiForgery 4 | { 5 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Interface | AttributeTargets.Method)] 6 | public class ValidateStudioXAntiForgeryTokenAttribute : Attribute 7 | { 8 | 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX.Web/Web/Session/HttpContextPrincipalAccessor.cs: -------------------------------------------------------------------------------- 1 | using System.Security.Claims; 2 | using System.Web; 3 | using StudioX.Runtime.Session; 4 | 5 | namespace StudioX.Web.Session 6 | { 7 | public class HttpContextPrincipalAccessor : DefaultPrincipalAccessor 8 | { 9 | public override ClaimsPrincipal Principal => HttpContext.Current?.User as ClaimsPrincipal ?? base.Principal; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Features/FeatureConfiguration.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | 3 | namespace StudioX.Application.Features 4 | { 5 | internal class FeatureConfiguration : IFeatureConfiguration 6 | { 7 | public ITypeList Providers { get; private set; } 8 | 9 | public FeatureConfiguration() 10 | { 11 | Providers = new TypeList(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Features/IFeatureConfiguration.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | 3 | namespace StudioX.Application.Features 4 | { 5 | /// 6 | /// Used to configure feature system. 7 | /// 8 | public interface IFeatureConfiguration 9 | { 10 | /// 11 | /// Used to add/remove s. 12 | /// 13 | ITypeList Providers { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Navigation/IHasMenuItemDefinitions.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Application.Navigation 4 | { 5 | /// 6 | /// Declares common interface for classes those have menu items. 7 | /// 8 | public interface IHasMenuItemDefinitions 9 | { 10 | /// 11 | /// List of menu items. 12 | /// 13 | IList Items { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Navigation/INavigationProviderContext.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Application.Navigation 2 | { 3 | /// 4 | /// Provides infrastructure to set navigation. 5 | /// 6 | public interface INavigationProviderContext 7 | { 8 | /// 9 | /// Gets a reference to the menu manager. 10 | /// 11 | INavigationManager Manager { get; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Navigation/NavigationProviderContext.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Application.Navigation 2 | { 3 | internal class NavigationProviderContext : INavigationProviderContext 4 | { 5 | public INavigationManager Manager { get; } 6 | 7 | public NavigationProviderContext(INavigationManager manager) 8 | { 9 | Manager = manager; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/Dto/IHasLongTotalCount.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Application.Services.Dto 2 | { 3 | /// 4 | /// This interface is defined to standardize to set "Total Count of Items" to a DTO for long type. 5 | /// 6 | public interface IHasLongTotalCount 7 | { 8 | /// 9 | /// Total count of Items. 10 | /// 11 | long TotalCount { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/Dto/IHasTotalCount.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Application.Services.Dto 2 | { 3 | /// 4 | /// This interface is defined to standardize to set "Total Count of Items" to a DTO. 5 | /// 6 | public interface IHasTotalCount 7 | { 8 | /// 9 | /// Total count of Items. 10 | /// 11 | int TotalCount { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/Dto/ILimitedResultRequest.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Application.Services.Dto 2 | { 3 | /// 4 | /// This interface is defined to standardize to request a limited result. 5 | /// 6 | public interface ILimitedResultRequest 7 | { 8 | /// 9 | /// Max expected result count. 10 | /// 11 | int MaxResultCount { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/Dto/IPagedAndSortedResultRequest.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Application.Services.Dto 2 | { 3 | /// 4 | /// This interface is defined to standardize to request a paged and sorted result. 5 | /// 6 | public interface IPagedAndSortedResultRequest : IPagedResultRequest, ISortedResultRequest 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/Dto/IPagedResult.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Application.Services.Dto 2 | { 3 | /// 4 | /// This interface is defined to standardize to return a page of items to clients. 5 | /// 6 | /// Type of the items in the list 7 | public interface IPagedResult : IListResult, IHasTotalCount 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/Dto/IPagedResultRequest.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Application.Services.Dto 2 | { 3 | /// 4 | /// This interface is defined to standardize to request a paged result. 5 | /// 6 | public interface IPagedResultRequest : ILimitedResultRequest 7 | { 8 | /// 9 | /// Skip count (beginning of the page). 10 | /// 11 | int SkipCount { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/Dto/LimitedResultRequestDto.cs: -------------------------------------------------------------------------------- 1 | using System.ComponentModel.DataAnnotations; 2 | 3 | namespace StudioX.Application.Services.Dto 4 | { 5 | /// 6 | /// Simply implements . 7 | /// 8 | public class LimitedResultRequestDto : ILimitedResultRequest 9 | { 10 | [Range(1, int.MaxValue)] 11 | public virtual int MaxResultCount { get; set; } = 10; 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/Dto/PagedAndSortedResultRequestDto.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Application.Services.Dto 4 | { 5 | /// 6 | /// Simply implements . 7 | /// 8 | [Serializable] 9 | public class PagedAndSortedResultRequestDto : PagedResultRequestDto, IPagedAndSortedResultRequest 10 | { 11 | public virtual string Sorting { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/IApplicationService.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dependency; 2 | 3 | namespace StudioX.Application.Services 4 | { 5 | /// 6 | /// This interface must be implemented by all application services to identify them by convention. 7 | /// 8 | public interface IApplicationService : ITransientDependency 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Application/Services/IAvoidDuplicateCrossCuttingConcerns.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Application.Services 4 | { 5 | public interface IAvoidDuplicateCrossCuttingConcerns 6 | { 7 | List AppliedCrossCuttingConcerns { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Auditing/AuditedAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Auditing 4 | { 5 | /// 6 | /// This attribute is used to apply audit logging for a single method or 7 | /// all methods of a class or interface. 8 | /// 9 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 10 | public class AuditedAttribute : Attribute 11 | { 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /framework/src/StudioX/Auditing/AuditingSelectorList.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Auditing 4 | { 5 | internal class AuditingSelectorList : List, IAuditingSelectorList 6 | { 7 | public bool RemoveByName(string name) 8 | { 9 | return RemoveAll(s => s.Name == name) > 0; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Auditing/DisableAuditingAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Auditing 4 | { 5 | /// 6 | /// Used to disable auditing for a single method or 7 | /// all methods of a class or interface. 8 | /// 9 | [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Property)] 10 | public class DisableAuditingAttribute : Attribute 11 | { 12 | 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Auditing/IAuditSerializer.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Auditing 2 | { 3 | public interface IAuditSerializer 4 | { 5 | string Serialize(object obj); 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Auditing/IClientInfoProvider.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Auditing 2 | { 3 | public interface IClientInfoProvider 4 | { 5 | string BrowserInfo { get; } 6 | 7 | string ClientIpAddress { get; } 8 | 9 | string ComputerName { get; } 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Auditing/NullClientInfoProvider.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Auditing 2 | { 3 | public class NullClientInfoProvider : IClientInfoProvider 4 | { 5 | public static NullClientInfoProvider Instance { get; } = new NullClientInfoProvider(); 6 | 7 | public string BrowserInfo => null; 8 | public string ClientIpAddress => null; 9 | public string ComputerName => null; 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Authorization/IAuthorizationHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Reflection; 4 | using System.Threading.Tasks; 5 | 6 | namespace StudioX.Authorization 7 | { 8 | public interface IAuthorizationHelper 9 | { 10 | Task AuthorizeAsync(IEnumerable authorizeAttributes); 11 | 12 | Task AuthorizeAsync(MethodInfo methodInfo, Type type); 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Authorization/IStudioXAllowAnonymousAttribute.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Authorization 2 | { 3 | public interface IStudioXAllowAnonymousAttribute 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Authorization/StudioXAllowAnonymousAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Authorization 4 | { 5 | /// 6 | /// Used to allow a method to be accessed by any user. 7 | /// Suppress defined in the class containing that method. 8 | /// 9 | public class StudioXAllowAnonymousAttribute : Attribute, IStudioXAllowAnonymousAttribute 10 | { 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/BackgroundJobs/IBackgroundJob.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.BackgroundJobs 2 | { 3 | /// 4 | /// Defines interface of a background job. 5 | /// 6 | public interface IBackgroundJob 7 | { 8 | /// 9 | /// Executes the job with the . 10 | /// 11 | /// Job arguments. 12 | void Execute(TArgs args); 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Configuration/Startup/EventBusConfiguration.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Configuration.Startup 2 | { 3 | internal class EventBusConfiguration : IEventBusConfiguration 4 | { 5 | public bool UseDefaultEventBus { get; set; } 6 | 7 | public EventBusConfiguration() 8 | { 9 | UseDefaultEventBus = true; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Configuration/Startup/ISettingsConfiguration.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | 3 | namespace StudioX.Configuration.Startup 4 | { 5 | /// 6 | /// Used to configure setting system. 7 | /// 8 | public interface ISettingsConfiguration 9 | { 10 | /// 11 | /// List of settings providers. 12 | /// 13 | ITypeList Providers { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Configuration/Startup/IValidationConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace StudioX.Configuration.Startup 5 | { 6 | public interface IValidationConfiguration 7 | { 8 | List IgnoredTypes { get; } 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Configuration/Startup/ModuleConfigurations.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Configuration.Startup 2 | { 3 | internal class ModuleConfigurations : IModuleConfigurations 4 | { 5 | public IStudioXStartupConfiguration StudioXConfiguration { get; } 6 | 7 | public ModuleConfigurations(IStudioXStartupConfiguration startupConfiguration) 8 | { 9 | StudioXConfiguration = startupConfiguration; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Configuration/Startup/NavigationConfiguration.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Navigation; 2 | using StudioX.Collections; 3 | 4 | namespace StudioX.Configuration.Startup 5 | { 6 | internal class NavigationConfiguration : INavigationConfiguration 7 | { 8 | public ITypeList Providers { get; } 9 | 10 | public NavigationConfiguration() 11 | { 12 | Providers = new TypeList(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Configuration/Startup/SettingsConfiguration.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | 3 | namespace StudioX.Configuration.Startup 4 | { 5 | internal class SettingsConfiguration : ISettingsConfiguration 6 | { 7 | public ITypeList Providers { get; } 8 | 9 | public SettingsConfiguration() 10 | { 11 | Providers = new TypeList(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Configuration/Startup/ValidationConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace StudioX.Configuration.Startup 5 | { 6 | public class ValidationConfiguration : IValidationConfiguration 7 | { 8 | public List IgnoredTypes { get; } 9 | 10 | public ValidationConfiguration() 11 | { 12 | IgnoredTypes = new List(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Data/ActiveTransactionProviderArgs.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Data 4 | { 5 | public class ActiveTransactionProviderArgs : Dictionary 6 | { 7 | public static ActiveTransactionProviderArgs Empty { get; } = new ActiveTransactionProviderArgs(); 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Dependency/IIocManagerAccessor.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Dependency 2 | { 3 | public interface IIocManagerAccessor 4 | { 5 | IIocManager IocManager { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Dependency/ISingletonDependency.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Dependency 2 | { 3 | /// 4 | /// All classes implement this interface are automatically registered to dependency injection as singleton object. 5 | /// 6 | public interface ISingletonDependency 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Dependency/ITransientDependency.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Dependency 2 | { 3 | /// 4 | /// All classes implement this interface are automatically registered to dependency injection as transient object. 5 | /// 6 | public interface ITransientDependency 7 | { 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Entities/IEntity.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Domain.Entities 2 | { 3 | /// 4 | /// A shortcut of for most used primary key type (). 5 | /// 6 | public interface IEntity : IEntity 7 | { 8 | 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Entities/IMayHaveTenant.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Domain.Entities 2 | { 3 | /// 4 | /// Implement this interface for an entity which may optionally have TenantId. 5 | /// 6 | public interface IMayHaveTenant 7 | { 8 | /// 9 | /// TenantId of this entity. 10 | /// 11 | int? TenantId { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Entities/IMustHaveTenant.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Domain.Entities 2 | { 3 | /// 4 | /// Implement this interface for an entity which must have TenantId. 5 | /// 6 | public interface IMustHaveTenant 7 | { 8 | /// 9 | /// TenantId of this entity. 10 | /// 11 | int TenantId { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Entities/IPassivable.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Domain.Entities 2 | { 3 | /// 4 | /// This interface is used to make an entity active/passive. 5 | /// 6 | public interface IPassivable 7 | { 8 | /// 9 | /// True: This entity is active. 10 | /// False: This entity is not active. 11 | /// 12 | bool IsActive { get; set; } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Policies/IPolicy.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dependency; 2 | 3 | namespace StudioX.Domain.Policies 4 | { 5 | /// 6 | /// This interface can be implemented by all Policy classes/interfaces to identify them by convention. 7 | /// 8 | public interface IPolicy : ITransientDependency 9 | { 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Repositories/IRepository.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dependency; 2 | 3 | namespace StudioX.Domain.Repositories 4 | { 5 | /// 6 | /// This interface must be implemented by all repositories to identify them by convention. 7 | /// Implement generic version instead of this one. 8 | /// 9 | public interface IRepository : ITransientDependency 10 | { 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Services/DomainService.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Domain.Services 2 | { 3 | /// 4 | /// This class can be used as a base class for domain services. 5 | /// 6 | public abstract class DomainService : StudioXServiceBase, IDomainService 7 | { 8 | 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Services/IDomainService.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dependency; 2 | 3 | namespace StudioX.Domain.Services 4 | { 5 | /// 6 | /// This interface must be implemented by all domain services to identify them by convention. 7 | /// 8 | public interface IDomainService : ITransientDependency 9 | { 10 | 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Domain/Uow/IUnitOfWorkFilterExecuter.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Domain.Uow 2 | { 3 | public interface IUnitOfWorkFilterExecuter 4 | { 5 | void ApplyDisableFilter(IUnitOfWork unitOfWork, string filterName); 6 | void ApplyEnableFilter(IUnitOfWork unitOfWork, string filterName); 7 | void ApplyFilterParameterValue(IUnitOfWork unitOfWork, string filterName, string parameterName, object value); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /framework/src/StudioX/Events/Bus/Entities/EntityChangeType.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Events.Bus.Entities 2 | { 3 | public enum EntityChangeType 4 | { 5 | Created, 6 | Updated, 7 | Deleted 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Events/Bus/Handlers/IEventHandler.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Events.Bus.Handlers 2 | { 3 | /// 4 | /// Undirect base interface for all event handlers. 5 | /// Implement instead of this one. 6 | /// 7 | public interface IEventHandler 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX/IGuidGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX 4 | { 5 | /// 6 | /// Used to generate Ids. 7 | /// 8 | public interface IGuidGenerator 9 | { 10 | /// 11 | /// Creates a GUID. 12 | /// 13 | Guid Create(); 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/IHasErrorCode.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX 2 | { 3 | public interface IHasErrorCode 4 | { 5 | int Code { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX/IO/Extensions/StreamExtensions.cs: -------------------------------------------------------------------------------- 1 | using System.IO; 2 | 3 | namespace StudioX.IO.Extensions 4 | { 5 | public static class StreamExtensions 6 | { 7 | public static byte[] GetAllBytes(this Stream stream) 8 | { 9 | using (var memoryStream = new MemoryStream()) 10 | { 11 | stream.CopyTo(memoryStream); 12 | return memoryStream.ToArray(); 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /framework/src/StudioX/IShouldInitialize.cs: -------------------------------------------------------------------------------- 1 | using Castle.Core; 2 | 3 | namespace StudioX 4 | { 5 | /// 6 | /// Defines interface for objects those should be Initialized before using it. 7 | /// If the object resolved using dependency injection, 8 | /// method is automatically called just after creation of the object. 9 | /// 10 | public interface IShouldInitialize : IInitializable 11 | { 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/IUserIdentifier.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX 2 | { 3 | /// 4 | /// Interface to get a user identifier. 5 | /// 6 | public interface IUserIdentifier 7 | { 8 | /// 9 | /// Tenant Id. Can be null for host users. 10 | /// 11 | int? TenantId { get; } 12 | 13 | /// 14 | /// Id of the user. 15 | /// 16 | long UserId { get; } 17 | } 18 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Localization/ILanguageManager.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Localization 4 | { 5 | public interface ILanguageManager 6 | { 7 | LanguageInfo CurrentLanguage { get; } 8 | 9 | IReadOnlyList GetLanguages(); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Localization/ILanguageProvider.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Localization 4 | { 5 | public interface ILanguageProvider 6 | { 7 | IReadOnlyList GetLanguages(); 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Localization/ILocalizationContext.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Localization 2 | { 3 | /// 4 | /// Localization context. 5 | /// 6 | public interface ILocalizationContext 7 | { 8 | /// 9 | /// Gets the localization manager. 10 | /// 11 | ILocalizationManager LocalizationManager { get; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Localization/LanguageInfo.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/framework/src/StudioX/Localization/LanguageInfo.cs -------------------------------------------------------------------------------- /framework/src/StudioX/Localization/LocalizationSettingNames.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Localization 2 | { 3 | public static class LocalizationSettingNames 4 | { 5 | public const string DefaultLanguage = "StudioX.Localization.DefaultLanguageName"; 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Logging/IHasLogSeverity.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Logging 2 | { 3 | /// 4 | /// Interface to define a property (see ). 5 | /// 6 | public interface IHasLogSeverity 7 | { 8 | /// 9 | /// Log severity. 10 | /// 11 | LogSeverity Severity { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Modules/IStudioXModuleManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace StudioX.Modules 5 | { 6 | public interface IStudioXModuleManager 7 | { 8 | StudioXModuleInfo StartupModule { get; } 9 | 10 | IReadOnlyList Modules { get; } 11 | 12 | void Initialize(Type startupModule); 13 | 14 | void StartModules(); 15 | 16 | void ShutdownModules(); 17 | } 18 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/ITenantResolveContributor.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public interface ITenantResolveContributor 4 | { 5 | int? ResolveTenantId(); 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/ITenantResolver.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public interface ITenantResolver 4 | { 5 | int? ResolveTenantId(); 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/ITenantResolverCache.cs: -------------------------------------------------------------------------------- 1 | using JetBrains.Annotations; 2 | 3 | namespace StudioX.MultiTenancy 4 | { 5 | public interface ITenantResolverCache 6 | { 7 | [CanBeNull] 8 | TenantResolverCacheItem Value { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/ITenantStore.cs: -------------------------------------------------------------------------------- 1 | using JetBrains.Annotations; 2 | 3 | namespace StudioX.MultiTenancy 4 | { 5 | public interface ITenantStore 6 | { 7 | [CanBeNull] 8 | TenantInfo Find(int tenantId); 9 | 10 | [CanBeNull] 11 | TenantInfo Find([NotNull] string tenancyName); 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/MultiTenancyConsts.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public static class MultiTenancyConsts 4 | { 5 | /// 6 | /// Default tenant id: 1. 7 | /// 8 | public const int DefaultTenantId = 1; 9 | 10 | public const string TenantIdResolveKey = "StudioX.TenantId"; 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/NullTenantResolverCache.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public class NullTenantResolverCache : ITenantResolverCache 4 | { 5 | public TenantResolverCacheItem Value 6 | { 7 | get { return null; } 8 | set { } 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/NullTenantStore.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public class NullTenantStore : ITenantStore 4 | { 5 | public TenantInfo Find(int tenantId) 6 | { 7 | return null; 8 | } 9 | 10 | public TenantInfo Find(string tenancyName) 11 | { 12 | return null; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/TenantInfo.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public class TenantInfo 4 | { 5 | public int Id { get; set; } 6 | 7 | public string TenancyName { get; set; } 8 | 9 | public TenantInfo(int id, string tenancyName) 10 | { 11 | Id = id; 12 | TenancyName = tenancyName; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/MultiTenancy/TenantResolverCacheItem.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public class TenantResolverCacheItem 4 | { 5 | public int? TenantId { get; } 6 | 7 | public TenantResolverCacheItem(int? tenantId) 8 | { 9 | TenantId = tenantId; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Notifications/INotificationConfiguration.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | 3 | namespace StudioX.Notifications 4 | { 5 | /// 6 | /// Used to configure notification system. 7 | /// 8 | public interface INotificationConfiguration 9 | { 10 | /// 11 | /// Notification providers. 12 | /// 13 | ITypeList Providers { get; } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Notifications/INotificationDefinitionContext.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Notifications 2 | { 3 | /// 4 | /// Used as a context while defining notifications. 5 | /// 6 | public interface INotificationDefinitionContext 7 | { 8 | /// 9 | /// Gets the notification definition manager. 10 | /// 11 | INotificationDefinitionManager Manager { get; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Notifications/NotificationConfiguration.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | 3 | namespace StudioX.Notifications 4 | { 5 | internal class NotificationConfiguration : INotificationConfiguration 6 | { 7 | public ITypeList Providers { get; } 8 | 9 | public NotificationConfiguration() 10 | { 11 | Providers = new TypeList(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Notifications/NotificationDefinitionContext.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Notifications 2 | { 3 | internal class NotificationDefinitionContext : INotificationDefinitionContext 4 | { 5 | public INotificationDefinitionManager Manager { get; } 6 | 7 | public NotificationDefinitionContext(INotificationDefinitionManager manager) 8 | { 9 | Manager = manager; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Orm/ISecondaryOrmRegistrar.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dependency; 2 | using StudioX.Domain.Repositories; 3 | 4 | namespace StudioX.Orm 5 | { 6 | public interface ISecondaryOrmRegistrar 7 | { 8 | string OrmContextKey { get; } 9 | 10 | void RegisterRepositories(IIocManager iocManager, AutoRepositoryTypesAttribute defaultRepositoryTypes); 11 | } 12 | } -------------------------------------------------------------------------------- /framework/src/StudioX/PlugIns/IPlugInSource.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Reflection; 4 | 5 | namespace StudioX.PlugIns 6 | { 7 | public interface IPlugInSource 8 | { 9 | List GetAssemblies(); 10 | 11 | List GetModules(); 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/PlugIns/IStudioXPlugInManager.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.PlugIns 2 | { 3 | public interface IStudioXPlugInManager 4 | { 5 | PlugInSourceList PlugInSources { get; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/src/StudioX/RealTime/OnlineClientEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.RealTime 4 | { 5 | public class OnlineClientEventArgs : EventArgs 6 | { 7 | public IOnlineClient Client { get; } 8 | 9 | public OnlineClientEventArgs(IOnlineClient client) 10 | { 11 | Client = client; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/RealTime/OnlineUserEventArgs.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.RealTime 2 | { 3 | public class OnlineUserEventArgs : OnlineClientEventArgs 4 | { 5 | public UserIdentifier User { get; } 6 | 7 | public OnlineUserEventArgs(UserIdentifier user, IOnlineClient client) 8 | : base(client) 9 | { 10 | User = user; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Reflection/Extensions/TypeExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | 4 | namespace StudioX.Reflection.Extensions 5 | { 6 | public static class TypeExtensions 7 | { 8 | public static Assembly GetAssembly(this Type type) 9 | { 10 | return type.GetTypeInfo().Assembly; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Reflection/ITypeFinder.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Reflection 4 | { 5 | public interface ITypeFinder 6 | { 7 | Type[] Find(Func predicate); 8 | 9 | Type[] FindAll(); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX/RegularGuidGenerator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using StudioX.Dependency; 3 | 4 | namespace StudioX 5 | { 6 | /// 7 | /// Implements by using . 8 | /// 9 | public class RegularGuidGenerator : IGuidGenerator, ITransientDependency 10 | { 11 | public virtual Guid Create() 12 | { 13 | return Guid.NewGuid(); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Resources/Embedded/EmbeddedResourcesConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Resources.Embedded 4 | { 5 | public class EmbeddedResourcesConfiguration : IEmbeddedResourcesConfiguration 6 | { 7 | public List Sources { get; } 8 | 9 | public EmbeddedResourcesConfiguration() 10 | { 11 | Sources = new List(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Resources/Embedded/IEmbeddedResourcesConfiguration.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Resources.Embedded 4 | { 5 | public interface IEmbeddedResourcesConfiguration 6 | { 7 | List Sources { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Caching/CacheManagerExtensions.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Runtime.Caching 2 | { 3 | /// 4 | /// Extension methods for . 5 | /// 6 | public static class CacheManagerExtensions 7 | { 8 | public static ITypedCache GetCache(this ICacheManager cacheManager, string name) 9 | { 10 | return cacheManager.GetCache(name).AsTyped(); 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/IAmbientDataContext.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Runtime 2 | { 3 | public interface IAmbientDataContext 4 | { 5 | void SetData(string key, object value); 6 | 7 | object GetData(string key); 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/IAmbientScopeProvider.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Runtime 4 | { 5 | public interface IAmbientScopeProvider 6 | { 7 | T GetValue(string contextKey); 8 | 9 | IDisposable BeginScope(string contextKey, T value); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Session/IPrincipalAccessor.cs: -------------------------------------------------------------------------------- 1 | using System.Security.Claims; 2 | 3 | namespace StudioX.Runtime.Session 4 | { 5 | public interface IPrincipalAccessor 6 | { 7 | ClaimsPrincipal Principal { get; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Session/SessionOverride.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Runtime.Session 2 | { 3 | public class SessionOverride 4 | { 5 | public long? UserId { get; } 6 | 7 | public int? TenantId { get; } 8 | 9 | public SessionOverride(int? tenantId, long? userId) 10 | { 11 | TenantId = tenantId; 12 | UserId = userId; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Validation/AlwaysValidValueValidator.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Runtime.Validation 4 | { 5 | [Validator("NULL")] 6 | [Serializable] 7 | public class AlwaysValidValueValidator : ValueValidatorBase 8 | { 9 | public override bool IsValid(object value) 10 | { 11 | return true; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Validation/DisableValidationAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Runtime.Validation 4 | { 5 | /// 6 | /// Can be added to a method to disable auto validation. 7 | /// 8 | [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Property)] 9 | public class DisableValidationAttribute : Attribute 10 | { 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Validation/EnableValidationAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Runtime.Validation 4 | { 5 | /// 6 | /// Can be added to a method to enable auto validation if validation is disabled for it's class. 7 | /// 8 | [AttributeUsage(AttributeTargets.Method)] 9 | public class EnableValidationAttribute : Attribute 10 | { 11 | 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Validation/IShouldNormalize.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Runtime.Validation 2 | { 3 | /// 4 | /// This interface is used to normalize inputs before method execution. 5 | /// 6 | public interface IShouldNormalize 7 | { 8 | /// 9 | /// This method is called lastly before method execution (after validation if exists). 10 | /// 11 | void Normalize(); 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Validation/IValueValidator.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Runtime.Validation 4 | { 5 | public interface IValueValidator 6 | { 7 | string Name { get; } 8 | 9 | object this[string key] { get; set; } 10 | 11 | IDictionary Attributes { get; } 12 | 13 | bool IsValid(object value); 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Runtime/Validation/ValidatorAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Runtime.Validation 4 | { 5 | [AttributeUsage(AttributeTargets.Class)] 6 | public class ValidatorAttribute : Attribute 7 | { 8 | public string Name { get; set; } 9 | 10 | public ValidatorAttribute(string name) 11 | { 12 | Name = name; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Text/Formatting/FormatStringToken.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Text.Formatting 2 | { 3 | internal class FormatStringToken 4 | { 5 | public string Text { get; private set; } 6 | 7 | public FormatStringTokenType Type { get; private set; } 8 | 9 | public FormatStringToken(string text, FormatStringTokenType type) 10 | { 11 | Text = text; 12 | Type = type; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Text/Formatting/FormatStringTokenType.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Text.Formatting 2 | { 3 | internal enum FormatStringTokenType 4 | { 5 | ConstantText, 6 | DynamicValue 7 | } 8 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Threading/BackgroundWorkers/IBackgroundWorker.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Threading.BackgroundWorkers 2 | { 3 | /// 4 | /// Interface for a worker (thread) that runs on background to perform some tasks. 5 | /// 6 | public interface IBackgroundWorker : IRunnable 7 | { 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /framework/src/StudioX/Threading/StudioXTaskCache.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | 3 | namespace StudioX.Threading 4 | { 5 | public static class StudioXTaskCache 6 | { 7 | public static Task CompletedTask { get; } = Task.FromResult(0); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /framework/src/StudioX/Timing/ClockProviders.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Timing 2 | { 3 | public static class ClockProviders 4 | { 5 | public static UnspecifiedClockProvider Unspecified { get; } = new UnspecifiedClockProvider(); 6 | 7 | public static LocalClockProvider Local { get; } = new LocalClockProvider(); 8 | 9 | public static UtcClockProvider Utc { get; } = new UtcClockProvider(); 10 | } 11 | } -------------------------------------------------------------------------------- /framework/src/StudioX/Timing/TimingSettingNames.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Timing 2 | { 3 | public static class TimingSettingNames 4 | { 5 | public const string TimeZone = "StudioX.Timing.TimeZone"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /framework/src/StudioX/UI/Inputs/IInputType.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.Runtime.Validation; 3 | 4 | namespace StudioX.UI.Inputs 5 | { 6 | public interface IInputType 7 | { 8 | string Name { get; } 9 | 10 | object this[string key] { get; set; } 11 | 12 | IDictionary Attributes { get; } 13 | 14 | IValueValidator Validator { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /framework/src/StudioX/UI/Inputs/ILocalizableComboboxItem.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Localization; 2 | using Newtonsoft.Json; 3 | 4 | namespace StudioX.UI.Inputs 5 | { 6 | public interface ILocalizableComboboxItem 7 | { 8 | string Value { get; set; } 9 | 10 | [JsonConverter(typeof(LocalizableStringToStringJsonConverter))] 11 | ILocalizableString DisplayText { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/src/StudioX/UI/Inputs/ILocalizableComboboxItemSource.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.UI.Inputs 4 | { 5 | public interface ILocalizableComboboxItemSource 6 | { 7 | ICollection Items { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/src/StudioX/UI/Inputs/InputTypeAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.UI.Inputs 4 | { 5 | [AttributeUsage(AttributeTargets.Class)] 6 | public class InputTypeAttribute : Attribute 7 | { 8 | public string Name { get; set; } 9 | 10 | public InputTypeAttribute(string name) 11 | { 12 | Name = name; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/test/StudioX.AspNetCore.Tests/App/AppServices/NameConflictAppService.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services; 2 | using Microsoft.AspNetCore.Mvc; 3 | 4 | namespace StudioX.AspNetCore.App.AppServices 5 | { 6 | public class NameConflictAppService : ApplicationService 7 | { 8 | [HttpGet] 9 | public string GetConstantString() 10 | { 11 | return "return-value-from-app-service"; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/test/StudioX.AspNetCore.Tests/App/AppServices/ParameterTestAppService.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services; 2 | using StudioX.AspNetCore.App.Models; 3 | 4 | namespace StudioX.AspNetCore.App.AppServices 5 | { 6 | public class ParameterTestAppService : ApplicationService 7 | { 8 | public string GetComplexInput(SimpleViewModel model, bool testBool) 9 | { 10 | return "42"; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Dapper.Tests/Mappings/Product.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dapper.Tests.Entities; 2 | 3 | using DapperExtensions.Mapper; 4 | 5 | namespace StudioX.Dapper.Tests.Mappings 6 | { 7 | public sealed class ProductMap : ClassMapper 8 | { 9 | public ProductMap() 10 | { 11 | Table("Products"); 12 | Map(x => x.Id).Key(KeyType.Identity); 13 | AutoMap(); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /framework/test/StudioX.Dapper.Tests/Mappings/ProductDetail.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dapper.Tests.Entities; 2 | 3 | using DapperExtensions.Mapper; 4 | 5 | namespace StudioX.Dapper.Tests.Mappings 6 | { 7 | public sealed class ProductDetailMap : ClassMapper 8 | { 9 | public ProductDetailMap() 10 | { 11 | Table("ProductDetails"); 12 | AutoMap(); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /framework/test/StudioX.EntityFramework.GraphDiff.Tests/Entities/MyDependentEntity.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Domain.Entities; 2 | 3 | namespace StudioX.EntityFramework.GraphDIff.Tests.Entities 4 | { 5 | public class MyDependentEntity : Entity 6 | { 7 | public virtual MyMainEntity MyMainEntity { get; set; } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /framework/test/StudioX.EntityFramework.GraphDiff.Tests/Entities/MyMainEntity.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.Domain.Entities; 3 | 4 | namespace StudioX.EntityFramework.GraphDIff.Tests.Entities 5 | { 6 | public class MyMainEntity : Entity 7 | { 8 | public virtual ICollection MyDependentEntities { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /framework/test/StudioX.EntityFramework.GraphDiff.Tests/Entities/MyUnmappedEntity.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Domain.Entities; 2 | 3 | namespace StudioX.EntityFramework.GraphDIff.Tests.Entities 4 | { 5 | public class MyUnmappedEntity : Entity 6 | { 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /framework/test/StudioX.EntityFramework.GraphDiff.Tests/StudioXEntityFrameworkGraphDiffTestBase.cs: -------------------------------------------------------------------------------- 1 | using StudioX.TestBase; 2 | 3 | namespace StudioX.EntityFramework.GraphDIff.Tests 4 | { 5 | public class StudioXEntityFrameworkGraphDiffTestBase : StudioXIntegratedTestBase 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /framework/test/StudioX.EntityFrameworkCore.Dapper.Tests/Dapper/CommentMap.cs: -------------------------------------------------------------------------------- 1 | using DapperExtensions.Mapper; 2 | using StudioX.EntityFrameworkCore.Dapper.Tests.Domain; 3 | 4 | namespace StudioX.EntityFrameworkCore.Dapper.Tests.Dapper 5 | { 6 | public sealed class CommentMap : ClassMapper 7 | { 8 | public CommentMap() 9 | { 10 | Table("Comments"); 11 | Map(x => x.Id).Key(KeyType.Identity); 12 | AutoMap(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/test/StudioX.EntityFrameworkCore.Dapper.Tests/Domain/Comment.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Domain.Entities; 2 | 3 | namespace StudioX.EntityFrameworkCore.Dapper.Tests.Domain 4 | { 5 | public class Comment : Entity 6 | { 7 | protected Comment() 8 | { 9 | } 10 | 11 | public Comment(string text) : this() 12 | { 13 | Text = text; 14 | } 15 | 16 | public string Text { get; set; } 17 | } 18 | } -------------------------------------------------------------------------------- /framework/test/StudioX.EntityFrameworkCore.Dapper.Tests/Ef/IPostRepository.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | using StudioX.Domain.Repositories; 4 | using StudioX.EntityFrameworkCore.Dapper.Tests.Domain; 5 | 6 | namespace StudioX.EntityFrameworkCore.Dapper.Tests.Ef 7 | { 8 | public interface IPostRepository : IRepository 9 | { 10 | } 11 | } -------------------------------------------------------------------------------- /framework/test/StudioX.EntityFrameworkCore.Tests/Ef/IPostRepository.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using StudioX.Domain.Repositories; 3 | using StudioX.EntityFrameworkCore.Tests.Domain; 4 | 5 | namespace StudioX.EntityFrameworkCore.Tests.Ef 6 | { 7 | public interface IPostRepository : IRepository 8 | { 9 | } 10 | } -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication.Tests/Authorization/CrudServiceAuthTest.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.TestBase.SampleApplication.Tests.Authorization 2 | { 3 | public class CrudServiceAuthTest : SampleApplicationTestBase 4 | { 5 | public CrudServiceAuthTest() 6 | { 7 | 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/ContacLists/ContactListDto.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services.Dto; 2 | using StudioX.AutoMapper; 3 | 4 | namespace StudioX.TestBase.SampleApplication.ContacLists 5 | { 6 | [AutoMapFrom(typeof(ContactList))] 7 | public class ContactListDto : EntityDto 8 | { 9 | public virtual string Name { get; set; } 10 | } 11 | } -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/ContacLists/IContactListAppService.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using StudioX.Application.Services; 3 | 4 | namespace StudioX.TestBase.SampleApplication.ContacLists 5 | { 6 | public interface IContactListAppService : IApplicationService 7 | { 8 | void Test(); 9 | 10 | List GetContactLists(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/GuidEntities/TestEntityWithGuidPk.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using StudioX.Domain.Entities; 3 | 4 | namespace StudioX.TestBase.SampleApplication.GuidEntities 5 | { 6 | public class TestEntityWithGuidPk : Entity 7 | { 8 | 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/GuidEntities/TestEntityWithGuidPkAndDbGeneratedValue.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.ComponentModel.DataAnnotations.Schema; 3 | using StudioX.Domain.Entities; 4 | 5 | namespace StudioX.TestBase.SampleApplication.GuidEntities 6 | { 7 | public class TestEntityWithGuidPkAndDbGeneratedValue : Entity 8 | { 9 | [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 10 | public override Guid Id { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/Messages/GetMessagesWithFilterInput.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services.Dto; 2 | 3 | namespace StudioX.TestBase.SampleApplication.Messages 4 | { 5 | public class GetMessagesWithFilterInput : PagedAndSortedResultRequestDto 6 | { 7 | public string Text { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/Messages/IAsyncMessageAppService.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services; 2 | 3 | namespace StudioX.TestBase.SampleApplication.Messages 4 | { 5 | public interface IAsyncMessageAppService : IAsyncCrudAppService 6 | { 7 | 8 | } 9 | } -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/Messages/MessageDto.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services.Dto; 2 | using StudioX.AutoMapper; 3 | 4 | namespace StudioX.TestBase.SampleApplication.Messages 5 | { 6 | [AutoMap(typeof(Message))] 7 | public class MessageDto : FullAuditedEntityDto 8 | { 9 | public int? TenantId { get; set; } 10 | 11 | public string Text { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/People/Dto/GetPeopleInput.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.TestBase.SampleApplication.People.Dto 2 | { 3 | public class GetPeopleInput 4 | { 5 | public string NameFilter { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/test/StudioX.TestBase.SampleApplication/People/Dto/PersonDto.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services.Dto; 2 | using StudioX.AutoMapper; 3 | 4 | namespace StudioX.TestBase.SampleApplication.People.Dto 5 | { 6 | [AutoMap(typeof(Person))] 7 | public class PersonDto : EntityDto 8 | { 9 | public int ContactListId { get; set; } 10 | 11 | public string Name { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Domain/Entities/Department.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Domain.Entities; 2 | 3 | namespace StudioX.Tests.Domain.Entities 4 | { 5 | public class Department : Entity 6 | { 7 | public string Name { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Domain/Entities/Manager.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Tests.Domain.Entities 2 | { 3 | public class Manager : Worker 4 | { 5 | public string Title { get; set; } 6 | } 7 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Domain/Entities/Worker.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Domain.Entities; 2 | 3 | namespace StudioX.Tests.Domain.Entities 4 | { 5 | public class Worker : Entity 6 | { 7 | public string Name { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Events/Bus/EventBusTestBase.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Events.Bus; 2 | 3 | namespace StudioX.Tests.Events.Bus 4 | { 5 | public abstract class EventBusTestBase 6 | { 7 | protected IEventBus EventBus; 8 | 9 | protected EventBusTestBase() 10 | { 11 | EventBus = new EventBus(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Events/Bus/MyDerivedEventData.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Tests.Events.Bus 2 | { 3 | public class MyDerivedEventData : MySimpleEventData 4 | { 5 | public MyDerivedEventData(int value) 6 | : base(value) 7 | { 8 | } 9 | } 10 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Events/Bus/MySimpleEventData.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Events.Bus; 2 | 3 | namespace StudioX.Tests.Events.Bus 4 | { 5 | public class MySimpleEventData : EventData 6 | { 7 | public int Value { get; set; } 8 | 9 | public MySimpleEventData(int value) 10 | { 11 | Value = value; 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Json/JsonExtensionsTests.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Json; 2 | using Shouldly; 3 | using Xunit; 4 | 5 | namespace StudioX.Tests.Json 6 | { 7 | public class JsonExtensionsTests 8 | { 9 | [Fact] 10 | public void ToJsonStringTest() 11 | { 12 | 42.ToJsonString().ShouldBe("42"); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Localization/Json/JsonSources/Lang-zh-CN.json: -------------------------------------------------------------------------------- 1 | { 2 | "culture": "zh-CN", 3 | "texts": { 4 | "Apple": "苹果", 5 | "Banana": "香蕉" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Localization/Json/JsonSources/Lang.json: -------------------------------------------------------------------------------- 1 | { 2 | "culture": "en", 3 | "texts": { 4 | "Apple": "Apple", 5 | "Banana": "Banana" 6 | } 7 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Localization/Json/XmlSources/Lang-zh-CN.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 这是一个测试. 6 | 7 | -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Localization/Json/XmlSources/Lang.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | This is a test. 6 | 7 | -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Localization/TestXmlFiles/Test-tr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Dünya 6 | 7 | -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Localization/TestXmlFiles/Test.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | World 6 | 7 | -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Localization/XmlLocalizationDictionaryBuilderTests.cs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/framework/test/StudioX.Tests/Localization/XmlLocalizationDictionaryBuilderTests.cs -------------------------------------------------------------------------------- /framework/test/StudioX.Tests/Resources/Embedded/MyResources/js/MyScriptFile1.js: -------------------------------------------------------------------------------- 1 | /* This file is just a sample to use in tests */ 2 | alert('hello world!'); -------------------------------------------------------------------------------- /framework/test/StudioX.Web.Api.Tests/AppServices/IMyFirstAppService.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services; 2 | 3 | namespace StudioX.Web.Api.Tests.AppServices 4 | { 5 | public interface IMyFirstAppService : IApplicationService 6 | { 7 | string GetStr(int i); 8 | 9 | [MyIgnoreApi] 10 | string GetStr2(int i); 11 | } 12 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Web.Api.Tests/AppServices/MyFirstAppService.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Web.Api.Tests.AppServices 2 | { 3 | public class MyFirstAppService : IMyFirstAppService 4 | { 5 | public string GetStr(int i) 6 | { 7 | return i.ToString(); 8 | } 9 | 10 | public string GetStr2(int i) 11 | { 12 | return (i + 1).ToString(); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /framework/test/StudioX.Web.Api.Tests/AppServices/MyIgnoreApiAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Web.Api.Tests.AppServices 4 | { 5 | public class MyIgnoreApiAttribute : Attribute 6 | { 7 | 8 | } 9 | } -------------------------------------------------------------------------------- /framework/tools/gitlink/GitLink.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/framework/tools/gitlink/GitLink.exe -------------------------------------------------------------------------------- /framework/tools/nuget/nuget.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/framework/tools/nuget/nuget.exe -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.AspNetCore/SignInStatus.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Zero.AspNetCore 2 | { 3 | public enum SignInStatus 4 | { 5 | RequiresVerification, 6 | Success, 7 | Failure, 8 | LockedOut 9 | } 10 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/Authorization/Roles/RolePermissionSetting.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Authorization.Roles 2 | { 3 | /// 4 | /// Used to store setting for a permission for a role. 5 | /// 6 | public class RolePermissionSetting : PermissionSetting 7 | { 8 | /// 9 | /// Role id. 10 | /// 11 | public virtual int RoleId { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/Authorization/Users/UserPermissionSetting.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Authorization.Users 2 | { 3 | /// 4 | /// Used to store setting for a permission for a user. 5 | /// 6 | public class UserPermissionSetting : PermissionSetting 7 | { 8 | /// 9 | /// User id. 10 | /// 11 | public virtual long UserId { get; set; } 12 | } 13 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/MultiTenancy/IStudioXZeroDbMigrator.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public interface IStudioXZeroDbMigrator 4 | { 5 | void CreateOrMigrateForHost(); 6 | 7 | void CreateOrMigrateForTenant(StudioXTenantBase tenant); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/MultiTenancy/ITenantCache.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.MultiTenancy 2 | { 3 | public interface ITenantCache 4 | { 5 | TenantCacheItem Get(int tenantId); 6 | 7 | TenantCacheItem Get(string tenancyName); 8 | 9 | TenantCacheItem GetOrNull(string tenancyName); 10 | 11 | TenantCacheItem GetOrNull(int tenantId); 12 | } 13 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Runtime.CompilerServices; 2 | 3 | [assembly: InternalsVisibleTo("StudioX.Zero")] 4 | [assembly: InternalsVisibleTo("StudioX.ZeroCore")] -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/Zero/Configuration/IRoleManagementConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Zero.Configuration 4 | { 5 | public interface IRoleManagementConfig 6 | { 7 | List StaticRoles { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/Zero/Configuration/IUserManagementConfig.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | 3 | namespace StudioX.Zero.Configuration 4 | { 5 | /// 6 | /// User management configuration. 7 | /// 8 | public interface IUserManagementConfig 9 | { 10 | ITypeList ExternalAuthenticationSources { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/Zero/Configuration/RoleManagementConfig.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace StudioX.Zero.Configuration 4 | { 5 | internal class RoleManagementConfig : IRoleManagementConfig 6 | { 7 | public List StaticRoles { get; private set; } 8 | 9 | public RoleManagementConfig() 10 | { 11 | StaticRoles = new List(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/Zero/Configuration/UserManagementConfig.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Collections; 2 | 3 | namespace StudioX.Zero.Configuration 4 | { 5 | public class UserManagementConfig : IUserManagementConfig 6 | { 7 | public ITypeList ExternalAuthenticationSources { get; set; } 8 | 9 | public UserManagementConfig() 10 | { 11 | ExternalAuthenticationSources = new TypeList(); 12 | } 13 | } 14 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Common/Zero/StudioXZeroConsts.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Zero 2 | { 3 | public class StudioXZeroConsts 4 | { 5 | /// 6 | /// "StudioXZero" 7 | /// 8 | public const string LocalizationSourceName = "StudioXZero"; 9 | } 10 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.EntityFramework/Zero/EntityFramework/IMultiTenantSeed.cs: -------------------------------------------------------------------------------- 1 | using StudioX.MultiTenancy; 2 | 3 | namespace StudioX.Zero.EntityFramework 4 | { 5 | public interface IMultiTenantSeed 6 | { 7 | StudioXTenantBase Tenant { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.EntityFrameworkCore/Zero/EntityFrameworkCore/IMultiTenantSeed.cs: -------------------------------------------------------------------------------- 1 | using StudioX.MultiTenancy; 2 | 3 | namespace StudioX.Zero.EntityFrameworkCore 4 | { 5 | public interface IMultiTenantSeed 6 | { 7 | StudioXTenantBase Tenant { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero.Ldap/Ldap/Configuration/IStudioXZeroLdapModuleConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace StudioX.Zero.Ldap.Configuration 4 | { 5 | public interface IStudioXZeroLdapModuleConfig 6 | { 7 | bool IsEnabled { get; } 8 | 9 | Type AuthenticationSourceType { get; } 10 | 11 | void Enable(Type authenticationSourceType); 12 | } 13 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero/Authorization/Users/IUserTokenProviderAccessor.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.AspNet.Identity; 2 | 3 | namespace StudioX.Authorization.Users 4 | { 5 | public interface IUserTokenProviderAccessor 6 | { 7 | IUserTokenProvider GetUserTokenProviderOrNull() 8 | where TUser : StudioXUser; 9 | } 10 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.Zero/Authorization/Users/NullUserTokenProviderAccessor.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Dependency; 2 | using Microsoft.AspNet.Identity; 3 | 4 | namespace StudioX.Authorization.Users 5 | { 6 | public class NullUserTokenProviderAccessor : IUserTokenProviderAccessor, ISingletonDependency 7 | { 8 | public IUserTokenProvider GetUserTokenProviderOrNull() where TUser : StudioXUser 9 | { 10 | return null; 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.ZeroCore.EntityFrameworkCore/Zero/EntityFrameworkCore/IMultiTenantSeed.cs: -------------------------------------------------------------------------------- 1 | using StudioX.MultiTenancy; 2 | 3 | namespace StudioX.Zero.EntityFrameworkCore 4 | { 5 | public interface IMultiTenantSeed 6 | { 7 | StudioXTenantBase Tenant { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.ZeroCore.IdentityServer4.EntityFrameworkCore/IdentityServer4/IStudioXPersistedGrantDbContext.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | 3 | namespace StudioX.IdentityServer4 4 | { 5 | public interface IStudioXPersistedGrantDbContext 6 | { 7 | DbSet PersistedGrants { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /module-zero/src/StudioX.ZeroCore/Zero/Localization/SourceExt/StudioXZero-de.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /module-zero/src/StudioX.ZeroCore/Zero/Localization/SourceExt/StudioXZero-fr.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /module-zero/src/StudioX.ZeroCore/Zero/Localization/SourceExt/StudioXZero-lv.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /module-zero/src/StudioX.ZeroCore/Zero/Localization/SourceExt/StudioXZero-pt-BR.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /module-zero/src/StudioX.ZeroCore/Zero/Localization/SourceExt/StudioXZero-ru.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | Email 5 | Секретный код 6 | Ваш секретный код: {0} 7 | Смс 8 | Ваш секретный код: {0} 9 | 10 | 11 | -------------------------------------------------------------------------------- /module-zero/src/StudioX.ZeroCore/Zero/Localization/SourceExt/StudioXZero-zh-CN.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.Zero.SampleApp.EntityFrameworkCore/Program.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Zero.SampleApp.EntityFrameworkCore 2 | { 3 | /* WORKAROUND 4 | * This is needed since .NET CLI does not support class library projects! 5 | * See https://docs.efproject.net/en/latest/cli/dotnet.html#preview-1-known-issues 6 | */ 7 | public class Program 8 | { 9 | public static void Main() 10 | { 11 | 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.Zero.SampleApp/Authorization/AppPermissionChecker.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Authorization; 2 | using StudioX.Zero.SampleApp.Roles; 3 | using StudioX.Zero.SampleApp.Users; 4 | 5 | namespace StudioX.Zero.SampleApp.Authorization 6 | { 7 | public class AppPermissionChecker : PermissionChecker 8 | { 9 | public AppPermissionChecker(UserManager userManager) 10 | : base(userManager) 11 | { 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.Zero.SampleApp/MultiTenancy/Tenant.cs: -------------------------------------------------------------------------------- 1 | using StudioX.MultiTenancy; 2 | using StudioX.Zero.SampleApp.Users; 3 | 4 | namespace StudioX.Zero.SampleApp.MultiTenancy 5 | { 6 | public class Tenant : StudioXTenant 7 | { 8 | protected Tenant() 9 | { 10 | 11 | } 12 | 13 | public Tenant(string tenancyName, string name) 14 | : base(tenancyName, name) 15 | { 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /module-zero/test/StudioX.Zero.SampleApp/Roles/Role.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Authorization.Roles; 2 | using StudioX.Zero.SampleApp.Users; 3 | 4 | namespace StudioX.Zero.SampleApp.Roles 5 | { 6 | public class Role : StudioXRole 7 | { 8 | public Role() 9 | { 10 | 11 | } 12 | 13 | public Role(int? tenantId, string name, string displayName) 14 | : base(tenantId, name, displayName) 15 | { 16 | 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /module-zero/test/StudioX.Zero.SampleApp/Users/Dto/ResetPasswordInput.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.Zero.SampleApp.Users.Dto 2 | { 3 | public class ResetPasswordInput 4 | { 5 | public int? TenantId { get; set; } 6 | 7 | public long UserId { get; set; } 8 | 9 | public string ResetCode { get; set; } 10 | 11 | public string Password { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.Zero.SampleApp/Users/User.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Authorization.Users; 2 | 3 | namespace StudioX.Zero.SampleApp.Users 4 | { 5 | public class User : StudioXUser 6 | { 7 | public override string ToString() 8 | { 9 | return string.Format("[User {0}] {1}", Id, UserName); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.IdentityServer4.Tests/IdentityServer4/DependencyInjectionTests.cs: -------------------------------------------------------------------------------- 1 | using Xunit; 2 | 3 | namespace StudioX.IdentityServer4 4 | { 5 | public class DependencyInjectionTests: StudioXZeroIdentityServerTestBase 6 | { 7 | [Fact] 8 | public void ShouldInjectStudioXPersistedGrantStore() 9 | { 10 | Resolve(); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.IdentityServer4.Tests/IdentityServer4/StudioXZeroIdentityServerTestBase.cs: -------------------------------------------------------------------------------- 1 | using StudioX.TestBase; 2 | 3 | namespace StudioX.IdentityServer4 4 | { 5 | public abstract class StudioXZeroIdentityServerTestBase : StudioXIntegratedTestBase 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Application/AppAuthorizationProvider.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Authorization; 2 | 3 | namespace StudioX.ZeroCore.SampleApp.Application 4 | { 5 | public class AppAuthorizationProvider : AuthorizationProvider 6 | { 7 | public override void SetPermissions(IPermissionDefinitionContext context) 8 | { 9 | 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Application/AppConsts.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.ZeroCore.SampleApp.Application 2 | { 3 | public static class AppConsts 4 | { 5 | public const string LocalizationSourceName = "SampleApp"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Application/AppFeatures.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.ZeroCore.SampleApp.Application 2 | { 3 | public static class AppFeatures 4 | { 5 | public const string SimpleBooleanFeature = "SimpleBooleanFeature"; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Application/AppLocalizationHelper.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Localization; 2 | 3 | namespace StudioX.ZeroCore.SampleApp.Application 4 | { 5 | public static class AppLocalizationHelper 6 | { 7 | public static ILocalizableString L(string name) 8 | { 9 | return new LocalizableString(name, AppConsts.LocalizationSourceName); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Application/AppStaticRoleNames.cs: -------------------------------------------------------------------------------- 1 | namespace StudioX.ZeroCore.SampleApp.Application 2 | { 3 | public static class AppStaticRoleNames 4 | { 5 | public static class Host 6 | { 7 | public const string Admin = "Admin"; 8 | } 9 | 10 | public static class Tenants 11 | { 12 | public const string Admin = "Admin"; 13 | 14 | public const string User = "User"; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Application/Users/IUserAppService.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services; 2 | 3 | namespace StudioX.ZeroCore.SampleApp.Application.Users 4 | { 5 | public interface IUserAppService : IAsyncCrudAppService 6 | { 7 | 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Application/Users/UserDto.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Application.Services.Dto; 2 | using StudioX.AutoMapper; 3 | using StudioX.ZeroCore.SampleApp.Core; 4 | 5 | namespace StudioX.ZeroCore.SampleApp.Application.Users 6 | { 7 | [AutoMap(typeof(User))] 8 | public class UserDto : EntityDto 9 | { 10 | public string UserName { get; set; } 11 | } 12 | } -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Core/Role.cs: -------------------------------------------------------------------------------- 1 | using StudioX.Authorization.Roles; 2 | 3 | namespace StudioX.ZeroCore.SampleApp.Core 4 | { 5 | public class Role : StudioXRole 6 | { 7 | public Role() 8 | { 9 | 10 | } 11 | 12 | public Role(int? tenantId, string name, string displayName) 13 | : base(tenantId, name, displayName) 14 | { 15 | 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/Core/Tenant.cs: -------------------------------------------------------------------------------- 1 | using StudioX.MultiTenancy; 2 | 3 | namespace StudioX.ZeroCore.SampleApp.Core 4 | { 5 | public class Tenant : StudioXTenant 6 | { 7 | protected Tenant() 8 | { 9 | 10 | } 11 | 12 | public Tenant(string tenancyName, string name) 13 | : base(tenancyName, name) 14 | { 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /module-zero/test/StudioX.ZeroCore.SampleApp/EntityFramework/StudioXZeroTemplateDbContextConfigurer.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.EntityFrameworkCore; 2 | 3 | namespace StudioX.ZeroCore.SampleApp.EntityFramework 4 | { 5 | public static class StudioXZeroTemplateDbContextConfigurer 6 | { 7 | public static void Configure(DbContextOptionsBuilder builder, string connectionString) 8 | { 9 | builder.UseSqlServer(connectionString); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /module-zero/tools/gitlink/GitLink.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/module-zero/tools/gitlink/GitLink.exe -------------------------------------------------------------------------------- /module-zero/tools/nuget/nuget.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/studioxsoftware/studiox/73da8d7ec7f952e423c423192063ca4398eafcc6/module-zero/tools/nuget/nuget.exe --------------------------------------------------------------------------------