├── docs ├── 05-Emails.md ├── 06-Newsletters.md ├── 03-Logging.md ├── 04-Localization.md └── 01-Authentication.md ├── deploy └── .gitignore ├── .vscode ├── .gitignore ├── launch.json └── tasks.json ├── src ├── Blogifier.Admin │ ├── assets │ │ ├── scss │ │ │ ├── include │ │ │ │ ├── _icons.scss │ │ │ │ ├── _tooltips.scss │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _section.scss │ │ │ │ ├── _blazor.scss │ │ │ │ └── _highlight.scss │ │ │ ├── helpers │ │ │ │ ├── _reset.scss │ │ │ │ ├── _mixins.scss │ │ │ │ └── _colors.scss │ │ │ ├── layout │ │ │ │ ├── _main.scss │ │ │ │ └── _sidebar.scss │ │ │ ├── pages │ │ │ │ ├── settings │ │ │ │ │ ├── _themes.scss │ │ │ │ │ ├── _about.scss │ │ │ │ │ └── _settings.scss │ │ │ │ └── account │ │ │ │ │ └── _account.scss │ │ │ └── blogifier.scss │ │ └── package.json │ ├── wwwroot │ │ └── admin │ │ │ └── favicons │ │ │ ├── favicon.ico │ │ │ ├── favicon-16x16.png │ │ │ ├── favicon-32x32.png │ │ │ ├── mstile-144x144.png │ │ │ ├── mstile-150x150.png │ │ │ ├── mstile-310x150.png │ │ │ ├── mstile-310x310.png │ │ │ ├── mstile-70x70.png │ │ │ ├── apple-touch-icon.png │ │ │ ├── android-chrome-192x192.png │ │ │ ├── android-chrome-512x512.png │ │ │ ├── browserconfig.xml │ │ │ ├── site.webmanifest │ │ │ └── safari-pinned-tab.svg │ ├── Dtos │ │ ├── FrontCategoryItemDto.cs │ │ ├── FrontPostItemDto.cs │ │ ├── FrontUserInfoDto.cs │ │ ├── FrontBlobInfo.cs │ │ ├── FrontPostImportDto.cs │ │ └── FrontImportDto.cs │ ├── Components │ │ ├── RedirectComponent.razor │ │ ├── PageTitleComponent.razor │ │ └── CategoriesComponent.razor │ ├── Shared │ │ ├── MainLayout.razor │ │ ├── NewsletterLayout.razor │ │ └── BlogsLayout.razor │ ├── App.razor │ ├── Pages │ │ ├── Settings │ │ │ ├── AdvancedView.razor │ │ │ ├── CommentsView.razor │ │ │ ├── MenusView.razor │ │ │ ├── WidgetsView.razor │ │ │ ├── ThemesView.razor │ │ │ ├── CustomizeView.razor │ │ │ └── ScriptsView.razor │ │ ├── Drive │ │ │ └── DriveView.razor │ │ └── Blogs │ │ │ └── SettingsView.razor │ ├── Services │ │ └── ToasterService.cs │ ├── _Imports.razor │ ├── Properties │ │ └── launchSettings.json │ ├── Interop │ │ ├── CommonJsInterop.cs │ │ └── EditorJsInterop.cs │ ├── Program.cs │ └── BlogAuthStateProvider.cs ├── Blogifier.Themes.Standard │ ├── assets │ │ ├── scss │ │ │ ├── page │ │ │ │ ├── _home.scss │ │ │ │ ├── _profile.scss │ │ │ │ └── _account.scss │ │ │ ├── components │ │ │ │ ├── _search.scss │ │ │ │ ├── _dropdowns.scss │ │ │ │ ├── _pagination.scss │ │ │ │ ├── _newsletter.scss │ │ │ │ └── _highlight.scss │ │ │ ├── helpers │ │ │ │ ├── _base.scss │ │ │ │ ├── _colors.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _variables.scss │ │ │ │ └── _reset.scss │ │ │ ├── layout │ │ │ │ ├── _footer.scss │ │ │ │ ├── _widgets.scss │ │ │ │ ├── _header.scss │ │ │ │ ├── _nav.scss │ │ │ │ └── _sidebar.scss │ │ │ ├── post │ │ │ │ ├── _nav.scss │ │ │ │ └── _related.scss │ │ │ ├── include │ │ │ │ └── _buttons.scss │ │ │ └── base.scss │ │ ├── js │ │ │ ├── highlight.js │ │ │ ├── profile.js │ │ │ └── blogifier.js │ │ ├── screenshot.png │ │ ├── svg │ │ │ ├── categories.svg │ │ │ ├── chevron-down.svg │ │ │ ├── bi-chevron-down.svg │ │ │ ├── bi-arrow-left.svg │ │ │ ├── bi-arrow-right.svg │ │ │ ├── bi-arrow-right-short.svg │ │ │ ├── search.svg │ │ │ ├── bi-arrow-up-circle.svg │ │ │ ├── bi-envelope-fill.svg │ │ │ ├── bi-x-circle.svg │ │ │ ├── facebook.svg │ │ │ ├── bi-calendar-event.svg │ │ │ ├── bi-share.svg │ │ │ ├── logo.svg │ │ │ ├── bi-pencil.svg │ │ │ ├── box-arrow-in-right.svg │ │ │ ├── twitter.svg │ │ │ ├── github.svg │ │ │ ├── bi-hash.svg │ │ │ ├── youtube.svg │ │ │ └── instagram.svg │ │ ├── package.json │ │ └── settings.json │ ├── Views │ │ ├── Themes │ │ │ └── standard │ │ │ │ ├── post │ │ │ │ ├── comments.cshtml │ │ │ │ ├── author.cshtml │ │ │ │ └── nav.cshtml │ │ │ │ ├── category.cshtml │ │ │ │ ├── index.cshtml │ │ │ │ ├── search.cshtml │ │ │ │ ├── 404.cshtml │ │ │ │ ├── components │ │ │ │ ├── newsletter.cshtml │ │ │ │ ├── header.cshtml │ │ │ │ ├── footer.cshtml │ │ │ │ └── pagination.cshtml │ │ │ │ ├── layouts │ │ │ │ ├── _base.cshtml │ │ │ │ ├── _account.cshtml │ │ │ │ └── _main.cshtml │ │ │ │ ├── password.cshtml │ │ │ │ └── login.cshtml │ │ └── _ViewImports.cshtml │ ├── wwwroot │ │ └── img │ │ │ ├── logo-black.png │ │ │ └── logo-white.png │ └── ThemesStandardConstant.cs ├── Blogifier │ ├── wwwroot │ │ ├── favicon.ico │ │ └── img │ │ │ ├── avatar.jpg │ │ │ └── cover.jpg │ ├── Views │ │ ├── Index.cshtml │ │ └── _ViewImports.cshtml │ ├── Posts │ │ ├── PostSearch.cs │ │ ├── PostCategory.cs │ │ ├── Category.cs │ │ ├── MarkdigProvider.cs │ │ ├── PostManager.cs │ │ ├── ReverseProvider.cs │ │ └── Post.cs │ ├── Caches │ │ ├── CacheKeys.cs │ │ └── CacheExtensions.cs │ ├── Data │ │ ├── AppEntity.cs │ │ ├── ValueGeneration │ │ │ └── UtcDateTimeValueGenerator .cs │ │ └── AppProvider.cs │ ├── Profiles │ │ ├── NewsletterProfile.cs │ │ ├── MailSettingProfile.cs │ │ ├── BlogProfile.cs │ │ ├── SubscriberProfile.cs │ │ ├── StorageProfile.cs │ │ ├── UserProfile.cs │ │ ├── CategoryProfile.cs │ │ └── PostProfile.cs │ ├── Controllers │ │ ├── AdminController.cs │ │ ├── CategoryController.cs │ │ ├── ErrorController.cs │ │ ├── StorageController.cs │ │ ├── SearchController.cs │ │ ├── HomeController.cs │ │ ├── PageController.cs │ │ ├── PostController.cs │ │ └── SitemapController.cs │ ├── Interfaces │ │ ├── TokenController.cs │ │ ├── MailController.cs │ │ ├── ImportController.cs │ │ ├── NewsletterController.cs │ │ ├── AnalyticsController.cs │ │ ├── SubscriberController.cs │ │ ├── StorageController.cs │ │ ├── BlogController.cs │ │ └── CategoryController.cs │ ├── Newsletters │ │ ├── Newsletter.cs │ │ ├── MailSettingData.cs │ │ ├── Subscriber.cs │ │ ├── SubscriberProvider.cs │ │ └── NewsletterProvider.cs │ ├── Options │ │ ├── OptionInfo.cs │ │ └── OptionProvider.cs │ ├── Blogs │ │ ├── BlogNotIitializeException.cs │ │ ├── BlogData.cs │ │ └── AnalyticsProvider.cs │ ├── Extensions │ │ └── PrincipalExtensions.cs │ ├── Storages │ │ ├── StorageReference.cs │ │ ├── IStorageProvider.cs │ │ └── Storage.cs │ ├── Identity │ │ ├── SignInManager.cs │ │ ├── UserInfo.cs │ │ ├── UserManager.cs │ │ ├── UserClaimsPrincipalFactory.cs │ │ ├── UserProvider.cs │ │ └── IdentityExtensions.cs │ ├── Properties │ │ └── launchSettings.json │ └── appsettings.json └── Blogifier.Shared │ ├── Enums │ ├── PostType.cs │ ├── StorageReferenceType.cs │ ├── StorageType.cs │ ├── UserState.cs │ ├── AnalyticsListType.cs │ ├── UserType.cs │ ├── GroupAction.cs │ ├── SaveStatus.cs │ ├── PostListType.cs │ ├── PostState.cs │ ├── UploadType.cs │ ├── PublishedStatus.cs │ ├── AnalyticsPeriod.cs │ └── SendNewsletterState.cs │ ├── Models │ ├── AccountModel.cs │ ├── MainModel.cs │ ├── SearchModel.cs │ ├── OptionItem.cs │ ├── PostVisit.cs │ ├── IndexModel.cs │ ├── PostPagerModel.cs │ ├── AccountProfileModel.cs │ ├── CategoryModel.cs │ ├── ChartModel.cs │ ├── PostModel.cs │ ├── ThemeItem.cs │ ├── AccountInitializeModel.cs │ ├── AccountLoginModel.cs │ ├── AccountProfileEditModel.cs │ ├── AccountProfilePasswordModel.cs │ ├── AccountRegisterModel.cs │ └── ThemeSettings.cs │ ├── Dtos │ ├── CategoryDto.cs │ ├── ImportRssDto.cs │ ├── PostBriefDto.cs │ ├── CategoryEitorDto.cs │ ├── AboutDto.cs │ ├── ImportDto.cs │ ├── SubscriberApplyDto.cs │ ├── CategoryItemDto.cs │ ├── BlogSumDto.cs │ ├── UserDto.cs │ ├── StorageDto.cs │ ├── NewsletterDto.cs │ ├── PostSlugDto.cs │ ├── SubscriberDto.cs │ ├── BlogEitorDto.cs │ ├── UserInfoDto.cs │ ├── AnalyticsDto.cs │ ├── PostItemDto.cs │ ├── PostEditorDto.cs │ ├── PostDto.cs │ ├── MailSettingDto.cs │ ├── UserEditorDto.cs │ ├── MainDto.cs │ ├── PostToHtmlDto.cs │ └── PostPagerDto.cs │ ├── Helper │ ├── DateTimeHelper.cs │ ├── PageHelper.cs │ └── StringHelper.cs │ ├── Identity │ └── BlogifierClaimTypes.cs │ ├── BlogifierSharedConstant.cs │ ├── Blogifier.Shared.csproj │ └── Extensions │ └── PrincipalExtensions.cs ├── global.json ├── docker.sh ├── tests └── Blogifier.Tests │ ├── BaseTests.cs │ ├── TestHelper.cs │ └── Blogifier.Tests.csproj ├── .dockerignore ├── publish.cmd ├── publish.sh ├── .config └── dotnet-tools.json ├── SECURITY.md ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md └── workflows │ └── build.yml ├── Dockerfile ├── LICENSE └── docker-compose.yml /docs/05-Emails.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/06-Newsletters.md: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /deploy/.gitignore: -------------------------------------------------------------------------------- 1 | data/ 2 | -------------------------------------------------------------------------------- /.vscode/.gitignore: -------------------------------------------------------------------------------- 1 | settings.json 2 | -------------------------------------------------------------------------------- /src/Blogifier.Admin/assets/scss/include/_icons.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/Blogifier.Themes.Standard/assets/scss/page/_home.scss: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /global.json: -------------------------------------------------------------------------------- 1 | { 2 | "sdk": { 3 | "version": "8.0.101" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /docker.sh: -------------------------------------------------------------------------------- 1 | # docker 2 | docker build -t dorthl/blogifier:latest . 3 | docker push dorthl/blogifier:latest 4 | -------------------------------------------------------------------------------- /src/Blogifier.Themes.Standard/assets/scss/components/_search.scss: -------------------------------------------------------------------------------- 1 | .search { 2 | &-form{} 3 | &-results{} 4 | } 5 | -------------------------------------------------------------------------------- /src/Blogifier.Themes.Standard/assets/scss/page/_profile.scss: -------------------------------------------------------------------------------- 1 | 2 | 3 | .profile { 4 | margin-top: 8rem; 5 | } 6 | -------------------------------------------------------------------------------- /tests/Blogifier.Tests/BaseTests.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Tests; 2 | 3 | public class BaseTests 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/Blogifier.Themes.Standard/assets/js/highlight.js: -------------------------------------------------------------------------------- 1 | import hljs from 'highlight.js'; 2 | hljs.initHighlightingOnLoad(); 3 | -------------------------------------------------------------------------------- /src/Blogifier/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier/wwwroot/favicon.ico -------------------------------------------------------------------------------- /src/Blogifier/wwwroot/img/avatar.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier/wwwroot/img/avatar.jpg -------------------------------------------------------------------------------- /src/Blogifier/wwwroot/img/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier/wwwroot/img/cover.jpg -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | .git 2 | **/bin 3 | **/obj 4 | **/node_modules 5 | Dockerfile 6 | docker-compose.yml 7 | deploy/ 8 | **/package-lock.json 9 | -------------------------------------------------------------------------------- /publish.cmd: -------------------------------------------------------------------------------- 1 | rmdir dist /s/q 2 | dotnet publish -c Release /p:RuntimeIdentifier=win-x64 ./src/Blogifier/Blogifier.csproj -v minimal --output dist 3 | -------------------------------------------------------------------------------- /src/Blogifier.Admin/assets/scss/helpers/_reset.scss: -------------------------------------------------------------------------------- 1 | strong, 2 | b { 3 | font-weight: 500; 4 | } 5 | 6 | img { 7 | max-width: 100%; 8 | } 9 | -------------------------------------------------------------------------------- /src/Blogifier.Shared/Enums/PostType.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public enum PostType 4 | { 5 | Post = 1, 6 | Page = 2, 7 | } 8 | -------------------------------------------------------------------------------- /src/Blogifier.Shared/Enums/StorageReferenceType.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public enum StorageReferenceType 4 | { 5 | Post = 1, 6 | } 7 | -------------------------------------------------------------------------------- /src/Blogifier.Shared/Enums/StorageType.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public enum StorageType 4 | { 5 | Local = 1, 6 | Minio = 2, 7 | } 8 | -------------------------------------------------------------------------------- /src/Blogifier.Shared/Enums/UserState.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public enum UserState 4 | { 5 | Disable = -1, 6 | None = 0, 7 | } 8 | -------------------------------------------------------------------------------- /src/Blogifier.Themes.Standard/Views/Themes/standard/post/comments.cshtml: -------------------------------------------------------------------------------- 1 | 2 |
3 | -------------------------------------------------------------------------------- /publish.sh: -------------------------------------------------------------------------------- 1 | # Local machine 2 | rm -fr dist 3 | dotnet publish -c Release /p:RuntimeIdentifier=linux-x64 ./src/Blogifier/Blogifier.csproj --output dist 4 | -------------------------------------------------------------------------------- /src/Blogifier.Shared/Enums/AnalyticsListType.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public enum AnalyticsListType 4 | { 5 | List = 1, 6 | Graph = 2, 7 | } 8 | -------------------------------------------------------------------------------- /src/Blogifier.Shared/Enums/UserType.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public enum UserType 4 | { 5 | Ordinary = 0, 6 | Administrator = 1000, 7 | } 8 | -------------------------------------------------------------------------------- /src/Blogifier.Themes.Standard/assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Themes.Standard/assets/screenshot.png -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/favicon.ico -------------------------------------------------------------------------------- /src/Blogifier.Shared/Models/AccountModel.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public class AccountModel 4 | { 5 | public string? RedirectUri { get; set; } 6 | } 7 | -------------------------------------------------------------------------------- /src/Blogifier.Themes.Standard/wwwroot/img/logo-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Themes.Standard/wwwroot/img/logo-black.png -------------------------------------------------------------------------------- /src/Blogifier.Themes.Standard/wwwroot/img/logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Themes.Standard/wwwroot/img/logo-white.png -------------------------------------------------------------------------------- /src/Blogifier.Shared/Models/MainModel.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public class MainModel(MainDto main) 4 | { 5 | public MainDto Main { get; set; } = main; 6 | } 7 | -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/mstile-144x144.png -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/mstile-150x150.png -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/mstile-310x150.png -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/mstile-310x310.png -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/mstile-70x70.png -------------------------------------------------------------------------------- /src/Blogifier.Shared/Enums/GroupAction.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public enum GroupAction 4 | { 5 | Publish, 6 | Unpublish, 7 | Delete, 8 | } 9 | 10 | -------------------------------------------------------------------------------- /src/Blogifier.Shared/Enums/SaveStatus.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public enum SaveStatus 4 | { 5 | Saving = 1, 6 | Publishing = 2, 7 | Unpublishing = 3, 8 | } 9 | -------------------------------------------------------------------------------- /src/Blogifier.Admin/wwwroot/admin/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/blogifierdotnet/Blogifier/HEAD/src/Blogifier.Admin/wwwroot/admin/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /src/Blogifier.Shared/Models/SearchModel.cs: -------------------------------------------------------------------------------- 1 | namespace Blogifier.Shared; 2 | 3 | public class SearchModel(PostPagerDto pager, MainDto main) : PostPagerModel(pager, main) 4 | { 5 | } 6 | -------------------------------------------------------------------------------- /src/Blogifier/Views/Index.cshtml: -------------------------------------------------------------------------------- 1 | @* For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 *@ 2 |Sorry, there's nothing at this address.
9 |@_localizer["drive-describe"]
10 |@_localizer["theme-customization-desc"]
9 |@_localizer["theme-customization-desc"]
9 |@post.Description
21 |@_localizer["theme-customization-desc"]
11 |@_localizer["theme-customization-desc"]
14 |15 | 16 | 19 | @_localizer["home"] 20 | 21 |
22 |@Model.Main.Description
25 | } 26 |@_localizer["include-scripts"]
11 |