Try your search with a different keyword or use * as a wildcard.
using Microsoft.AspNetCore.Mvc;
using Nop.Services.Localization;
using Nop.Services.Security;
using Nop.Services.Stores;
using Nop.Services.Topics;
using Nop.Web.Factories;
using Nop.Web.Framework;
using Nop.Web.Framework.Mvc.Filters;
namespace Nop.Web.Controllers;
[AutoValidateAntiforgeryToken]
public partial class TopicController : BasePublicController
{
#region Fields
protected readonly IAclService _aclService;
protected readonly ILocalizationService _localizationService;
protected readonly IPermissionService _permissionService;
protected readonly IStoreMappingService _storeMappingService;
protected readonly ITopicModelFactory _topicModelFactory;
protected readonly ITopicService _topicService;
#endregion
#region Ctor
public TopicController(IAclService aclService,
ILocalizationService localizationService,
IPermissionService permissionService,
IStoreMappingService storeMappingService,
ITopicModelFactory topicModelFactory,
ITopicService topicService)
{
_aclService = aclService;
_localizationService = localizationService;
_permissionService = permissionService;
_storeMappingService = storeMappingService;
_topicModelFactory = topicModelFactory;
_topicService = topicService;
}
#endregion
#region Methods
public virtual async Task TopicDetails(int topicId)
{
var topic = await _topicService.GetTopicByIdAsync(topicId);
if (topic == null)
return InvokeHttp404();
var notAvailable = !topic.Published ||
//ACL (access control list)
!await _aclService.AuthorizeAsync(topic) ||
//store mapping
!await _storeMappingService.AuthorizeAsync(topic);
//allow administrators to preview any topic
var hasAdminAccess = await _permissionService.AuthorizeAsync(StandardPermissionProvider.AccessAdminPanel) && await _permissionService.AuthorizeAsync(StandardPermissionProvider.ManageTopics);
if (notAvailable && !hasAdminAccess)
return InvokeHttp404();
var model = await _topicModelFactory.PrepareTopicModelAsync(topic);
//display "edit" (manage) link
if (hasAdminAccess)
DisplayEditLink(Url.Action("Edit", "Topic", new { id = model.Id, area = AreaNames.ADMIN }));
//template
var templateViewPath = await _topicModelFactory.PrepareTemplateViewPathAsync(model.TopicTemplateId);
return View(templateViewPath, model);
}
[CheckLanguageSeoCode(ignore: true)]
public virtual async Task TopicDetailsPopup(string systemName)
{
var model = await _topicModelFactory.PrepareTopicModelBySystemNameAsync(systemName);
if (model == null)
return InvokeHttp404();
ViewBag.IsPopup = true;
//template
var templateViewPath = await _topicModelFactory.PrepareTemplateViewPathAsync(model.TopicTemplateId);
return PartialView(templateViewPath, model);
}
[HttpPost]
public virtual async Task Authenticate(int id, string password)
{
var authResult = false;
var title = string.Empty;
var body = string.Empty;
var error = string.Empty;
var topic = await _topicService.GetTopicByIdAsync(id);
if (topic != null &&
topic.Published &&
//password protected?
topic.IsPasswordProtected &&
//store mapping
await _storeMappingService.AuthorizeAsync(topic) &&
//ACL (access control list)
await _aclService.AuthorizeAsync(topic))
{
if (topic.Password != null && topic.Password.Equals(password))
{
authResult = true;
title = await _localizationService.GetLocalizedAsync(topic, x => x.Title);
body = await _localizationService.GetLocalizedAsync(topic, x => x.Body);
}
else
{
error = await _localizationService.GetResourceAsync("Topic.WrongPassword");
}
}
return Json(new { Authenticated = authResult, Title = title, Body = body, Error = error });
}
#endregion
}