using Application.Domain.Entities; using Infrastructure.Application.Services.Settings; using Infrastructure.Data; using Infrastructure.Extensions; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; namespace IoTCenter.Api.Controllers { [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]/[action]")] [ApiController] public class SiteController : ControllerBase { private readonly ILogger _logger; private readonly ISettingService _settingService; private readonly IRepository _userRepo; public SiteController( ILogger logger, ISettingService settingService, IRepository userRepo) { this._logger = logger; this._settingService = settingService; this._userRepo = userRepo; } [HttpPost] public IActionResult GetSite() { try { var username = User.Identity.IsAuthenticated ? this.HttpContext.User.Identity.Name : null; var roles = new List(); var permissions = new List(); if (User.Identity.IsAuthenticated) { roles = this._userRepo.ReadOnlyTable() .Where(o => o.UserName == username) .SelectMany(o => o.UserRoles) .Select(o => o.Role.Name) .ToList(); permissions = this._userRepo.ReadOnlyTable() .Where(o => o.UserName == username) .SelectMany(o => o.UserRoles) .Select(o => o.Role) .SelectMany(o => o.RolePermissions) .Select(o => o.Permission) .Select(o => o.Number) .ToList(); } return Ok(new { logo = this._settingService.GetSetting("logo").Value, name = this._settingService.GetSetting("name").Value, copyright = this._settingService.GetSetting("copyright").Value, version = Helper.Instance.GetVersion(), username, roles, permissions }); } catch (Exception ex) { this._logger.LogError(ex, ex.Message); return Problem(ex.Message); } } } }