using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Identity; using zero.Web.Models; namespace zero.Web.Controllers { [ZeroAuthorize(Permissions.Sections.Spaces, PermissionsValue.True)] public class SpacesController : BackofficeController { ISpacesApi Api; IAuthenticationApi AuthenticationApi; public SpacesController(ISpacesApi api, IAuthenticationApi authenticationApi) { Api = api; AuthenticationApi = authenticationApi; } /// /// Get space by alias /// public IActionResult GetByAlias([FromQuery] string alias) { if (!CanReadSpace(alias)) { return new StatusCodeResult(403); } return Json(Api.GetByAlias(alias)); } /// /// Get all spaces /// public IActionResult GetAll() { IList spaces = Api.GetAll().Where(space => CanReadSpace(space.Alias)).ToList(); return Json(spaces); } /// /// Get list items in a space /// public async Task GetList([FromQuery] string alias, [FromQuery] ListQuery query = null) { if (!CanReadSpace(alias)) { return new StatusCodeResult(403); } return Json(await Api.GetListByQuery(alias, query)); } /// /// Get list items in a space /// public IActionResult GetContent([FromQuery] string alias, [FromQuery] string contentId = null) { if (!CanReadSpace(alias)) { return new StatusCodeResult(403); } //TeamMember model = new TeamMember(); //if (!contentId.IsNullOrEmpty()) //{ // model = await Api.GetItem(alias, contentId); //} JsonSerializerSettings settings = JsonConvert.DefaultSettings(); settings.TypeNameHandling = TypeNameHandling.Objects; return Json(new SpaceContentEditModel() { //Id = model.Id, Alias = alias, //Model = model, //Config = Api.GetEditorConfig(alias) }, settings); } /// /// Save content item /// public async Task Save([FromBody] SpaceContentEditModel model) { if (!CanWriteSpace(model.Alias)) { return new StatusCodeResult(403); } return Json(await Api.Save(model.Alias, model.Model)); } /// /// Deletes a content item /// public async Task Delete([FromQuery] string alias, [FromQuery] string id) { if (!CanWriteSpace(alias)) { return new StatusCodeResult(403); } return Json(await Api.Delete(alias, id)); } /// /// Whether the current user can read a space /// bool CanReadSpace(string alias) { return true; //Permission permission = AuthenticationApi.GetPermission(Permissions.Spaces.PREFIX + alias); //return permission != null && permission.CanRead; } /// /// Whether the current user can read a space /// bool CanWriteSpace(string alias) { return true; //Permission permission = AuthenticationApi.GetPermission(Permissions.Spaces.PREFIX + alias); //return permission != null && permission.CanWrite; } } }