yavsc/src/Api/Controllers/accounting/AccountController.cs

87 lines
2.8 KiB
C#
Raw Normal View History

2023-03-19 17:57:55 +00:00
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
2023-03-20 19:38:50 +00:00
using Microsoft.EntityFrameworkCore;
using Yavsc.Models;
2025-02-17 23:56:28 +00:00
using Yavsc.Api.Helpers;
using Yavsc.Server.Helpers;
2025-07-07 07:49:18 +01:00
using System.Diagnostics;
2016-05-17 18:22:18 +02:00
namespace Yavsc.WebApi.Controllers
{
2025-02-09 16:57:10 +00:00
[Route("~/api/account")]
[Authorize("ApiScope")]
2016-05-17 18:22:18 +02:00
public class ApiAccountController : Controller
{
2020-10-09 19:35:39 +01:00
readonly ApplicationDbContext _dbContext;
private readonly ILogger _logger;
2016-05-17 18:22:18 +02:00
2025-02-16 22:40:51 +00:00
public ApiAccountController(
2025-02-09 16:57:10 +00:00
ILoggerFactory loggerFactory, ApplicationDbContext dbContext)
2016-05-17 18:22:18 +02:00
{
2025-02-12 20:41:14 +00:00
_logger = loggerFactory.CreateLogger(nameof(ApiAccountController));
2018-01-15 14:09:19 +01:00
_dbContext = dbContext;
2016-05-17 18:22:18 +02:00
}
2025-02-09 16:57:10 +00:00
[HttpGet("me")]
public async Task<IActionResult> Me()
2016-06-10 03:00:24 +02:00
{
2025-02-16 22:40:51 +00:00
if (User == null)
return new BadRequestObjectResult(
new { error = "user not found" });
2025-02-09 16:57:10 +00:00
var uid = User.GetUserId();
2025-07-07 07:49:18 +01:00
Debug.Assert(uid != null, "uid is null");
2025-02-16 22:40:51 +00:00
var userData = await GetUserData(uid);
2025-07-07 07:49:18 +01:00
Debug.Assert(userData != null, "userData is null");
2025-02-16 22:40:51 +00:00
var user = new Yavsc.Models.Auth.Me(userData.Id, userData.UserName, userData.Email,
userData.Avatar,
userData.PostalAddress, userData.DedicatedGoogleCalendar);
2018-01-15 14:09:19 +01:00
2025-02-16 22:40:51 +00:00
var userRoles = _dbContext.UserRoles.Where(u => u.UserId == uid).Select(r => r.RoleId).ToArray();
IdentityRole[] roles = _dbContext.Roles.Where(r => userRoles.Contains(r.Id)).ToArray();
user.Roles = roles.Select(r => r.Name).ToArray();
2016-06-25 21:05:28 +02:00
return Ok(user);
2016-06-10 03:00:24 +02:00
}
2016-11-30 16:44:29 +01:00
2025-02-16 22:40:51 +00:00
private async Task<ApplicationUser> GetUserData(string uid)
{
return await _dbContext.Users
.Include(u => u.PostalAddress)
.Include(u => u.AccountBalance)
.FirstAsync(u => u.Id == uid);
}
2025-02-12 20:41:14 +00:00
[HttpGet("myhost")]
2019-07-21 02:39:57 +02:00
public IActionResult MyHost ()
2017-02-01 03:50:44 +01:00
{
2025-07-07 07:49:18 +01:00
return Ok(new { host = Request.ForwardedFor() });
2017-02-01 03:50:44 +01:00
}
2025-02-16 22:40:51 +00:00
2016-12-01 17:34:29 +01:00
/// <summary>
/// Updates the avatar
/// </summary>
/// <returns></returns>
2025-02-08 21:58:23 +00:00
[HttpPost("~/api/setavatar")]
2016-11-30 16:44:29 +01:00
public async Task<IActionResult> SetAvatar()
{
var root = User.InitPostToFileSystem(null);
2025-02-16 22:40:51 +00:00
var user = await GetUserData(User.GetUserId());
2016-11-30 16:44:29 +01:00
if (Request.Form.Files.Count!=1)
return new BadRequestResult();
2016-12-01 17:34:29 +01:00
var info = user.ReceiveAvatar(Request.Form.Files[0]);
2025-02-16 22:40:51 +00:00
await _dbContext.SaveChangesAsync();
2016-11-30 16:44:29 +01:00
return Ok(info);
}
2025-02-15 18:40:22 +00:00
[HttpGet("identity")]
public async Task<IActionResult> Identity()
{
return Json(User.Claims.Select(c=>new {c.Type, c.Value}));
}
2016-05-17 18:22:18 +02:00
}
}