using System.ComponentModel.DataAnnotations; using Luticate2.Auth.Attributes; using Luticate2.Auth.Business; using Luticate2.Auth.Dbo.Basic; using Luticate2.Auth.Dbo.Permissions; using Luticate2.Auth.Dbo.Users; using Luticate2.Auth.Interfaces.Users; using Luticate2.Utils.Controllers; using Luticate2.Utils.Dbo.Basic; using Luticate2.Utils.Dbo.PaginatedRequest; using Luticate2.Utils.Utils; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; namespace Luticate2.Auth.Controllers { [Route(LuAuthExtensions.RoutePrefix + "/[controller]")] public class LuUsersController : LuController { private const string EntityType = LuEntityTypes.LuUsers; private const string ReadPermission = LuPermissions.LuGroupsRead; private const string WritePermission = LuPermissions.LuGroupsWrite; private readonly ILuUsersBusiness _busines; private readonly LuAuthOptionsDbo _luAuthOptions; public LuUsersController(ILuUsersBusiness busines, IOptions luUtilsOptionsDbo, IOptions luAuthOptions) : base(luUtilsOptionsDbo) { _busines = busines; _luAuthOptions = luAuthOptions.Value; } [HttpGet("{id}")] [LuPermission(ReadPermission, EntityType)] public LuApiWrapperDbo GetSingleById([LuPermissionArg][Required]string id) { return Handle(_busines.GetSingleById(id).ToLite()); } [HttpGet] [LuPermission(ReadPermission, EntityType)] public LuApiWrapperDbo> GetMultiple([Required]LuPaginatedRequestDbo request) { return Handle(_busines.GetMultiple(request).ToLite()); } [HttpPost] [LuPermission(WritePermission, EntityType)] public LuApiWrapperDbo Register([Required]LuUsersAddDbo data) { return Handle(_busines.Register(data).ToLite()); } [HttpPost("{id}")] [LuPermission(WritePermission, EntityType)] public LuApiWrapperDbo Edit([LuPermissionArg][Required]string id, [Required]LuUsersEditDbo data) { return Handle(_busines.Edit(id, data).ToLite()); } [HttpDelete("{id}")] [LuPermission(WritePermission, EntityType)] public LuApiWrapperDbo Delete([LuPermissionArg][Required]string id) { return Handle(_busines.DeleteSingleByIdDbo(id).ToLite()); } [HttpPost("login")] public LuApiWrapperDbo Login([Required]string username, [Required]string password) { var loginRes = _busines.Login(username, password); if (loginRes) { Response.Cookies.Append(LuAuthExtensions.TokenCookieName, loginRes.Data.Token, new CookieOptions { HttpOnly = true, Secure = _luAuthOptions.SecureCookies }); } return Handle(loginRes); } [HttpPost("logout")] public LuApiWrapperDbo Logout(/*string token*/) { // var t = token; // if (t == null) // { // t = HttpContext.GetLuUserToken(); // } var t = HttpContext.GetLuUserToken(); var logoutRes = _busines.Logout(t); if (logoutRes/* && (token == null || t == token)*/) { Response.Cookies.Delete(LuAuthExtensions.TokenCookieName); } return Handle(logoutRes); } [HttpGet("me")] public LuApiWrapperDbo Me() { return Handle(_busines.Me().ToLite()); } [HttpGet("sessions")] public LuApiWrapperDbo> Sessions(LuPaginatedRequestDbo paginatedRequestDbo) { return Handle(_busines.Sessions(paginatedRequestDbo)); } } }