gitextract_3gvf_42o/ ├── .github/ │ └── workflows/ │ └── codeql.yml ├── .gitignore ├── CLAUDE.md ├── CODE_OF_CONDUCT.md ├── LICENSE.txt ├── NuGet.config ├── PopForums.sln ├── PopForums.sln.DotSettings ├── README.md ├── SECURITY.md ├── docs/ │ ├── _config.yml │ ├── architecture.md │ ├── azurekitlibrary.md │ ├── customization.md │ ├── elastickitlibrary.md │ ├── externalloginconfig.md │ ├── faq.md │ ├── features.md │ ├── index.md │ ├── multitenant.md │ ├── oauthonly.md │ ├── scoringgame.md │ ├── starthere.md │ └── versionhistory.md └── src/ ├── .editorconfig ├── PopForums/ │ ├── Composers/ │ │ ├── ForumStateComposer.cs │ │ ├── PrivateMessageStateComposer.cs │ │ ├── ResourceComposer.cs │ │ └── TopicStateComposer.cs │ ├── Configuration/ │ │ ├── Config.cs │ │ ├── ConfigContainer.cs │ │ ├── ConfigLoader.cs │ │ ├── ErrorLog.cs │ │ ├── ErrorLogException.cs │ │ ├── ErrorSeverity.cs │ │ ├── ICacheHelper.cs │ │ ├── Settings.cs │ │ └── SettingsManager.cs │ ├── Email/ │ │ ├── EmailQueuePayload.cs │ │ ├── EmailQueuePayloadType.cs │ │ ├── EmailWorker.cs │ │ ├── ForgotPasswordMailer.cs │ │ ├── MailingListComposer.cs │ │ ├── NewAccountMailer.cs │ │ ├── SmtpStatusCode.cs │ │ └── SmtpWrapper.cs │ ├── Extensions/ │ │ ├── ServiceCollections.cs │ │ ├── Streams.cs │ │ ├── Strings.cs │ │ └── Users.cs │ ├── ExternalLogin/ │ │ ├── ExternalAuthenticationResult.cs │ │ ├── ExternalLoginInfo.cs │ │ ├── ExternalUserAssociation.cs │ │ ├── ExternalUserAssociationManager.cs │ │ └── ExternalUserAssociationMatchResult.cs │ ├── Feeds/ │ │ └── FeedService.cs │ ├── Global.cs │ ├── Messaging/ │ │ ├── IBroker.cs │ │ ├── Models/ │ │ │ ├── AwardData.cs │ │ │ ├── AwardPayload.cs │ │ │ ├── QuestionData.cs │ │ │ ├── ReplyData.cs │ │ │ ├── ReplyPayload.cs │ │ │ └── VoteData.cs │ │ ├── Notification.cs │ │ ├── NotificationAdapter.cs │ │ ├── NotificationManager.cs │ │ ├── NotificationTunnel.cs │ │ └── NotificationType.cs │ ├── Models/ │ │ ├── AwardCalculationPayload.cs │ │ ├── BasicJsonMessage.cs │ │ ├── BasicServiceResponse.cs │ │ ├── CategorizedForumContainer.cs │ │ ├── Category.cs │ │ ├── CategoryContainerWithForums.cs │ │ ├── ClientPrivateMessagePost.cs │ │ ├── DisplayProfile.cs │ │ ├── EmailMessage.cs │ │ ├── ErrorLogEntry.cs │ │ ├── ExpiredUserSession.cs │ │ ├── FeedEvent.cs │ │ ├── Forum.cs │ │ ├── ForumPermissionContainer.cs │ │ ├── ForumPermissionContext.cs │ │ ├── ForumState.cs │ │ ├── ForumTopicContainer.cs │ │ ├── IPHistoryEvent.cs │ │ ├── IStreamResponse.cs │ │ ├── Ignore.cs │ │ ├── ModerationLogEntry.cs │ │ ├── ModerationType.cs │ │ ├── ModifyForumRolesContainer.cs │ │ ├── ModifyForumRolesType.cs │ │ ├── NewPost.cs │ │ ├── PagedListOfT.cs │ │ ├── PagedTopicContainer.cs │ │ ├── PagerContext.cs │ │ ├── PasswordResetContainer.cs │ │ ├── PermanentRoles.cs │ │ ├── Post.cs │ │ ├── PostEdit.cs │ │ ├── PostImage.cs │ │ ├── PostImagePersistPayload.cs │ │ ├── PostItemContainer.cs │ │ ├── PostWithChildren.cs │ │ ├── PrivateMessage.cs │ │ ├── PrivateMessageBoxType.cs │ │ ├── PrivateMessagePost.cs │ │ ├── PrivateMessageState.cs │ │ ├── PrivateMessageUser.cs │ │ ├── PrivateMessageView.cs │ │ ├── Profile.cs │ │ ├── QAPostItemContainer.cs │ │ ├── QueuedEmailMessage.cs │ │ ├── ReadStatus.cs │ │ ├── ResponseOfT.cs │ │ ├── SearchIndexPayload.cs │ │ ├── SearchType.cs │ │ ├── SearchWord.cs │ │ ├── SecurityLogEntry.cs │ │ ├── SecurityLogType.cs │ │ ├── ServiceHeartbeat.cs │ │ ├── SetupVariables.cs │ │ ├── SignupData.cs │ │ ├── SingleString.cs │ │ ├── SubscribeNotificationPayload.cs │ │ ├── TimeFormats.cs │ │ ├── Topic.cs │ │ ├── TopicContainer.cs │ │ ├── TopicContainerForQA.cs │ │ ├── TopicState.cs │ │ ├── TopicUnsubscribeContainer.cs │ │ ├── User.cs │ │ ├── UserEdit.cs │ │ ├── UserEditProfile.cs │ │ ├── UserEditSecurity.cs │ │ ├── UserImage.cs │ │ ├── UserImageApprovalContainer.cs │ │ ├── UserResult.cs │ │ ├── UserSearch.cs │ │ └── VotePostContainer.cs │ ├── PopForums.csproj │ ├── Repositories/ │ │ ├── IAwardCalculationQueueRepository.cs │ │ ├── IAwardConditionRepository.cs │ │ ├── IAwardDefinitionRepository.cs │ │ ├── IBanRepository.cs │ │ ├── ICategoryRepository.cs │ │ ├── IEmailQueueRepository.cs │ │ ├── IErrorLogRepository.cs │ │ ├── IEventDefinitionRepository.cs │ │ ├── IExternalUserAssociationRepository.cs │ │ ├── IFavoriteTopicsRepository.cs │ │ ├── IFeedRepository.cs │ │ ├── IForumRepository.cs │ │ ├── IIgnoreRepository.cs │ │ ├── ILastReadRepository.cs │ │ ├── IModerationLogRepository.cs │ │ ├── INotificationRepository.cs │ │ ├── IPointLedgerRepository.cs │ │ ├── IPostImageRepository.cs │ │ ├── IPostImageTempRepository.cs │ │ ├── IPostRepository.cs │ │ ├── IPrivateMessageRepository.cs │ │ ├── IProfileRepository.cs │ │ ├── IQueuedEmailMessageRepository.cs │ │ ├── IRoleRepository.cs │ │ ├── ISearchIndexQueueRepository.cs │ │ ├── ISearchRepository.cs │ │ ├── ISecurityLogRepository.cs │ │ ├── IServiceHeartbeatRepository.cs │ │ ├── ISettingsRepository.cs │ │ ├── ISetupRepository.cs │ │ ├── ISubscribeNotificationRepository.cs │ │ ├── ISubscribedTopicsRepository.cs │ │ ├── ITopicRepository.cs │ │ ├── ITopicViewLogRepository.cs │ │ ├── IUserAvatarRepository.cs │ │ ├── IUserAwardRepository.cs │ │ ├── IUserImageRepository.cs │ │ ├── IUserRepository.cs │ │ └── IUserSessionRepository.cs │ ├── Resources/ │ │ ├── Resources.Designer.cs │ │ ├── Resources.de.resx │ │ ├── Resources.es.resx │ │ ├── Resources.fr.resx │ │ ├── Resources.nl.resx │ │ ├── Resources.resx │ │ ├── Resources.uk.resx │ │ └── Resources.zh-TW.resx │ ├── ScoringGame/ │ │ ├── AwardCalculator.cs │ │ ├── AwardCalculatorWorker.cs │ │ ├── AwardCondition.cs │ │ ├── AwardDefinition.cs │ │ ├── AwardDefinitionService.cs │ │ ├── EventDefinition.cs │ │ ├── EventDefinitionService.cs │ │ ├── EventPublisher.cs │ │ ├── PointLedgerEntry.cs │ │ ├── UserAward.cs │ │ └── UserAwardService.cs │ └── Services/ │ ├── BanService.cs │ ├── CategoryService.cs │ ├── ClaimsToRoleMapper.cs │ ├── CloseAgedTopicsWorker.cs │ ├── FavoriteTopicService.cs │ ├── ForumPermissionService.cs │ ├── ForumService.cs │ ├── IPHistoryService.cs │ ├── ITopicViewCountService.cs │ ├── IUserRetrievalShim.cs │ ├── IgnoreService.cs │ ├── ImageService.cs │ ├── LastReadService.cs │ ├── MailingListService.cs │ ├── ModerationLogService.cs │ ├── PostImageCleanupWorker.cs │ ├── PostImageService.cs │ ├── PostMasterService.cs │ ├── PostService.cs │ ├── PrivateMessageService.cs │ ├── ProfileService.cs │ ├── QueuedEmailService.cs │ ├── ReCaptchaService.cs │ ├── SearchIndexSubsystem.cs │ ├── SearchIndexWorker.cs │ ├── SearchService.cs │ ├── SecurityLogService.cs │ ├── ServiceHeartbeatService.cs │ ├── SetupService.cs │ ├── SitemapService.cs │ ├── SubscribeNotificationWorker.cs │ ├── SubscribedTopicsService.cs │ ├── TenantService.cs │ ├── TextParsingService.cs │ ├── TimeFormatStringService.cs │ ├── TopicService.cs │ ├── TopicViewLogService.cs │ ├── UserEmailReconciler.cs │ ├── UserNameReconciler.cs │ ├── UserService.cs │ ├── UserSessionService.cs │ └── UserSessionWorker.cs ├── PopForums.AzureKit/ │ ├── Logging/ │ │ └── ErrorLogRepository.cs │ ├── PopForums.AzureKit.csproj │ ├── PostImage/ │ │ └── PostImageRepository.cs │ ├── Queue/ │ │ ├── AwardCalculationQueueRepository.cs │ │ ├── EmailQueueRepository.cs │ │ ├── SearchIndexQueueRepository.cs │ │ └── SubscribeNotificationRepository.cs │ ├── Redis/ │ │ ├── CacheHelper.cs │ │ ├── CacheTelemetrySink.cs │ │ └── ICacheTelemetry.cs │ ├── Search/ │ │ ├── SearchIndexSubsystem.cs │ │ ├── SearchRepository.cs │ │ └── SearchTopic.cs │ └── ServiceCollectionExtensions.cs ├── PopForums.AzureKit.Functions/ │ ├── .gitignore │ ├── AwardCalculationProcessor.cs │ ├── BrokerSink.cs │ ├── CacheHelper.cs │ ├── CloseAgedTopicsProcessor.cs │ ├── EmailProcessor.cs │ ├── NotificationTunnel.cs │ ├── PopForums.AzureKit.Functions.csproj │ ├── PostImageCleanupProcessor.cs │ ├── Program.cs │ ├── SearchIndexProcessor.cs │ ├── SubscribeNotificationProcessor.cs │ ├── UserSessionProcessor.cs │ └── host.json ├── PopForums.ElasticKit/ │ ├── PopForums.ElasticKit.csproj │ ├── Search/ │ │ ├── ElasticSearchClientWrapper.cs │ │ ├── SearchIndexSubsystem.cs │ │ ├── SearchRepository.cs │ │ └── SearchTopic.cs │ └── ServiceCollectionExtensions.cs ├── PopForums.Mvc/ │ ├── Areas/ │ │ └── Forums/ │ │ ├── Authentication/ │ │ │ ├── PopForumsAuthenticationDefaults.cs │ │ │ ├── PopForumsAuthenticationIgnoreAttribute.cs │ │ │ └── PopForumsAuthenticationMiddleware.cs │ │ ├── Authorization/ │ │ │ ├── OAuthOnlyForbidAttribute.cs │ │ │ ├── PopForumsPrivateForumsFilter.cs │ │ │ └── PopForumsUserAttribute.cs │ │ ├── BackgroundJobs/ │ │ │ ├── AwardCalculatorJob.cs │ │ │ ├── CloseAgedTopicsJob.cs │ │ │ ├── EmailJob.cs │ │ │ ├── PostImageCleanupJob.cs │ │ │ ├── SearchIndexJob.cs │ │ │ ├── SubscribeNotificationJob.cs │ │ │ └── UserSessionJob.cs │ │ ├── Controllers/ │ │ │ ├── AccountController.cs │ │ │ ├── AdminApiController.cs │ │ │ ├── AdminController.cs │ │ │ ├── ApiController.cs │ │ │ ├── FavoritesController.cs │ │ │ ├── ForumController.cs │ │ │ ├── HomeController.cs │ │ │ ├── IdentityController.cs │ │ │ ├── IgnoreController.cs │ │ │ ├── ImageController.cs │ │ │ ├── ModeratorController.cs │ │ │ ├── PrivateMessagesController.cs │ │ │ ├── ResourcesController.cs │ │ │ ├── SearchController.cs │ │ │ ├── SetupController.cs │ │ │ ├── SitemapController.cs │ │ │ └── SubscriptionController.cs │ │ ├── Extensions/ │ │ │ ├── ApplicationBuilders.cs │ │ │ ├── AuthorizationOptionsExtensions.cs │ │ │ ├── Logger.cs │ │ │ ├── LoggerFactories.cs │ │ │ ├── LoggerProvider.cs │ │ │ ├── ServiceCollections.cs │ │ │ └── WebApplications.cs │ │ ├── ForumRouteConstraint.cs │ │ ├── Messaging/ │ │ │ ├── Broker.cs │ │ │ ├── PopForumsHub.cs │ │ │ └── PopForumsUserIdProvider.cs │ │ ├── Models/ │ │ │ ├── AwardConditionDeleteContainer.cs │ │ │ ├── EmailUsersContainer.cs │ │ │ ├── ExternalLoginState.cs │ │ │ ├── ExternalLoginTypeMetadata.cs │ │ │ ├── IPHistoryQuery.cs │ │ │ ├── ManualEvent.cs │ │ │ ├── SecurityLogQuery.cs │ │ │ ├── UserEditPhoto.cs │ │ │ ├── UserEditWithFiles.cs │ │ │ └── UserState.cs │ │ ├── Services/ │ │ │ ├── ExternalLoginRoutingService.cs │ │ │ ├── ExternalLoginTempService.cs │ │ │ ├── ForumAdapterFactory.cs │ │ │ ├── IForumAdapter.cs │ │ │ ├── OAuthOnlyService.cs │ │ │ ├── TopicViewCountService.cs │ │ │ ├── UserRetrievalShim.cs │ │ │ └── UserStateComposer.cs │ │ ├── TagHelpers/ │ │ │ ├── ForumReadIndicatorTagHelper.cs │ │ │ ├── PMReadIndicatorTagHelper.cs │ │ │ ├── PagerLinksTagHelper.cs │ │ │ ├── TopicReadIndicatorTagHelper.cs │ │ │ └── ValidationClassTagHelper.cs │ │ ├── ViewComponents/ │ │ │ ├── UserNavigationViewComponent.cs │ │ │ └── UserStateViewComponent.cs │ │ └── Views/ │ │ ├── Account/ │ │ │ ├── AccountCreated.cshtml │ │ │ ├── Create.cshtml │ │ │ ├── EditAccountNoUser.cshtml │ │ │ ├── EditProfile.cshtml │ │ │ ├── ExternalLogins.cshtml │ │ │ ├── Forgot.cshtml │ │ │ ├── Login.cshtml │ │ │ ├── ManagePhotos.cshtml │ │ │ ├── MiniProfile.cshtml │ │ │ ├── MiniUserNotFound.cshtml │ │ │ ├── OAuthLogin.cshtml │ │ │ ├── Posts.cshtml │ │ │ ├── ResetPassword.cshtml │ │ │ ├── ResetPasswordSuccess.cshtml │ │ │ ├── Security.cshtml │ │ │ ├── Unsubscribe.cshtml │ │ │ ├── UnsubscribeFailure.cshtml │ │ │ ├── Verify.cshtml │ │ │ ├── VerifyFail.cshtml │ │ │ └── ViewProfile.cshtml │ │ ├── Admin/ │ │ │ └── App.cshtml │ │ ├── Favorites/ │ │ │ └── Topics.cshtml │ │ ├── Forum/ │ │ │ ├── Edit.cshtml │ │ │ ├── Index.cshtml │ │ │ ├── IndexQA.cshtml │ │ │ ├── ModeratorPanel.cshtml │ │ │ ├── NewComment.cshtml │ │ │ ├── NewReply.cshtml │ │ │ ├── NewTopic.cshtml │ │ │ ├── PostItem.cshtml │ │ │ ├── QAPost.cshtml │ │ │ ├── Recent.cshtml │ │ │ ├── Topic.cshtml │ │ │ ├── TopicPage.cshtml │ │ │ ├── TopicQA.cshtml │ │ │ └── Voters.cshtml │ │ ├── Home/ │ │ │ └── Index.cshtml │ │ ├── Identity/ │ │ │ ├── ExternalError.cshtml │ │ │ └── ExternalLoginCallback.cshtml │ │ ├── Ignore/ │ │ │ └── List.cshtml │ │ ├── Moderator/ │ │ │ ├── PostModerationLog.cshtml │ │ │ └── TopicModerationLog.cshtml │ │ ├── PrivateMessages/ │ │ │ ├── Archive.cshtml │ │ │ ├── Create.cshtml │ │ │ ├── Index.cshtml │ │ │ └── View.cshtml │ │ ├── Search/ │ │ │ └── Index.cshtml │ │ ├── Setup/ │ │ │ ├── Exception.cshtml │ │ │ ├── Index.cshtml │ │ │ ├── NoConnection.cshtml │ │ │ └── Success.cshtml │ │ ├── Shared/ │ │ │ ├── Components/ │ │ │ │ ├── UserNavigation/ │ │ │ │ │ └── Default.cshtml │ │ │ │ └── UserState/ │ │ │ │ └── Default.cshtml │ │ │ ├── Forbidden.cshtml │ │ │ ├── NotFound.cshtml │ │ │ └── PopForumsMaster.cshtml │ │ ├── Subscription/ │ │ │ └── Topics.cshtml │ │ └── _ViewImports.cshtml │ ├── Client/ │ │ ├── Components/ │ │ │ ├── AnswerButton.ts │ │ │ ├── CommentButton.ts │ │ │ ├── FavoriteButton.ts │ │ │ ├── FormattedTime.ts │ │ │ ├── FullText.ts │ │ │ ├── HomeUpdater.ts │ │ │ ├── LoginForm.ts │ │ │ ├── MorePostsBeforeReplyButton.ts │ │ │ ├── MorePostsButton.ts │ │ │ ├── NotificationItem.ts │ │ │ ├── NotificationList.ts │ │ │ ├── NotificationMarkAllButton.ts │ │ │ ├── NotificationToggle.ts │ │ │ ├── PMCount.ts │ │ │ ├── PMForm.ts │ │ │ ├── PostMiniProfile.ts │ │ │ ├── PostModerationLogButton.ts │ │ │ ├── PreviewButton.ts │ │ │ ├── PreviousPostsButton.ts │ │ │ ├── QuoteButton.ts │ │ │ ├── ReplyButton.ts │ │ │ ├── ReplyForm.ts │ │ │ ├── SearchNavForm.ts │ │ │ ├── SubscribeButton.ts │ │ │ ├── TopicButton.ts │ │ │ ├── TopicForm.ts │ │ │ ├── TopicModerationLogButton.ts │ │ │ └── VoteCount.ts │ │ ├── Declarations.ts │ │ ├── ElementBase.ts │ │ ├── Models/ │ │ │ ├── Notification.ts │ │ │ ├── PrivateMessage.ts │ │ │ └── PrivateMessageUser.ts │ │ ├── Services/ │ │ │ ├── LocalizationService.ts │ │ │ ├── MessagingService.ts │ │ │ └── NotificationService.ts │ │ ├── State/ │ │ │ ├── ForumState.ts │ │ │ ├── Localizations.ts │ │ │ ├── PrivateMessageState.ts │ │ │ ├── TopicState.ts │ │ │ └── UserState.ts │ │ ├── StateBase.ts │ │ ├── WatchPropertyAttribute.ts │ │ └── tsconfig.json │ ├── Global.cs │ ├── PopForums.Mvc.csproj │ ├── gulpfile.js │ ├── package.json │ └── wwwroot/ │ ├── Admin.js │ ├── Editor.css │ └── PopForums.css ├── PopForums.Sql/ │ ├── CacheHelper.cs │ ├── Extensions.cs │ ├── Global.cs │ ├── ISqlObjectFactory.cs │ ├── JsonElementTypeHandler.cs │ ├── PopForums.Sql.csproj │ ├── PopForums.sql │ ├── PopForums13to14.sql │ ├── PopForums14to15.sql │ ├── PopForums15to16.sql │ ├── PopForums16to21.sql │ ├── PopForums19to20.sql │ ├── PopForums20to21.sql │ ├── PopForums21to22.sql │ ├── Repositories/ │ │ ├── AwardCalculationQueueRepository.cs │ │ ├── AwardConditionRepository.cs │ │ ├── AwardDefinitionRepository.cs │ │ ├── BanRepository.cs │ │ ├── CategoryRepository.cs │ │ ├── EmailQueueRepository.cs │ │ ├── ErrorLogRepository.cs │ │ ├── EventDefinitionRepository.cs │ │ ├── ExternalUserAssociationRepository.cs │ │ ├── FavoriteTopicsRepository.cs │ │ ├── FeedRepository.cs │ │ ├── ForumRepository.cs │ │ ├── IgnoreRepository.cs │ │ ├── LastReadRepository.cs │ │ ├── ModerationLogRepository.cs │ │ ├── NotificationRepository.cs │ │ ├── PointLedgerRepository.cs │ │ ├── PostImageRepository.cs │ │ ├── PostImageTempRepository.cs │ │ ├── PostRepository.cs │ │ ├── PrivateMessageRepository.cs │ │ ├── ProfileRepository.cs │ │ ├── QueuedEmailMessageRepository.cs │ │ ├── RoleRepository.cs │ │ ├── SearchIndexQueueRepository.cs │ │ ├── SearchRepository.cs │ │ ├── SecurityLogRepository.cs │ │ ├── ServiceHeartbeatRepository.cs │ │ ├── SettingsRepository.cs │ │ ├── SetupRepository.cs │ │ ├── SubscribeNotificationRepository.cs │ │ ├── SubscribedTopicsRepository.cs │ │ ├── TopicRepository.cs │ │ ├── TopicViewLogRepository.cs │ │ ├── UserAvatarRepository.cs │ │ ├── UserAwardRepository.cs │ │ ├── UserImageRepository.cs │ │ ├── UserRepository.cs │ │ └── UserSessionRepository.cs │ ├── SqlObjectFactory.cs │ └── StreamResponse.cs ├── PopForums.Test/ │ ├── Composers/ │ │ ├── ForumStateComposerTests.cs │ │ ├── PrivateMessageStateComposerTests.cs │ │ └── TopicStateComposerTests.cs │ ├── Configuration/ │ │ └── SettingsTests.cs │ ├── Email/ │ │ ├── EmailWorkerTests.cs │ │ └── NewAccountMailerTests.cs │ ├── Extensions/ │ │ └── StringTests.cs │ ├── ExternalLogin/ │ │ └── ExternalUserAssociationManagerTests.cs │ ├── Global.cs │ ├── Messaging/ │ │ ├── NotificationAdapterTests.cs │ │ └── NotificationManagerTests.cs │ ├── Models/ │ │ ├── ForumHomeContainerTests.cs │ │ ├── UserEditSecurityTests.cs │ │ └── UserTest.cs │ ├── Mvc/ │ │ ├── Authorization/ │ │ │ └── PopForumsPrivateForumsFilterTests.cs │ │ ├── Controllers/ │ │ │ ├── AccountControllerTests.cs │ │ │ └── AdminApiControllerTests.cs │ │ └── Services/ │ │ └── OAuthOnlyServiceTests.cs │ ├── PopForums.Test.csproj │ ├── ScoringGame/ │ │ ├── AwardCalculatorTests.cs │ │ ├── AwardCalculatorWorkerTests.cs │ │ ├── AwardDefinitionServiceTests.cs │ │ ├── EventDefintionServiceTests.cs │ │ ├── EventPublisherTests.cs │ │ ├── FeedServiceTests.cs │ │ └── UserAwardServiceTests.cs │ └── Services/ │ ├── BanServiceTests.cs │ ├── CategoryServiceTests.cs │ ├── ClaimsToRoleMapperTests.cs │ ├── CloseAgedTopicsWorkerTests.cs │ ├── FavoriteTopicServiceTests.cs │ ├── ForumPermissionServiceTests.cs │ ├── ForumServiceTests.cs │ ├── ImageServiceTests.cs │ ├── LastReadServiceTests.cs │ ├── PostImageCleanupWorkerTests.cs │ ├── PostImageServiceTests.cs │ ├── PostMasterServiceTests.cs │ ├── PostServiceTests.cs │ ├── PrivateMessageServiceTests.cs │ ├── ProfileServiceTests.cs │ ├── QueuedEmailServiceTests.cs │ ├── SearchIndexWorkerTests.cs │ ├── SearchServiceTests.cs │ ├── SecurityLogServiceTests.cs │ ├── SetupServiceTests.cs │ ├── SitemapServiceTests.cs │ ├── SubscribeNotificationWorkerTests.cs │ ├── SubscribedTopicsServiceTests.cs │ ├── TextParsingServiceCleanForumCodeTests.cs │ ├── TextParsingServiceClientHtmlToForumCodeTests.cs │ ├── TextParsingServiceForumCodeToHtmlTests.cs │ ├── TextParsingServiceOtherTests.cs │ ├── TopicServiceTests.cs │ ├── TopicViewLogServiceTests.cs │ ├── UserEmailReconcilerTests.cs │ ├── UserNameReconcilerTests.cs │ ├── UserServiceTests.cs │ ├── UserSessionServiceTests.cs │ └── UserSessionWorkerTests.cs └── PopForums.Web/ ├── Controllers/ │ └── HomeController.cs ├── PopForums.Web.csproj ├── Program.cs ├── Properties/ │ └── launchSettings.json ├── Views/ │ ├── Home/ │ │ └── Index.cshtml │ ├── Shared/ │ │ └── _Layout.cshtml │ ├── _ViewImports.cshtml │ └── _ViewStart.cshtml └── appsettings.json