yavsc/src/Yavsc/ApiControllers/NativeConfidentialController.cs

70 lines
2.4 KiB
C#
Raw Normal View History

2019-05-08 01:35:10 +01:00

using System;
using System.Linq;
using System.Security.Claims;
2023-03-19 17:57:55 +00:00
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
2023-03-19 17:57:55 +00:00
using Yavsc.Helpers;
using Yavsc.Models;
2016-07-19 15:52:27 +02:00
using Yavsc.Models.Identity;
2016-07-19 15:52:27 +02:00
[Authorize, Route("~/api/gcm")]
2019-05-08 01:35:10 +01:00
public class NativeConfidentialController : Controller
2016-07-19 15:52:27 +02:00
{
2020-10-09 19:35:39 +01:00
readonly ILogger _logger;
readonly ApplicationDbContext _context;
2016-07-19 15:52:27 +02:00
2019-05-08 01:35:10 +01:00
public NativeConfidentialController(ApplicationDbContext context,
2016-07-19 15:52:27 +02:00
ILoggerFactory loggerFactory)
{
2019-05-08 01:35:10 +01:00
_logger = loggerFactory.CreateLogger<NativeConfidentialController>();
_context = context;
}
2016-07-03 23:57:33 +02:00
/// <summary>
/// This is not a method supporting user creation.
/// It only registers Google Clood Messaging id.
/// </summary>
/// <param name="declaration"></param>
/// <returns></returns>
2016-07-19 15:52:27 +02:00
[Authorize, HttpPost("register")]
public IActionResult Register(
2019-05-08 01:35:10 +01:00
[FromBody] DeviceDeclaration declaration)
{
2023-03-19 17:57:55 +00:00
var uid = User.FindFirstValue(ClaimTypes.NameIdentifier);
if (!ModelState.IsValid)
{
_logger.LogError("Invalid model for GCMD");
2016-07-19 15:52:27 +02:00
return new BadRequestObjectResult(ModelState);
}
2019-03-17 00:03:04 +00:00
declaration.LatestActivityUpdate = DateTime.Now;
_logger.LogInformation($"Registering device with id:{declaration.DeviceId} for {uid}");
2023-03-19 17:57:55 +00:00
DeviceDeclaration? alreadyRegisteredDevice = _context.DeviceDeclaration.FirstOrDefault(d => d.DeviceId == declaration.DeviceId);
var deviceAlreadyRegistered = (alreadyRegisteredDevice!=null);
2023-03-19 17:57:55 +00:00
if (alreadyRegisteredDevice==null)
{
2023-03-19 17:57:55 +00:00
declaration.DeclarationDate = DateTime.Now;
declaration.DeviceOwnerId = uid;
_context.DeviceDeclaration.Add(declaration);
}
else {
alreadyRegisteredDevice.DeviceOwnerId = uid;
alreadyRegisteredDevice.Model = declaration.Model;
alreadyRegisteredDevice.Platform = declaration.Platform;
alreadyRegisteredDevice.Version = declaration.Version;
_context.Update(alreadyRegisteredDevice);
_context.SaveChanges(User.GetUserId());
}
2023-03-19 17:57:55 +00:00
_context.SaveChanges(User.GetUserId());
2023-03-19 17:57:55 +00:00
var latestActivityUpdate = _context.Activities.Max(a=>a.DateModified);
return Json(new {
IsAnUpdate = deviceAlreadyRegistered,
2023-03-19 17:57:55 +00:00
UpdateActivities = latestActivityUpdate != declaration.LatestActivityUpdate
});
}
2016-07-19 15:52:27 +02:00
}