using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; using System.Threading.Tasks; using zero.Core; using zero.Core.Api; using zero.Core.Entities; using zero.Core.Identity; using zero.Core.Mapper; using zero.Web.Mapper; using zero.Web.Models; namespace zero.Web.Controllers { [ZeroAuthorize(Permissions.Settings.Users, PermissionsValue.Read)] public class UsersController : BackofficeController { IUserApi Api = null; IUserRolesApi RolesApi = null; ILanguagesApi LanguagesApi = null; ZeroOptions Options = null; public UsersController(IZeroConfiguration config, IUserApi api, IUserRolesApi rolesApi, ILanguagesApi languagesApi, IMapper mapper, IToken token, IOptionsMonitor options) : base(config, mapper, token) { Api = api; RolesApi = rolesApi; LanguagesApi = languagesApi; Options = options.CurrentValue; } /// /// Get user by id /// public async Task GetById([FromQuery] string id) { User user = await Api.GetUserById(id); if (user == null) { return new StatusCodeResult(404); } UserEditModel model = await Mapper.Map(user); model.SupportedCultures = LanguagesApi.GetAllCultures(Configuration.SupportedLanguages); return Json(model); } /// /// Get all users /// public async Task GetAll([FromQuery] ListQuery query) { return await As(await Api.GetByQuery(query, "zero.applications.1-A")); } /// /// Get all permissions for selection /// public IActionResult GetAllPermissions() { return Json(Options.Authorization.Permissions); } /// /// Updates a user password /// [ZeroAuthorize] public async Task UpdatePassword([FromBody] UserPasswordEditModel model) { EntityResult result = null; if (model.NewPassword != model.ConfirmNewPassword) { result = EntityResult.Fail(nameof(model.NewPassword), "@errors.changepassword.newpasswordsnotmatching"); } else { result = await Api.UpdatePassword(model.CurrentPassword, model.NewPassword); } return Json(result); //return await As(await Api.); } /// /// Disables a user /// [ZeroAuthorize(Permissions.Settings.Users, PermissionsValue.Write)] public async Task Disable([FromBody] UserEditModel model) { User entity = await Api.GetUserById(model.Id); return await As(await Api.Disable(entity)); } /// /// Enables a user /// [ZeroAuthorize(Permissions.Settings.Users, PermissionsValue.Write)] public async Task Enable([FromBody] UserEditModel model) { User entity = await Api.GetUserById(model.Id); return await As(await Api.Enable(entity)); } } }